Useful expressions and formulas
Offsetting a position by angle and distance
x = x + cos(angle ) * distance
y = y + sin(angle ) * distance
This can be used to cast rays or calculate movement vectors and many more
Framerate independent lerp
x = lerp(self.X, target.X, 1 - speed ^ dt)
speed can be a number from 0-1, the closer to 0 the faster it moves to the target
Remapping a range to a different range
lerp(start1, stop1, unlerp(start2, stop2, value))
the returned range will be between start1 and stop1 If the value goes over or under the start2, stop2 range the returned value will still continue to grow at the scale of start1, start2. If you want to avoid that you can wrap it with clamp(theFormulaAbove, start1, stop2)
source: XHXIAIEIN
Wrapping around a number from 0 to a maximum
value = (number % maximum + maximum) % maximum
the number wraps around at less than 0 and at greater or equal maxOptions
source: hcatarrunas
Displaying time
days = zeropad(floor(TimeInSeconds / 84600), 2)
hours = zeropad(floor(TimeInSeconds / 3600), 2)
minutes = zeropad(floor(TimeInSeconds / 60), 2)
seconds = zeropad(int((TimeInSeconds) % 60), 2)
milliseconds = mid(tokenat(str(TimeInSeconds), 1, "."), 0, 3)
alternatively you can use the Date objects expressions to do this e.g. Date.GetMinutes() (the Date object expects Milliseconds and does not zeropad)
source: Jobel
Snapping a position to a grid
Top left
x = floor(x / gridSize) * gridSize
y = floor(y / gridSize) * gridSize
Center
x = floor(x / gridSize) * gridSize + gridsize / 2
y = floor(y / gridSize) * gridSize + gridsize / 2
Converting decibel to 0-100% volume
decibel = 33 * log10(percent / 100)
percent = 100 * 10 ^(decibel / 33)
source: R0J0Hound
Performance information
fps&" FPS | "&roundToDp(cpuutilisation*100,1)&"% CPU | "&roundToDp(gpuutilisation*100,1)&"% GPU"
set a text objects text to this ever 0.1 seconds for some decently formatted performance information i.e. FPS, GPU and CPU usage
Last updated