CurveKey
A CurveKey represents a key point on a SimpleCurve, providing a value for a specific point in time on that curve. Additional properties may be used to control the shape of that curve.
Constructors
| Constructor Name | Return Type | Description | Tags | 
|---|---|---|---|
| CurveKey.New() | CurveKey | Constructs a new CurveKey. | None | 
| CurveKey.New(number time, number value, [table optionalParameters]) | CurveKey | Constructs a CurveKey with the given time and value. An optional table may be provided to override the following parameters: interpolation (CurveInterpolation): Sets theinterpolationproperty of the curve key. Defaults toCurveInterpolation.LINEAR.arriveTangent (number): Sets thearriveTangentproperty of the curve key. Defaults to 0.leaveTangent (number): Sets theleaveTangentproperty of the curve key. Defaults to 0.tangent (number): Sets both thearriveTangentandleaveTangentproperties of the curve key. It is an error to specifyarriveTangentorleaveTangentiftangentis provided. | None | 
| CurveKey.New(CurveKey other) | CurveKey | Makes a copy of the given CurveKey. | None | 
Properties
| Property Name | Return Type | Description | Tags | 
|---|---|---|---|
| interpolation | CurveInterpolation | The interpolation mode between this curve key and the next. | Read-Write | 
| time | number | The time at this curve key. | Read-Write | 
| value | number | The value at this curve key. | Read-Write | 
| arriveTangent | number | The arriving tangent at this key when using cubic interpolation. | Read-Write | 
| leaveTangent | number | The leaving tangent at this key when using cubic interpolation. | Read-Write | 
Examples
Example using:
New
 interpolation
 time
 value
 In this example, we track the position of the player and draw a line to represent their movement path. Although we only save the player's position every 0.3 seconds, we are able to draw a much smoother path thanks to the SimpleCurve data type. At runtime we construct three SimpleCurves, one for each of player's dimensions of movement: X, Y, and Z. The curves are built with a small set of points, but can estimate the in-between values with the GetValue() function.
local PLAYER = Game.GetLocalPlayer()
local MAX_POINTS = 30
local TIME_PERIOD = 0.3
local DRAW_RESOLUTION = 0.02
local lastPosition = PLAYER:GetWorldPosition()
local positions = {}
local curveX, curveY, curveZ
function Tick()
    Task.Wait(TIME_PERIOD)
    local pos = PLAYER:GetWorldPosition()
    if lastPosition ~= pos then
        lastPosition = pos
        table.insert(positions, pos)
        if #positions > MAX_POINTS then
            table.remove(positions, 1)
        end
        RebuildCurves()
    end
    DrawDebug()
end
function RebuildCurves()
    local keysX = {}
    local keysY = {}
    local keysZ = {}
    local t = 0
    local key
    for i,pos in ipairs(positions) do
        key = CurveKey.New()
        key.interpolation = CurveInterpolation.CUBIC
        key.time = t
        key.value = pos.x
        table.insert(keysX, key)
        key = CurveKey.New()
        key.interpolation = CurveInterpolation.CUBIC
        key.time = t
        key.value = pos.y
        table.insert(keysY, key)
        key = CurveKey.New()
        key.interpolation = CurveInterpolation.CUBIC
        key.time = t
        key.value = pos.z
        table.insert(keysZ, key)
        t = t + TIME_PERIOD
    end
    curveX = SimpleCurve.New(keysX)
    curveY = SimpleCurve.New(keysY)
    curveZ = SimpleCurve.New(keysZ)
end
function DrawDebug()
    local drawParams = {duration = TIME_PERIOD+0.1, thickness = 3}
    local prevPoint = nil
    local t = curveX.minTime
    while t <= curveX.maxTime do
        local point = Vector3.New(
            curveX:GetValue(t),
            curveY:GetValue(t),
            curveZ:GetValue(t)
        )
        if prevPoint ~= nil then
            CoreDebug.DrawLine(prevPoint, point, drawParams)
        end
        prevPoint = point
        t = t + DRAW_RESOLUTION
    end
end
See also: SimpleCurve.New | CoreDebug.DrawLine | Game.GetLocalPlayer | Player.GetWorldPosition | Task.Wait