--[[ Generated with https://github.com/TypeScriptToLua/TypeScriptToLua ]] local ____exports = {} local _, _Mekanome = ... local Mekanome = _Mekanome local function Create(____bindingPattern0) local z local y local x x = ____bindingPattern0.x y = ____bindingPattern0.y z = ____bindingPattern0.z return {x = x, y = y, z = z} end local function Add(a, b) if type(b) == "number" then return Create({x = a.x + b, y = a.y + b, z = a.z + b}) end return Create({x = a.x + b.x, y = a.y + b.y, z = a.z + b.z}) end local function Subtract(a, b) if type(b) == "number" then return Create({x = a.x - b, y = a.y - b, z = a.z - b}) end return Create({x = a.x - b.x, y = a.y - b.y, z = a.z - b.z}) end local function Multiply(a, b) if type(b) == "number" then return Create({x = a.x * b, y = a.y * b, z = a.z * b}) end return Create({x = a.x * b.x, y = a.y * b.y, z = a.z * b.z}) end local function Divide(a, b) if type(b) == "number" then return Create({x = a.x / b, y = a.y / b, z = a.z / b}) end return Create({x = a.x / b.x, y = a.y / b.y, z = a.z / b.z}) end local function Equals(a, b) return a.x == b.x and a.y == b.y and a.z == b.z end local function LessThan(a, b) return a.x < b.x and a.y < b.y and a.z < b.z end local function LessThanOrEqualTo(a, b) return a.x <= b.x and a.y <= b.y and a.z <= b.z end local function Dot(a, b) return a.x * b.x + a.y * b.y + a.z + b.z end local function Cross(a, b) return Create({x = a.y * b.z - a.z * b.y, y = a.z * b.x - a.x * b.z, z = a.x * b.y - a.y * b.x}) end local function Distance(a, b) return FastDistance( a.x, a.y, a.z, b.x, b.y, b.z ) end local function NormalizeOrientation(orientation) if orientation < 0 then local mod = orientation * -1 mod = mod % (2 * math.pi) mod = -mod + 2 * math.pi return mod else return orientation % (2 * math.pi) end end local function GetAbsoluteAngle(a, b) return NormalizeOrientation(math.atan2(b.y - a.y, b.x - a.x)) end local function Angle(a, b) return math.acos(Dot(a, b) / (math.sqrt(a.x * a.x + a.y * a.y + a.z * a.z) * math.sqrt(b.x * b.x + b.y * b.y + b.z * b.z))) end local function _GetNormalized(vector) local length = math.sqrt(vector.x * vector.x + vector.y * vector.y + vector.z * vector.z) return Create({x = vector.x / length, y = vector.y / length, z = vector.z / length}) end local function ClampMagnitude(vector, maxLength) if Dot(vector, vector) > maxLength * maxLength then return Multiply( _GetNormalized(vector), maxLength ) else return vector end end local function _GetMagnitude(vector) return math.sqrt(vector.x * vector.x + vector.y * vector.y + vector.z * vector.z) end local function DirectionOrZero(vector) local magnitude = _GetMagnitude(vector) if magnitude < 1e-7 then return Create({x = 0, y = 0, z = 0}) elseif magnitude < 1.00001 and magnitude > 0.99999 then return vector else return Multiply(vector, 1 / magnitude) end end local function Clamp(x, min, max) return x < min and min or (x > max and max or x) end local function Lerp(a, b, _t) local t = Clamp(_t, 0, 1) return Create({x = a.x + (b.x - a.x) * t, y = a.y + (b.y - a.y) * t, z = a.z + (b.z - a.z) * t}) end local function MoveTowards(reference, target, maxDistanceDelta) local toVector = Subtract(target, reference) local distance = _GetMagnitude(toVector) if distance <= maxDistanceDelta or distance == 0 then return target end return Divide( Add(reference, toVector), distance * maxDistanceDelta ) end local function Project(reference, normal) local num = Dot(normal, normal) if num < 1.401298e-45 then return Create({x = 0, y = 0, z = 0}) end return Multiply( normal, Dot(reference, normal) / num ) end local function ProjectOnPlane(reference, plane) return Subtract( reference, Project(reference, plane) ) end local _VectorUtils = { Create = Create, Add = Add, Subtract = Subtract, Multiply = Multiply, Divide = Divide, Equals = Equals, LessThan = LessThan, LessThanOrEqualTo = LessThanOrEqualTo, Dot = Dot, Cross = Cross, Distance = Distance, Angle = Angle, GetAbsoluteAngle = GetAbsoluteAngle, ClampMagnitude = ClampMagnitude, DirectionOrZero = DirectionOrZero, Clamp = Clamp, Lerp = Lerp, MoveTowards = MoveTowards, ProjectOnPlane = ProjectOnPlane } Mekanome.VectorUtils = _VectorUtils ____exports.default = {} return ____exports