mirror of
https://github.com/CommunityOx/ox_lib.git
synced 2026-08-18 15:36:02 +01:00
feat(math): expose interpolate function as math.interp
This commit is contained in:
@@ -129,20 +129,27 @@ end
|
|||||||
---@param lower number
|
---@param lower number
|
||||||
---@param upper number
|
---@param upper number
|
||||||
---@return number
|
---@return number
|
||||||
function math.clamp(val, lower, upper) -- credit https://love2d.org/forums/viewtopic.php?t=1856
|
function math.clamp(val, lower, upper) -- credit https://love2d.org/forums/viewtopic.php?t=1856
|
||||||
if lower > upper then lower, upper = upper, lower end -- swap if boundaries supplied the wrong way
|
if lower > upper then lower, upper = upper, lower end -- swap if boundaries supplied the wrong way
|
||||||
return math.max(lower, math.min(upper, val))
|
return math.max(lower, math.min(upper, val))
|
||||||
end
|
end
|
||||||
|
|
||||||
local function interpolate(s, f, t)
|
---Calculates an intermediate value between `start` and `finish` based on the interpolation `factor`.
|
||||||
return s + (f - s) * t
|
---@generic T : number | vector2 | vector3 | vector4
|
||||||
|
---@param start T
|
||||||
|
---@param finish T
|
||||||
|
---@param factor integer The interpolation factor between 0 and 1.
|
||||||
|
---@return unknown
|
||||||
|
function math.interp(start, finish, factor)
|
||||||
|
return start + (finish - start) * factor
|
||||||
end
|
end
|
||||||
|
|
||||||
local function interpolateTable(s, f, t)
|
local function interpolateTable(start, finish, factor)
|
||||||
|
local interp = math.interp
|
||||||
local result = {}
|
local result = {}
|
||||||
|
|
||||||
for k, v in pairs(s) do
|
for k, v in pairs(start) do
|
||||||
result[k] = v + (f[k] - v) * t
|
result[k] = interp(v, finish[k], factor)
|
||||||
end
|
end
|
||||||
|
|
||||||
return result
|
return result
|
||||||
@@ -165,7 +172,7 @@ function math.lerp(start, finish, duration)
|
|||||||
|
|
||||||
assert(typeFinish == typeStart, ("expected argument 2 to have type '%s' (received %s)"):format(typeStart, typeFinish))
|
assert(typeFinish == typeStart, ("expected argument 2 to have type '%s' (received %s)"):format(typeStart, typeFinish))
|
||||||
|
|
||||||
local interpFn = typeStart == 'table' and interpolateTable or interpolate
|
local interpFn = typeStart == 'table' and interpolateTable or math.interp
|
||||||
local step
|
local step
|
||||||
|
|
||||||
return function()
|
return function()
|
||||||
|
|||||||
Reference in New Issue
Block a user