[orx-noise] Add unseeded method to Random (#175)

This commit is contained in:
Ricardo Matias
2021-02-27 12:25:15 +01:00
committed by GitHub
parent dfd99cdb90
commit 8521cebe16

View File

@@ -3,6 +3,7 @@ package org.openrndr.extra.noise
import org.openrndr.math.Vector2 import org.openrndr.math.Vector2
import org.openrndr.math.Vector3 import org.openrndr.math.Vector3
import org.openrndr.math.Vector4 import org.openrndr.math.Vector4
import org.openrndr.shape.Rectangle
import kotlin.math.ln import kotlin.math.ln
import kotlin.math.max import kotlin.math.max
import kotlin.math.pow import kotlin.math.pow
@@ -10,7 +11,9 @@ import kotlin.math.sqrt
import org.openrndr.extra.noise.fbm as orxFbm import org.openrndr.extra.noise.fbm as orxFbm
import kotlin.random.Random as DefaultRandom import kotlin.random.Random as DefaultRandom
/**
* Deterministic Random using a seed to guarantee the same random values between iterations
*/
object Random { object Random {
var rnd: DefaultRandom var rnd: DefaultRandom
@@ -54,6 +57,30 @@ object Random {
seed = "${seedBase}-${seedTracking}" seed = "${seedBase}-${seedTracking}"
} }
/**
* Use this when you want to get non-deterministic values aka random every call
*
* @param fn
*/
fun unseeded(fn: Random.() -> Unit) {
val state = rnd
val currentSeed = seed
rnd = DefaultRandom
this.fn()
resetState()
seed = currentSeed
rnd = state
}
/**
* Use this inside `extend` methods to get the same result between iterations
*
* @param fn
*/
fun isolated(fn: Random.() -> Unit) { fun isolated(fn: Random.() -> Unit) {
val state = rnd val state = rnd
val currentSeed = seed val currentSeed = seed
@@ -334,5 +361,9 @@ object Random {
return elements.elementAtOrNull(index) ?: elements.last() return elements.elementAtOrNull(index) ?: elements.last()
} }
fun point(rect: Rectangle): Vector2 {
return rect.position(vector2(0.0, 1.0))
}
} }