A framework for the Godot engine to create TTRPG games for Advanced 5th Edition, Pathfinder 2nd Edition, and more
at 29c82c54996d9231785a7fa967906261e2451b6d 43 lines 841 B view raw
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