diff options
Diffstat (limited to 'player/lua/defaults.lua')
-rw-r--r-- | player/lua/defaults.lua | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/player/lua/defaults.lua b/player/lua/defaults.lua index 72920cea67..95f8952f5d 100644 --- a/player/lua/defaults.lua +++ b/player/lua/defaults.lua @@ -547,12 +547,35 @@ end local hook_table = {} +local hook_mt = {} +hook_mt.__index = hook_mt + +function hook_mt.cont(t) + if t._id == nil then + mp.msg.error("hook already continued") + else + mp.raw_hook_continue(t._id) + t._id = nil + end +end + +function hook_mt.defer(t) + t._defer = true +end + mp.register_event("hook", function(ev) local fn = hook_table[tonumber(ev.id)] + local hookobj = { + _id = ev.hook_id, + _defer = false, + } + setmetatable(hookobj, hook_mt) if fn then - fn() + fn(hookobj) + end + if (not hookobj._defer) and hookobj._id ~= nil then + hookobj:cont() end - mp.raw_hook_continue(ev.hook_id) end) function mp.add_hook(name, pri, cb) |