diff options
Diffstat (limited to 'acf2/persistence/init.lua')
-rw-r--r-- | acf2/persistence/init.lua | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/acf2/persistence/init.lua b/acf2/persistence/init.lua index 1cdea75..74ca447 100644 --- a/acf2/persistence/init.lua +++ b/acf2/persistence/init.lua @@ -27,11 +27,11 @@ function DataStore:init() function(m) return m() end, loadmods('persistence/backends') ) - self.triggers = {} + self.triggers = {pre={}, post={}} end -function DataStore:trigger(path, func) - local funcs = setdefault(self.triggers, path, {}) +function DataStore:trigger(phase, path, func) + local funcs = setdefault(self.triggers[phase], path, {}) if not contains(funcs, func) then table.insert(funcs, func) end end @@ -98,11 +98,15 @@ function DataStore:_set_multiple(mods) table.insert(setdefault(bms, backend, {}), {comps, value}) end - for backend, bm in pairs(bms) do backend:set(bm) end - - for path, _ in pairs(trigger) do - for _, func in ipairs(self.triggers[path] or {}) do func() end + local function exec_triggers(phase) + for path, _ in pairs(trigger) do + for _, func in ipairs(self.triggers[phase][path] or {}) do func() end + end end + + exec_triggers('pre') + for backend, bm in pairs(bms) do backend:set(bm) end + exec_triggers('post') end |