55 lines
1.4 KiB
Lua
55 lines
1.4 KiB
Lua
if not RUBATO_DIR then RUBATO_DIR = (...):match("(.-)[^%.]+$") end
|
|
|
|
local easing = require(RUBATO_DIR.."easing")
|
|
|
|
local function make_props_immutable(table)
|
|
setmetatable(table, {
|
|
__index = function(self, key)
|
|
if self._props[key] then return self._props[key]
|
|
else return rawget(self, key) end
|
|
end,
|
|
__newindex = function(self, key, value)
|
|
if self._props[key] then return
|
|
else self._props[key] = value end
|
|
end,
|
|
})
|
|
end
|
|
|
|
local function manager()
|
|
local obj = {_props = {}}
|
|
make_props_immutable(obj)
|
|
|
|
obj._props.timeds = {}
|
|
|
|
obj._props.timed = {_props = {}}
|
|
obj._props.timed._props.defaults = {
|
|
duration = 1,
|
|
pos = 0,
|
|
prop_intro = false,
|
|
intro = 0.2,
|
|
easing = easing.linear,
|
|
awestore_compat = false,
|
|
log = function() end,
|
|
override_simulate = false,
|
|
override_dt = false,
|
|
rate = 60,
|
|
}
|
|
make_props_immutable(obj.timed)
|
|
obj._props.timed._props.override = {_props = {
|
|
clear = function() for _, timed in pairs(obj.timeds) do timed:reset_values() end end,
|
|
forall = function(func) for _, timed in pairs(obj.timeds) do func(timed) end end,
|
|
}}
|
|
|
|
setmetatable(obj.timed.override, {
|
|
__index = function(self, key) return self._props[key] end,
|
|
__newindex = function(self, key, value)
|
|
for _, timed in pairs(obj.timeds) do timed[key] = value end
|
|
self._props[key] = value
|
|
end
|
|
})
|
|
|
|
return obj
|
|
end
|
|
|
|
if not RUBATO_MANAGER then RUBATO_MANAGER = manager() end
|
|
return RUBATO_MANAGER
|