A framework for the Godot engine to create TTRPG games for Advanced 5th Edition, Pathfinder 2nd Edition, and more
1hooks = class(function(self)
2 self.events = {}
3end)
4
5function hooks:on(event, callback)
6 if not self.events[event] then
7 self.events[event] = {}
8 end
9
10 table.insert(self.events[event], callback)
11end
12
13function hooks:once(event, callback)
14 local wrapper
15 wrapper = function(...)
16 callback(...)
17 self:off(event, wrapper)
18 end
19
20 self:on(event, wrapper)
21end
22
23function hooks:off(event, callback)
24 local list = self.events[event]
25 if not list then return end
26 for i, cb in ipairs(list) do
27 if cb == callback then
28 table.remove(list, i)
29 return
30 end
31 end
32end
33
34function hooks:emit(event, ...)
35 local list = self.events[event]
36 if not list then return end
37 for _, cb in ipairs(list) do
38 cb(...)
39 end
40end
41
42local Hooks = hooks()
43return Hooks