uranium-core/stdlib/easable.lua

42 lines
888 B
Lua
Raw Permalink Normal View History

---@class easable
2023-05-04 20:57:54 +02:00
---@field eased number | any
---@field target number | any
---@field speed number
local easable = {}
2023-05-04 20:57:54 +02:00
--- move towards a new target
function easable:set(n)
self.target = n
end
2023-05-04 20:57:54 +02:00
--- move towards a new target additively
function easable:add(n)
self.target = self.target + n
end
2023-05-04 20:57:54 +02:00
--- set both the eased value and the target
function easable:reset(n)
self.target = n
self.eased = n
end
2023-05-04 20:57:54 +02:00
---@param dt number
function easable:update(dt)
self.eased = math.pow(self.speed, -dt) * (self.eased - self.target) + self.target
end
2023-05-04 20:57:54 +02:00
function easable:__tostring()
return 'easable (' .. self.eased .. ' towards ' .. self.target .. ')'
end
2023-05-04 20:57:54 +02:00
easable.__index = easable
easable.__name = 'easable'
---@return easable
2023-05-04 20:57:54 +02:00
return function(default, speed)
return setmetatable({
eased = default,
target = default,
speed = speed and math.pow(2, speed) or 2
}, easable)
end