On this page
subsoap/defmath/defmath.defmath
Extra math helpers for Defold: lerps, clamps, easing, and 2D angle utilities.
- GitHub: subsoap/defmath — pinned to
2fe3aed- Pick a release from subsoap/defmath releases and add its Source code (zip) URL (or a packaged
.zipasset, if the library ships one) togame.projectunder[project]dependencies, then Fetch Libraries in the Defold editor. - Run
bunx @defold-typescript/cli resolveto materialize its types. - Import it under a namespace alias of your choice:
import * as defmath from "defmath.defmath"
- Pick a release from subsoap/defmath releases and add its Source code (zip) URL (or a packaged
Functions
anglediff_rad(rad1: number, rad2: number): numberanglediff_deg(deg1: number, deg2: number): numberround(x: number): numberround_decimal(number: number, decimal: number): numberclamp(x: number, min: number, max: number): numbersign(x: number): numbersame_sign(a: number, b: number): booleanvect_to_quat(vect: Vector3 | Vector4): Quaternionvect_to_quat90(vect: Vector3 | Vector4): Quaternionrand11(): numberrand_range(min: number, max: number): numberlerp(start: number, stop: number, amount: number): numberdist2d(x1: number, y1: number, x2: number, y2: number): numberdist3d(x1: number, y1: number, z1: number, x2: number, y2: number, z2: number): numberangle_of_vector_between_two_points(x1: number, y1: number, x2: number, y2: number): numbersetup_rng()is_within_range(number: number, min: number, max: number): booleanradians_to_degrees(radian: number): numberdegrees_to_radians(degrees: number): numberwrap(number: number, bound: number): numberbound(number: number, min: number, max: number): numberbound_add(number: number, amount: number, min: number, max: number): numbersum(vararg: number[]): numberaverage(vararg: number[]): numberdifference(a: number, b: number): numberis_even(number: number): booleanis_odd(number: number): booleanwrap_angle(angle: number): numberangle_between_vectors(vector1: Vector3 | Vector4, vector2: Vector3 | Vector4): numberaverage_midpoint_of_vectors(vararg: Array<Vector3 | Vector4>): LuaMultiReturn<[ number, number ]>fraction_of(a: number, b: number): numberpercent_of(a: number, b: number): numbermin_max(min: number, max: number, value: number): numbermin_value(smallest: number, value: number): numbermax_value(largest: number, value: number): numberin_triangle(x0: number, y0: number, x1: number, y1: number, x2: number, y2: number, x3: number, y3: number): booleanbox_intersect(ax: number, ay: number, awidth: number, aheight: number, bx: number, by: number, bwidth: number, bheight: number): booleancheck_point_in_rect(rx: number, ry: number, rw: number, rh: number, rot: number, px: number, py: number): boolean
anglediff_rad(rad1: number, rad2: number): number
Angle-Diff (gets the smallest angle between two angles, using radians)
Parameters
rad1:numberrad2:number
Returns
number
anglediff_deg(deg1: number, deg2: number): number
Angle-Diff (gets the smallest angle between two angles, using degrees)
Parameters
deg1:numberdeg2:number
Returns
number
round(x: number): number
Round
Parameters
x:number
Returns
number
round_decimal(number: number, decimal: number): number
Round to decimal point
Parameters
number:numberdecimal:number
Returns
number
clamp(x: number, min: number, max: number): number
Clamp
Parameters
x:numbermin:numbermax:number
Returns
number
sign(x: number): number
Sign
Parameters
x:number
Returns
number
same_sign(a: number, b: number): boolean
Checks if two numbers have the same sign
Parameters
a:numberb:number
Returns
boolean
vect_to_quat(vect: Vector3 | Vector4): Quaternion
Vect to Quat
Parameters
vect:Vector3 | Vector4
Returns
Quaternion
vect_to_quat90(vect: Vector3 | Vector4): Quaternion
Vect to Quat + 90 degrees (perpendicular)
Parameters
vect:Vector3 | Vector4
Returns
Quaternion
rand11(): number
Random float from -1 to 1
Returns
number
rand_range(min: number, max: number): number
Random float in range
Parameters
min:numbermax:number
Returns
number
lerp(start: number, stop: number, amount: number): number
Linear interpolation
Parameters
start:numberstop:numberamount:number
Returns
number
dist2d(x1: number, y1: number, x2: number, y2: number): number
Distance between two 2d points
Parameters
x1:numbery1:numberx2:numbery2:number
Returns
number
dist3d(x1: number, y1: number, z1: number, x2: number, y2: number, z2: number): number
Distance between two 3d points
Parameters
x1:numbery1:numberz1:numberx2:numbery2:numberz2:number
Returns
number
angle_of_vector_between_two_points(x1: number, y1: number, x2: number, y2: number): number
Angle in radians of vector between two points
Parameters
x1:numbery1:numberx2:numbery2:number
Returns
number
setup_rng()
Clears bad RNG and sets seed to be based on OS time
is_within_range(number: number, min: number, max: number): boolean
Check if number is within range
Parameters
number:numbermin:numbermax:number
Returns
boolean
radians_to_degrees(radian: number): number
Convert radians to degrees
Parameters
radian:number
Returns
number
degrees_to_radians(degrees: number): number
Convert degrees to radians
Parameters
degrees:number
Returns
number
wrap(number: number, bound: number): number
Wrap a number to betwen 0 and a range bound
Parameters
number:numberbound:number
Returns
number
bound(number: number, min: number, max: number): number
Bound a number so that it is no larger than max and no smaller than min
Parameters
number:numbermin:numbermax:number
Returns
number
bound_add(number: number, amount: number, min: number, max: number): number
Adds an amount to a value within the value going over max or below min
Parameters
number:numberamount:numbermin:numbermax:number
Returns
number
sum(vararg: number[]): number
Sums a set of values
Parameters
vararg:number[]
Returns
number
average(vararg: number[]): number
Average of set of values
Parameters
vararg:number[]
Returns
number
difference(a: number, b: number): number
Get difference between two values
Parameters
a:numberb:number
Returns
number
is_even(number: number): boolean
if a number is even
Parameters
number:number
Returns
boolean
is_odd(number: number): boolean
if a number is odd
Parameters
number:number
Returns
boolean
wrap_angle(angle: number): number
Wrap an angle between -180 and +180
Parameters
angle:number
Returns
number
angle_between_vectors(vector1: Vector3 | Vector4, vector2: Vector3 | Vector4): number
Angle between vmath vectors in radians
Parameters
vector1:Vector3 | Vector4vector2:Vector3 | Vector4
Returns
number
average_midpoint_of_vectors(vararg: Array<Vector3 | Vector4>): LuaMultiReturn<[ number, number ]>
Average midpoint of a set of vmath vectors
Parameters
vararg:Array<Vector3 | Vector4>
Returns
LuaMultiReturn<[ number, number ]>
fraction_of(a: number, b: number): number
Fraction of
Parameters
a:numberb:number
Returns
number
percent_of(a: number, b: number): number
Percent of
Parameters
a:numberb:number
Returns
number
min_max(min: number, max: number, value: number): number
Used for MinMax Range
Parameters
min:numbermax:numbervalue:number
Returns
number
min_value(smallest: number, value: number): number
Parameters
smallest:numbervalue:number
Returns
number
max_value(largest: number, value: number): number
Parameters
largest:numbervalue:number
Returns
number
in_triangle(x0: number, y0: number, x1: number, y1: number, x2: number, y2: number, x3: number, y3: number): boolean
Used to find a point in a triangle x0, y0 are the points that are being checked against the rest to see if it's inside
Parameters
x0:numbery0:numberx1:numbery1:numberx2:numbery2:numberx3:numbery3:number
Returns
boolean
box_intersect(ax: number, ay: number, awidth: number, aheight: number, bx: number, by: number, bwidth: number, bheight: number): boolean
arr must be 6 in length: top x/y, bottom right x/y, bottom left x/y
Parameters
ax:numberay:numberawidth:numberaheight:numberbx:numberby:numberbwidth:numberbheight:number
Returns
boolean
check_point_in_rect(rx: number, ry: number, rw: number, rh: number, rot: number, px: number, py: number): boolean
see if a single point is within a rotated rectangle
Parameters
rx:numberry:numberrw:numberrh:numberrot:numberpx:numberpy:number
Returns
boolean