# NumberSequence

The NumberSequence data type represents a series of number values from 0 to 1. The number values are expressed using the NumberSequenceKeypoint type. This type is used in properties such as ParticleEmitter.Size and Beam.Transparency to define a numerical change over time.

#### Equality

Two NumberSequence objects are equivalent only if the values of their NumberSequenceKeypoint are equivalent, even if both would result in similar graphs.

#### Evaluation

The NumberSequence type does not have a built-in method for getting the value at a certain time/point because keypoints can have random envelopes. However, assuming the envelope values of your keypoints are all 0, you can use the following function to evaluate at a specific time.

```
local function evalNumberSequence(sequence: NumberSequence, time: number)
-- If time is 0 or 1, return the first or last value respectively
if time == 0 then
return sequence.Keypoints[1].Value
elseif time == 1 then
return sequence.Keypoints[#sequence.Keypoints].Value
end
-- Otherwise, step through each sequential pair of keypoints
for i = 1, #sequence.Keypoints - 1 do
local currKeypoint = sequence.Keypoints[i]
local nextKeypoint = sequence.Keypoints[i + 1]
if time >= currKeypoint.Time and time < nextKeypoint.Time then
-- Calculate how far alpha lies between the points
local alpha = (time - currKeypoint.Time) / (nextKeypoint.Time - currKeypoint.Time)
-- Return the value between the points using alpha
return currKeypoint.Value + (nextKeypoint.Value - currKeypoint.Value) * alpha
end
end
end
local numberSequence = NumberSequence.new{
NumberSequenceKeypoint.new(0, 0),
NumberSequenceKeypoint.new(0.5, 1),
NumberSequenceKeypoint.new(1, 0),
}
print(evalNumberSequence(numberSequence, 0.65)) --> 0.7
```

## Summary

### Properties

An array of NumberSequenceKeypoint values in ascending order.