[orx-delegate-magic] Use Clock interface instead of Program interface
This commit is contained in:
@@ -2,13 +2,13 @@
|
|||||||
|
|
||||||
package org.openrndr.extra.delegatemagic.dynamics
|
package org.openrndr.extra.delegatemagic.dynamics
|
||||||
|
|
||||||
import org.openrndr.Program
|
import org.openrndr.Clock
|
||||||
import org.openrndr.math.LinearType
|
import org.openrndr.math.LinearType
|
||||||
import kotlin.reflect.KProperty
|
import kotlin.reflect.KProperty
|
||||||
import kotlin.reflect.KProperty0
|
import kotlin.reflect.KProperty0
|
||||||
|
|
||||||
class DoublePropertySpringForcer(
|
class DoublePropertySpringForcer(
|
||||||
private val program: Program,
|
private val clock: Clock,
|
||||||
private val property: KProperty0<Double>,
|
private val property: KProperty0<Double>,
|
||||||
private val k: Double,
|
private val k: Double,
|
||||||
private val kProperty: KProperty0<Double>?,
|
private val kProperty: KProperty0<Double>?,
|
||||||
@@ -25,7 +25,7 @@ class DoublePropertySpringForcer(
|
|||||||
|
|
||||||
val anchor = this.property.get()
|
val anchor = this.property.get()
|
||||||
if (lastTime != null) {
|
if (lastTime != null) {
|
||||||
val dt = program.seconds - lastTime!!
|
val dt = clock.seconds - lastTime!!
|
||||||
if (dt > 0.0) {
|
if (dt > 0.0) {
|
||||||
val sfY = -k * (output!! - anchor)
|
val sfY = -k * (output!! - anchor)
|
||||||
velocity = velocity * decay + sfY * dt * 10.0
|
velocity = velocity * decay + sfY * dt * 10.0
|
||||||
@@ -34,13 +34,13 @@ class DoublePropertySpringForcer(
|
|||||||
} else {
|
} else {
|
||||||
output = this.property.get()
|
output = this.property.get()
|
||||||
}
|
}
|
||||||
lastTime = program.seconds
|
lastTime = clock.seconds
|
||||||
return output ?: error("no value")
|
return output ?: error("no value")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class LinearTypePropertySpringForcer<T : LinearType<T>>(
|
class LinearTypePropertySpringForcer<T : LinearType<T>>(
|
||||||
private val program: Program,
|
private val clock: Clock,
|
||||||
private val property: KProperty0<T>,
|
private val property: KProperty0<T>,
|
||||||
private val k: Double,
|
private val k: Double,
|
||||||
private val kProperty: KProperty0<Double>?,
|
private val kProperty: KProperty0<Double>?,
|
||||||
@@ -56,7 +56,7 @@ class LinearTypePropertySpringForcer<T : LinearType<T>>(
|
|||||||
|
|
||||||
val anchor = this.property.get()
|
val anchor = this.property.get()
|
||||||
if (lastTime != null) {
|
if (lastTime != null) {
|
||||||
val dt = program.seconds - lastTime!!
|
val dt = clock.seconds - lastTime!!
|
||||||
if (dt > 0.0) {
|
if (dt > 0.0) {
|
||||||
val sfY = (output!! - anchor) * -k
|
val sfY = (output!! - anchor) * -k
|
||||||
|
|
||||||
@@ -70,7 +70,7 @@ class LinearTypePropertySpringForcer<T : LinearType<T>>(
|
|||||||
} else {
|
} else {
|
||||||
output = this.property.get()
|
output = this.property.get()
|
||||||
}
|
}
|
||||||
lastTime = program.seconds
|
lastTime = clock.seconds
|
||||||
return output ?: error("no value")
|
return output ?: error("no value")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -84,7 +84,7 @@ class LinearTypePropertySpringForcer<T : LinearType<T>>(
|
|||||||
* @param decayProperty velocity decay property, overrides [decay]
|
* @param decayProperty velocity decay property, overrides [decay]
|
||||||
* @since 0.4.3
|
* @since 0.4.3
|
||||||
*/
|
*/
|
||||||
fun Program.springForcing(
|
fun Clock.springForcing(
|
||||||
property: KProperty0<Double>,
|
property: KProperty0<Double>,
|
||||||
k: Double = 1.0,
|
k: Double = 1.0,
|
||||||
kProperty: KProperty0<Double>? = null,
|
kProperty: KProperty0<Double>? = null,
|
||||||
@@ -92,7 +92,7 @@ fun Program.springForcing(
|
|||||||
decayProperty: KProperty0<Double>? = null
|
decayProperty: KProperty0<Double>? = null
|
||||||
): DoublePropertySpringForcer {
|
): DoublePropertySpringForcer {
|
||||||
return DoublePropertySpringForcer(
|
return DoublePropertySpringForcer(
|
||||||
program = this,
|
clock = this,
|
||||||
property = property,
|
property = property,
|
||||||
k = k,
|
k = k,
|
||||||
kProperty = kProperty,
|
kProperty = kProperty,
|
||||||
@@ -110,7 +110,7 @@ fun Program.springForcing(
|
|||||||
* @param decayProperty velocity decay property, overrides [decay]
|
* @param decayProperty velocity decay property, overrides [decay]
|
||||||
* @since 0.4.3
|
* @since 0.4.3
|
||||||
*/
|
*/
|
||||||
fun <T : LinearType<T>> Program.springForcing(
|
fun <T : LinearType<T>> Clock.springForcing(
|
||||||
property: KProperty0<T>,
|
property: KProperty0<T>,
|
||||||
k: Double = 1.0,
|
k: Double = 1.0,
|
||||||
kProperty: KProperty0<Double>? = null,
|
kProperty: KProperty0<Double>? = null,
|
||||||
@@ -118,7 +118,7 @@ fun <T : LinearType<T>> Program.springForcing(
|
|||||||
decayProperty: KProperty0<Double>? = null
|
decayProperty: KProperty0<Double>? = null
|
||||||
): LinearTypePropertySpringForcer<T> {
|
): LinearTypePropertySpringForcer<T> {
|
||||||
return LinearTypePropertySpringForcer(
|
return LinearTypePropertySpringForcer(
|
||||||
program = this,
|
clock = this,
|
||||||
property = property,
|
property = property,
|
||||||
k = k,
|
k = k,
|
||||||
kProperty = kProperty,
|
kProperty = kProperty,
|
||||||
|
|||||||
@@ -2,14 +2,14 @@
|
|||||||
|
|
||||||
package org.openrndr.extra.delegatemagic.smoothing
|
package org.openrndr.extra.delegatemagic.smoothing
|
||||||
|
|
||||||
import org.openrndr.Program
|
import org.openrndr.Clock
|
||||||
import org.openrndr.math.LinearType
|
import org.openrndr.math.LinearType
|
||||||
import kotlin.math.pow
|
import kotlin.math.pow
|
||||||
import kotlin.reflect.KProperty
|
import kotlin.reflect.KProperty
|
||||||
import kotlin.reflect.KProperty0
|
import kotlin.reflect.KProperty0
|
||||||
|
|
||||||
class DoublePropertySmoother(
|
class DoublePropertySmoother(
|
||||||
private val program: Program,
|
private val clock: Clock,
|
||||||
private val property: KProperty0<Double>,
|
private val property: KProperty0<Double>,
|
||||||
private val factor: Double = 0.99,
|
private val factor: Double = 0.99,
|
||||||
private val factorProperty: KProperty0<Double>?
|
private val factorProperty: KProperty0<Double>?
|
||||||
@@ -18,7 +18,7 @@ class DoublePropertySmoother(
|
|||||||
private var lastTime: Double? = null
|
private var lastTime: Double? = null
|
||||||
operator fun getValue(any: Any?, property: KProperty<*>): Double {
|
operator fun getValue(any: Any?, property: KProperty<*>): Double {
|
||||||
if (lastTime != null) {
|
if (lastTime != null) {
|
||||||
val dt = program.seconds - lastTime!!
|
val dt = clock.seconds - lastTime!!
|
||||||
if (dt > 1E-10) {
|
if (dt > 1E-10) {
|
||||||
val steps = dt * 60.0
|
val steps = dt * 60.0
|
||||||
val ef = (factorProperty?.get() ?: factor).pow(steps)
|
val ef = (factorProperty?.get() ?: factor).pow(steps)
|
||||||
@@ -27,13 +27,13 @@ class DoublePropertySmoother(
|
|||||||
} else {
|
} else {
|
||||||
output = this.property.get()
|
output = this.property.get()
|
||||||
}
|
}
|
||||||
lastTime = program.seconds
|
lastTime = clock.seconds
|
||||||
return output ?: error("no value")
|
return output ?: error("no value")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class PropertySmoother<T : LinearType<T>>(
|
class PropertySmoother<T : LinearType<T>>(
|
||||||
private val program: Program,
|
private val clock: Clock,
|
||||||
private val property: KProperty0<T>,
|
private val property: KProperty0<T>,
|
||||||
private val factor: Double = 0.99,
|
private val factor: Double = 0.99,
|
||||||
private val factorProperty: KProperty0<Double>?
|
private val factorProperty: KProperty0<Double>?
|
||||||
@@ -42,7 +42,7 @@ class PropertySmoother<T : LinearType<T>>(
|
|||||||
private var lastTime: Double? = null
|
private var lastTime: Double? = null
|
||||||
operator fun getValue(any: Any?, property: KProperty<*>): T {
|
operator fun getValue(any: Any?, property: KProperty<*>): T {
|
||||||
if (lastTime != null) {
|
if (lastTime != null) {
|
||||||
val dt = program.seconds - lastTime!!
|
val dt = clock.seconds - lastTime!!
|
||||||
if (dt > 1E-10) {
|
if (dt > 1E-10) {
|
||||||
val steps = dt * 60.0
|
val steps = dt * 60.0
|
||||||
val ef = (factorProperty?.get() ?: factor).pow(steps)
|
val ef = (factorProperty?.get() ?: factor).pow(steps)
|
||||||
@@ -53,7 +53,7 @@ class PropertySmoother<T : LinearType<T>>(
|
|||||||
} else {
|
} else {
|
||||||
output = this.property.get()
|
output = this.property.get()
|
||||||
}
|
}
|
||||||
lastTime = program.seconds
|
lastTime = clock.seconds
|
||||||
return output ?: error("no value")
|
return output ?: error("no value")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -64,7 +64,7 @@ class PropertySmoother<T : LinearType<T>>(
|
|||||||
* @param factor the smoothing factor
|
* @param factor the smoothing factor
|
||||||
* @since 0.4.3
|
* @since 0.4.3
|
||||||
*/
|
*/
|
||||||
fun Program.smoothing(property: KProperty0<Double>, factor: Double = 0.99): DoublePropertySmoother {
|
fun Clock.smoothing(property: KProperty0<Double>, factor: Double = 0.99): DoublePropertySmoother {
|
||||||
return DoublePropertySmoother(this, property, factor, null)
|
return DoublePropertySmoother(this, property, factor, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -74,7 +74,7 @@ fun Program.smoothing(property: KProperty0<Double>, factor: Double = 0.99): Doub
|
|||||||
* @param factor the smoothing factor property
|
* @param factor the smoothing factor property
|
||||||
* @since 0.4.3
|
* @since 0.4.3
|
||||||
*/
|
*/
|
||||||
fun Program.smoothing(
|
fun Clock.smoothing(
|
||||||
property: KProperty0<Double>,
|
property: KProperty0<Double>,
|
||||||
factor: KProperty0<Double>
|
factor: KProperty0<Double>
|
||||||
): DoublePropertySmoother {
|
): DoublePropertySmoother {
|
||||||
@@ -87,7 +87,7 @@ fun Program.smoothing(
|
|||||||
* @param factor the smoothing factor
|
* @param factor the smoothing factor
|
||||||
* @since 0.4.3
|
* @since 0.4.3
|
||||||
*/
|
*/
|
||||||
fun <T : LinearType<T>> Program.smoothing(property: KProperty0<T>, factor: Double = 0.99): PropertySmoother<T> {
|
fun <T : LinearType<T>> Clock.smoothing(property: KProperty0<T>, factor: Double = 0.99): PropertySmoother<T> {
|
||||||
return PropertySmoother(this, property, factor, null)
|
return PropertySmoother(this, property, factor, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -97,6 +97,6 @@ fun <T : LinearType<T>> Program.smoothing(property: KProperty0<T>, factor: Doubl
|
|||||||
* @param factor the smoothing factor property
|
* @param factor the smoothing factor property
|
||||||
* @since 0.4.3
|
* @since 0.4.3
|
||||||
*/
|
*/
|
||||||
fun <T : LinearType<T>> Program.smoothing(property: KProperty0<T>, factor: KProperty0<Double>): PropertySmoother<T> {
|
fun <T : LinearType<T>> Clock.smoothing(property: KProperty0<T>, factor: KProperty0<Double>): PropertySmoother<T> {
|
||||||
return PropertySmoother(this, property, 1E10, factor)
|
return PropertySmoother(this, property, 1E10, factor)
|
||||||
}
|
}
|
||||||
@@ -2,17 +2,17 @@
|
|||||||
|
|
||||||
package org.openrndr.extra.delegatemagic.tracking
|
package org.openrndr.extra.delegatemagic.tracking
|
||||||
|
|
||||||
import org.openrndr.Program
|
import org.openrndr.Clock
|
||||||
import kotlin.reflect.KProperty
|
import kotlin.reflect.KProperty
|
||||||
import kotlin.reflect.KProperty0
|
import kotlin.reflect.KProperty0
|
||||||
|
|
||||||
class PropertyTracker<T>(private val program: Program, private val property: KProperty0<T>, val length: Int = 30) {
|
class PropertyTracker<T>(private val clock: Clock, private val property: KProperty0<T>, val length: Int = 30) {
|
||||||
private val track = mutableListOf<T>()
|
private val track = mutableListOf<T>()
|
||||||
private var lastTime: Double? = null
|
private var lastTime: Double? = null
|
||||||
|
|
||||||
operator fun getValue(any: Any?, property: KProperty<*>): List<T> {
|
operator fun getValue(any: Any?, property: KProperty<*>): List<T> {
|
||||||
if (lastTime != null) {
|
if (lastTime != null) {
|
||||||
val dt = program.seconds - lastTime!!
|
val dt = clock.seconds - lastTime!!
|
||||||
if (dt > 1E-10) {
|
if (dt > 1E-10) {
|
||||||
track.add(this.property.get())
|
track.add(this.property.get())
|
||||||
}
|
}
|
||||||
@@ -22,7 +22,7 @@ class PropertyTracker<T>(private val program: Program, private val property: KPr
|
|||||||
if (track.size > length) {
|
if (track.size > length) {
|
||||||
track.removeAt(0)
|
track.removeAt(0)
|
||||||
}
|
}
|
||||||
lastTime = program.seconds
|
lastTime = clock.seconds
|
||||||
return track
|
return track
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -34,6 +34,6 @@ class PropertyTracker<T>(private val program: Program, private val property: KPr
|
|||||||
* @return a property tracker
|
* @return a property tracker
|
||||||
* @since 0.4.3
|
* @since 0.4.3
|
||||||
*/
|
*/
|
||||||
fun <T> Program.tracking(property: KProperty0<T>, length: Int = 30): PropertyTracker<T> {
|
fun <T> Clock.tracking(property: KProperty0<T>, length: Int = 30): PropertyTracker<T> {
|
||||||
return PropertyTracker(this, property, length)
|
return PropertyTracker(this, property, length)
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user