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
    1. Pick a release from subsoap/defmath releases and add its Source code (zip) URL (or a packaged .zip asset, if the library ships one) to game.project under [project] dependencies, then Fetch Libraries in the Defold editor.
    2. Run bunx @defold-typescript/cli resolve to materialize its types.
    3. Import it under a namespace alias of your choice:
      import * as defmath from "defmath.defmath"

Functions

anglediff_rad(rad1: number, rad2: number): number

Angle-Diff (gets the smallest angle between two angles, using radians)

Parameters

  • rad1: number
  • rad2: number

Returns

  • number

anglediff_deg(deg1: number, deg2: number): number

Angle-Diff (gets the smallest angle between two angles, using degrees)

Parameters

  • deg1: number
  • deg2: 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: number
  • decimal: number

Returns

  • number

clamp(x: number, min: number, max: number): number

Clamp

Parameters

  • x: number
  • min: number
  • max: 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: number
  • b: 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: number
  • max: number

Returns

  • number

lerp(start: number, stop: number, amount: number): number

Linear interpolation

Parameters

  • start: number
  • stop: number
  • amount: number

Returns

  • number

dist2d(x1: number, y1: number, x2: number, y2: number): number

Distance between two 2d points

Parameters

  • x1: number
  • y1: number
  • x2: number
  • y2: number

Returns

  • number

dist3d(x1: number, y1: number, z1: number, x2: number, y2: number, z2: number): number

Distance between two 3d points

Parameters

  • x1: number
  • y1: number
  • z1: number
  • x2: number
  • y2: number
  • z2: 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: number
  • y1: number
  • x2: number
  • y2: 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: number
  • min: number
  • max: 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: number
  • bound: 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: number
  • min: number
  • max: 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: number
  • amount: number
  • min: number
  • max: 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: number
  • b: 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 | Vector4
  • vector2: 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: number
  • b: number

Returns

  • number

percent_of(a: number, b: number): number

Percent of

Parameters

  • a: number
  • b: number

Returns

  • number

min_max(min: number, max: number, value: number): number

Used for MinMax Range

Parameters

  • min: number
  • max: number
  • value: number

Returns

  • number

min_value(smallest: number, value: number): number

Parameters

  • smallest: number
  • value: number

Returns

  • number

max_value(largest: number, value: number): number

Parameters

  • largest: number
  • value: 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: number
  • y0: number
  • x1: number
  • y1: number
  • x2: number
  • y2: number
  • x3: number
  • y3: 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: number
  • ay: number
  • awidth: number
  • aheight: number
  • bx: number
  • by: number
  • bwidth: number
  • bheight: 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: number
  • ry: number
  • rw: number
  • rh: number
  • rot: number
  • px: number
  • py: number

Returns

  • boolean