Linear float curve
Module — 2 files
These files compile together (same module folder).
curve_float.verse
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/SpatialMath }
# A curve meant to be @editable
# The X values of the point should be sequential
curve_float := class<concrete>()
{
# Given the points:
# 0, 0
# 5, 100
# 10, 0
#
# Results:
# For X=2, Y=40
# For X=5, Y=100
# For X=7.5,Y=50
# For X=10, Y=0
# For X=-1, Fails
# For X=11, Fails
@editable
Points: []vector2 = array{}
Evaluate(X: float)<transacts><decides>:float =
var Result: ?float = false
for:
Index->Point: Points
not Result? # If Result is not set, else skip
CurrentPoint:= Points[Index]
NextPoint:= Points[Index+1]
CurrentPoint.X <= X <= NextPoint.X # If X is between two points
Alpha:= (X-CurrentPoint.X)/(NextPoint.X-CurrentPoint.X) # Get the alpha value from X in relation to the two points
do:
set Result = option{Lerp(CurrentPoint.Y, NextPoint.Y, Alpha)}
Result?
}
Sign in to download module
Copy-paste each file above is always free.