Skip to content

$math

Vectors, rotations, interpolation, clamping, trigonometry.

86 natives. Read-only natives only look things up; the rest change something. Parameter types use the language's names (Types).

abs

read-only
$math.abs(value: var) -> var

Get the absolute value.

ParameterTypeMeaning
valuevarArgument

Returns var: Result

acos

read-only
$math.acos(value: var) -> var

Take the arc cosine of a value.

ParameterTypeMeaning
valuevarArgument

Returns var: Result

angle

read-only
$math.angle(degrees: var, radians: var) -> float

Convert from degrees or radians to internal angle type.

ParameterTypeMeaning
degreesvarThe value in degrees
radiansvarThe value in radians

Returns float: Result as an angle

asin

read-only
$math.asin(value: var) -> var

Take the arc sine of a value.

ParameterTypeMeaning
valuevarArgument

Returns var: Result

atan

read-only
$math.atan(value: var) -> var

Take the arc tangent of a value.

ParameterTypeMeaning
valuevarArgument

Returns var: Result

atan2

read-only
$math.atan2(y: var, x: var) -> var

Take the arc tangent of a pair of values.

ParameterTypeMeaning
yvarY axis value
xvarX axis value

Returns var: Result

ceili

read-only
$math.ceili(value: var) -> int

Return the lowest integer >= value.

ParameterTypeMeaning
valuevarThe value to ceil

Returns int: Result

clamp

read-only
$math.clamp(value: var, min: var, max: var) -> var

Clamp a value between a min and max.

ParameterTypeMeaning
valuevarThe value to clamp
minvarThe minimum value
maxvarThe maximum value

Returns var: Result

clamp_length

read-only
$math.clamp_length(value: vec3, min_len: float, max_len: float) -> vec3

Clamps the magnitude of a vector.

ParameterTypeMeaning
valuevec3Input vector
min_lenfloatThe lower bound of length clamp
max_lenfloatThe upper bound of length clamp

Returns vec3: Result

clamp_length_2d

read-only
$math.clamp_length_2d(value: vec2, min_len: float, max_len: float) -> vec2

Clamps the magnitude of a 2d vector.

ParameterTypeMeaning
valuevec2Input vector
min_lenfloatThe lower bound of length clamp
max_lenfloatThe upper bound of length clamp

Returns vec2: Result

cos

read-only
$math.cos(angle: var) -> var

Take the cosine of a value.

ParameterTypeMeaning
anglevarArgument

Returns var: Result

critically_damped_spring_angular

read-only
$math.critically_damped_spring_angular(current: var, target: var, velocity: var, damping_value: var, delta_time: var) -> float

Use a critically damped spring to update an angular value. Handles unwinding of angles.

ParameterTypeMeaning
currentvarThe current value in radians.
targetvarThe desired value in radians.
velocityvarThe rate of change in the value desired.
damping_valuevarThe spring dampening value.
delta_timevarThe time elapsed in seconds.

Returns float: New value after spring has been applied.

critically_damped_spring_standard

read-only
$math.critically_damped_spring_standard(current: var, target: var, velocity: var, damping_value: var, delta_time: var) -> float

Use a critically damped spring to update a linear value.

ParameterTypeMeaning
currentvarThe current value.
targetvarThe desired value.
velocityvarThe rate of change in the value desired.
damping_valuevarThe spring dampening value.
delta_timevarThe time elapsed in seconds.

Returns float: New value after spring has been applied.

critically_damped_spring_standard_3d

read-only
$math.critically_damped_spring_standard_3d(current: var, target: var, velocity: var, damping_value: var, delta_time: var) -> vec3

Use a critically damped spring to update a linear value.

ParameterTypeMeaning
currentvarThe current value.
targetvarThe desired value.
velocityvarThe rate of change in the value desired.
damping_valuevarThe spring dampening value.
delta_timevarThe time elapsed in seconds.

Returns vec3: New value after spring has been applied.

cross

read-only
$math.cross(a: var, b: var) -> vec3

Take the cross product of two vectors.

ParameterTypeMeaning
avarFirst argument
bvarSecond argument

Returns vec3: Result

curve_max_x

read-only
$math.curve_max_x(curve: Reference) -> float

Find a curve's maximum x value or position.

ParameterTypeMeaning
curveReferenceThe curve.

Returns float: The maximum position in the curve.

curve_max_y

read-only
$math.curve_max_y(curve: Reference) -> float

Find a curve's approximate maximum y value.

ParameterTypeMeaning
curveReferenceThe curve.

Returns float: The maximum value in the curve.

curve_min_x

read-only
$math.curve_min_x(curve: Reference) -> float

Find a curve's minimum x value or position.

ParameterTypeMeaning
curveReferenceThe curve.

Returns float: The minimum position in the curve.

curve_min_y

read-only
$math.curve_min_y(curve: Reference) -> float

Find a curve's approximate minimum y value.

ParameterTypeMeaning
curveReferenceThe curve.

Returns float: The minimum value in the curve.

deg2rad

read-only
$math.deg2rad(degrees: var) -> var

Convert from degrees to radians. Accepts float, vec2, vec3, or vec4.

ParameterTypeMeaning
degreesvarThe value in degrees

Returns var: Result in radians

distance

read-only
$math.distance(a: var, b: var) -> float

Get the distance between two vectors.

ParameterTypeMeaning
avarArgument
bvarArgument

Returns float: Result

distance_2d

read-only
$math.distance_2d(a: var, b: var) -> float

Get the 2D distance between two vectors

ParameterTypeMeaning
avarArgument
bvarArgument

Returns float: Result

dividei

read-only
$math.dividei(a: int, b: int) -> int

Use integer division to divide two integers (a / b).

ParameterTypeMeaning
aintFirst argument
bintSecond argument

Returns int: Integer result

dot

read-only
$math.dot(a: var, b: var) -> float

Take the dot product of two vectors.

ParameterTypeMeaning
avarFirst argument
bvarSecond argument

Returns float: Result

eulers_from_rotation

read-only
$math.eulers_from_rotation(quat: vec4) -> vec3

Generate (roll, pitch, yaw) vector from a quaternion.

ParameterTypeMeaning
quatvec4The rotation.

Returns vec3: A vector containing (roll, pitch, yaw)

eval_curve

read-only
$math.eval_curve(curve: Reference, t: float) -> float

Evaluate value of a curve at a specified position.

ParameterTypeMeaning
curveReferenceThe curve.
tfloatThe position.

Returns float: The value of the curve at the point.

floori

read-only
$math.floori(value: var) -> int

Return the highest integer <= value.

ParameterTypeMeaning
valuevarThe value to floor

Returns int: Result

get_closest_point_on_box

read-only
$math.get_closest_point_on_box(point: vec3, extents: vec3, box_offset: vec3, transform: Component, return_relative: bool) -> vec3

Finds the closest point on a box, from another point.

ParameterTypeMeaning
pointvec3Point to test.
extentsvec3The box extents.
box_offsetvec3offset from transform position.
transformComponentOptional. The transform component of the box. If null, the box is in world space.
return_relativeboolWhether to return relative position to the input transform. If false, returns absolute position.

Returns vec3: The closest point on the box.

get_closest_point_on_line_segment

$math.get_closest_point_on_line_segment(a: vec3, b: vec3, point: vec3) -> vec3

Finds the closest point on a line segment, from another point.

ParameterTypeMeaning
avec3One end of line segment
bvec3The other end of line segment
pointvec3Point to test.

Returns vec3: The closest point on the line segment

hours

read-only
$math.hours(time: var) -> float

Convert a time value to hours.

ParameterTypeMeaning
timevarThe time value

Returns float: Result

length

read-only
$math.length(value: var) -> float

Get the length of the vector.

ParameterTypeMeaning
valuevarArgument

Returns float: Result

length_2d

read-only
$math.length_2d(value: var) -> float

Get the 2D length of the vector using only the X and Y components.

ParameterTypeMeaning
valuevarArgument

Returns float: Result

length_squared

read-only
$math.length_squared(value: var) -> float

Get the squared length of the vector

ParameterTypeMeaning
valuevarArgument

Returns float: Result

lerp

read-only
$math.lerp(min: var, max: var, t: var) -> var

Linearly interpolate a value between two others.

ParameterTypeMeaning
minvarThe value returned when t=0
maxvarThe value returned when t=1
tvarThe interpolation factor between 0 and 1

Returns var: Result

ln

read-only
$math.ln(value: var) -> var

Take the natural log of a value.

ParameterTypeMeaning
valuevarArgument

Returns var: Result

make_mask

read-only
$math.make_mask(value: var) -> int

Generate a base-10 mask given a value.

ParameterTypeMeaning
valuevarThe value to add to the mask.

Returns int: Generated mask.

map_range

read-only
$math.map_range(in_min: var, in_max: var, out_min: var, out_max: var, value: var) -> var

Linearly map a value from one range to another. The result is clamped between out_min and out_max.

ParameterTypeMeaning
in_minvarThe lower end of the input range.
in_maxvarThe upper end of the input range.
out_minvarThe lower end of the output range.
out_maxvarThe upper end of the output range.
valuevarThe value to be remapped.

Returns var: Result

max

read-only
$math.max(a: var, b: var) -> var

Get the maximum of two values.

ParameterTypeMeaning
avarFirst argument
bvarSecond argument

Returns var: Result

milliseconds

read-only
$math.milliseconds(time: var) -> float

Convert a time value to milliseconds.

ParameterTypeMeaning
timevarThe time value

Returns float: Result

min

read-only
$math.min(a: var, b: var) -> var

Get the minimum of two values.

ParameterTypeMeaning
avarFirst argument
bvarSecond argument

Returns var: Result

minutes

read-only
$math.minutes(time: var) -> float

Convert a time value to minutes.

ParameterTypeMeaning
timevarThe time value

Returns float: Result

normalize

read-only
$math.normalize(value: var) -> var

Normalize a vector.

ParameterTypeMeaning
valuevarArgument

Returns var: Result

normalize_2d

read-only
$math.normalize_2d(value: var) -> vec2

Return a normalized 2D vector using just the X and Y components.

ParameterTypeMeaning
valuevarArgument

Returns vec2: Result

normalize_rotation

$math.normalize_rotation(quat: vec4) -> vec4

Normalize a quaternion rotation.

ParameterTypeMeaning
quatvec4The quaternion.

Returns vec4: New rotation.

point_in_box

read-only
$math.point_in_box(point: vec3, extents: vec3, box_offset: vec3, transform: Component) -> bool

Test whether a point is inside a box

ParameterTypeMeaning
pointvec3Point to test.
extentsvec3The box extents.
box_offsetvec3offset from transform position.
transformComponentOptional. The transform component of the box. If null, the box is in world space.

Returns bool: Whether the point is inside

point_in_poly

read-only
$math.point_in_poly(test: vec2, poly: list) -> bool

Takes a point and a polygon and returns true if the point is inside.

ParameterTypeMeaning
testvec2Point to test.
polylistList of vertices that define a polygon.

Returns bool: True if point is inside poly.

pow

read-only
$math.pow(base: var, exponent: var) -> var

Get the power of two values.

ParameterTypeMeaning
basevarBase value
exponentvarExponent value

Returns var: Result

project_point_onto_line_segment

$math.project_point_onto_line_segment(a: vec3, b: vec3, point: vec3) -> list

Finds the shortest distance from a point to line segment, returns ratio along segment and distance from segment

ParameterTypeMeaning
avec3One end of line segment
bvec3The other end of line segment
pointvec3Point to test.

Returns list: The closest point on the line segment

quat_inverse

read-only
$math.quat_inverse(quat: vec4) -> vec4

Invert a quaternion

ParameterTypeMeaning
quatvec4The quaternion to invert.

Returns vec4: New quaternion.

quat_mul

read-only
$math.quat_mul(a: vec4, b: vec4) -> vec4

Multiply quaternions

ParameterTypeMeaning
avec4The first quaternion.
bvec4The second quaternion.

Returns vec4: New quaternion.

rad2deg

read-only
$math.rad2deg(radians: var) -> var

Convert from radians to degrees. Accepts float, vec2, vec3, or vec4.

ParameterTypeMeaning
radiansvarThe value in radians

Returns var: Result in degrees

randb

read-only
$math.randb() -> bool

Get a random bool.

Returns bool: Result

randf

read-only
$math.randf(min: float, max: float) -> float

Get a random float from min to max (inclusive).

ParameterTypeMeaning
minfloatThe minimum value
maxfloatThe maximum value (INCLUSIVE)

Returns float: Result

randi

read-only
$math.randi(min: int, max: int) -> int

Get a random integer from min to max (inclusive).

ParameterTypeMeaning
minintThe minimum value
maxintThe maximum value (INCLUSIVE)

Returns int: Result

randv

read-only
$math.randv(min: vec3, max: vec3) -> vec3

Get a random vector with values from min to max (inclusive).

ParameterTypeMeaning
minvec3The minimum value
maxvec3The maximum value

Returns vec3: Result

reverse_lookup_curve

read-only
$math.reverse_lookup_curve(curve: Reference, value: float, sub_divisions: int) -> float

Search for the first position in a curve where the value passed occurs. This only works with curves that have more than one point and do not change direction in the y axis.

ParameterTypeMeaning
curveReferenceThe curve.
valuefloatThe value to search for.
sub_divisionsintThe number of times to subdivide the curve to find the value (precision)

Returns float: The position along the curve where the value first occurs or -1 if the value never occurs.

rotate_vec

read-only
$math.rotate_vec(vec: vec3, axis: vec3, angle: float) -> vec3

Rotate a vector around an axis by an angle.

ParameterTypeMeaning
vecvec3The vector to rotate.
axisvec3The axis about which to rotate.
anglefloatThe angle (radians) about the axis.

Returns vec3: New vector.

rotate_vec_2d

$math.rotate_vec_2d(vec: vec2, angle: float) -> vec2

Rotate a 2D vector around it's pivot.

ParameterTypeMeaning
vecvec2The vector to rotate.
anglefloatThe angle (radians) to rotate in radians.

Returns vec2: New vector.

rotate_vec_by_quaternion

read-only
$math.rotate_vec_by_quaternion(vec: vec3, quat: vec4) -> vec3

Rotate a vector by a quaternion.

ParameterTypeMeaning
vecvec3The vector to rotate.
quatvec4The rotation.

Returns vec3: New vector.

rotation_from_axis_angle

read-only
$math.rotation_from_axis_angle(axis: vec3, angle: float) -> vec4

Generate a quaternion from an axis and angle.

ParameterTypeMeaning
axisvec3The axis.
anglefloatThe angle (radians) about the axis.

Returns vec4: New rotation.

rotation_from_euler_angles

read-only
$math.rotation_from_euler_angles(eulers: vec3) -> vec4

Create a quaternion from radian euler angles

ParameterTypeMeaning
eulersvec3The X (roll), Y (pitch), and Z (yaw) rotations in euler angles as radians

Returns vec4: New rotation.

rotation_from_forward

read-only
$math.rotation_from_forward(forward: vec3) -> vec4

Generate a quaternion from a forward vector.

ParameterTypeMeaning
forwardvec3The forward vector.

Returns vec4: New rotation.

rotation_from_forward_up

read-only
$math.rotation_from_forward_up(forward: vec3, up: vec3) -> vec4

Generate a quaternion from a forward and up vector.

ParameterTypeMeaning
forwardvec3The forward vector.
upvec3The up vector.

Returns vec4: New rotation.

rotation_mul

read-only
$math.rotation_mul(a: vec4, b: vec4) -> vec4

Multiply two quaternion rotations.

ParameterTypeMeaning
avec4The first quaternion.
bvec4The second quaternion.

Returns vec4: New rotation.

rotation_to_angle

read-only
$math.rotation_to_angle(quat: vec4) -> float

Convert a quaternion to an angle of rotation.

ParameterTypeMeaning
quatvec4The rotation.

Returns float: Angle of rotation.

rotation_to_axis

read-only
$math.rotation_to_axis(quat: vec4) -> vec3

Convert a quaternion to an axis of rotation.

ParameterTypeMeaning
quatvec4The rotation.

Returns vec3: Axis of rotation.

roundi

read-only
$math.roundi(value: var) -> int

Return value rounded to the nearest integer (0.5 rounds up).

ParameterTypeMeaning
valuevarThe value to round

Returns int: Result

saturate

read-only
$math.saturate(value: var) -> var

Clamp a value between 0 and 1.

ParameterTypeMeaning
valuevarArgument

Returns var: Result

seconds

read-only
$math.seconds(time: var) -> float

Convert a time value to seconds.

ParameterTypeMeaning
timevarThe time value

Returns float: Result

shift_within_pi

read-only
$math.shift_within_pi(current: var, target: var) -> var

Add or subtract multiples of 2pi to the first parameter to be within pi of the second parameter. Note: Expects radians

ParameterTypeMeaning
currentvarThe value to be shifted
targetvarThe reference value

Returns var: Result

sign

read-only
$math.sign(value: var) -> var

Get the sign of value.

ParameterTypeMeaning
valuevarArgument

Returns var: Result

sin

read-only
$math.sin(angle: var) -> var

Take the sine of a value.

ParameterTypeMeaning
anglevarArgument

Returns var: Result

slerp

read-only
$math.slerp(quat_a: vec4, quat_b: vec4, param: float) -> vec4

Interpolate between 2 quaternions

ParameterTypeMeaning
quat_avec4The first quaternion
quat_bvec4The second quaternion
paramfloatThe interpolation parameter

Returns vec4: Interpolated rotation.

slerp_fast

read-only
$math.slerp_fast(quat_a: vec4, quat_b: vec4, param: float) -> vec4

Interpolate between 2 quaternions, but faster and less accurate

ParameterTypeMeaning
quat_avec4The first quaternion
quat_bvec4The second quaternion
paramfloatThe interpolation parameter

Returns vec4: Interpolated rotation.

sqrt

read-only
$math.sqrt(value: var) -> var

Get the square root.

ParameterTypeMeaning
valuevarArgument

Returns var: Result

srand

$math.srand(seed: var)

Set the random seed for the current instance of the calling script.

ParameterTypeMeaning
seedvarThe seed value

srand_with_virtual_time

$math.srand_with_virtual_time()

Set the random seed for the current instance of the calling script using virtual time.

tan

read-only
$math.tan(angle: var) -> var

Take the tangent of a value.

ParameterTypeMeaning
anglevarArgument

Returns var: Result

truncatei

read-only
$math.truncatei(value: var) -> int

Return value with fractional portion removed.

ParameterTypeMeaning
valuevarThe value to truncate

Returns int: Result

unwind_angle

read-only
$math.unwind_angle(radians: var) -> var

Add or subtract multiples of 2pi to the value until it is between 0 and 2pi.

ParameterTypeMeaning
radiansvarArgument

Returns var: Result

unwind_angle_zero

read-only
$math.unwind_angle_zero(radians: var) -> var

Add or subtract multiples of 2pi to the value until it is between -pi and pi.

ParameterTypeMeaning
radiansvarArgument

Returns var: Result

vec2

read-only
$math.vec2(x: float, y: float) -> vec2

Create a 2-component vector.

ParameterTypeMeaning
xfloatX-component
yfloatY-component

Returns vec2: Result

vec3

read-only
$math.vec3(x: float, y: float, z: float) -> vec3

Create a 3-component vector.

ParameterTypeMeaning
xfloatX-component
yfloatY-component
zfloatZ-component

Returns vec3: Result

vec3_components_in_range

$math.vec3_components_in_range(vec: vec3, min: vec3, max: vec3) -> bool

Determines whether or not the X, Y and Z components of a vec3 fall within a given range.

ParameterTypeMeaning
vecvec3The vector to test.
minvec3The minimum values in the range.
maxvec3The maximum values of the range.

Returns bool: True if all components fall within the specified range, false otherwise.

vec4

read-only
$math.vec4(x: float, y: float, z: float, w: float) -> vec4

Create a 4-component vector. Only intended to be used for color and radian rotations.

ParameterTypeMeaning
xfloatX-component
yfloatY-component
zfloatZ-component
wfloatW-component

Returns vec4: Result

wrap

read-only
$math.wrap(value: var, left_bound: var, right_bound: var) -> var

Wrap a value between a min and max bound.

ParameterTypeMeaning
valuevarThe value to wrap
left_boundvarThe lesser boundary.
right_boundvarThe greater boundary.

Returns var: Result