[orx-noise] Add unseeded method to Random (#175)
This commit is contained in:
@@ -3,6 +3,7 @@ package org.openrndr.extra.noise
|
||||
import org.openrndr.math.Vector2
|
||||
import org.openrndr.math.Vector3
|
||||
import org.openrndr.math.Vector4
|
||||
import org.openrndr.shape.Rectangle
|
||||
import kotlin.math.ln
|
||||
import kotlin.math.max
|
||||
import kotlin.math.pow
|
||||
@@ -10,7 +11,9 @@ import kotlin.math.sqrt
|
||||
import org.openrndr.extra.noise.fbm as orxFbm
|
||||
import kotlin.random.Random as DefaultRandom
|
||||
|
||||
|
||||
/**
|
||||
* Deterministic Random using a seed to guarantee the same random values between iterations
|
||||
*/
|
||||
object Random {
|
||||
var rnd: DefaultRandom
|
||||
|
||||
@@ -54,6 +57,30 @@ object Random {
|
||||
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) {
|
||||
val state = rnd
|
||||
val currentSeed = seed
|
||||
@@ -334,5 +361,9 @@ object Random {
|
||||
|
||||
return elements.elementAtOrNull(index) ?: elements.last()
|
||||
}
|
||||
|
||||
fun point(rect: Rectangle): Vector2 {
|
||||
return rect.position(vector2(0.0, 1.0))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user