]> git.lizzy.rs Git - dragonblocks3d-lua.git/blob - src/events.lua
Refactoring
[dragonblocks3d-lua.git] / src / events.lua
1 local events = {}
2
3 function events:fire_event(event, callback)
4         event = event or {}
5         event.origin = self
6         local listeners = self._event_listeners[eventtype]
7         if listeners and #listeners > 0 then
8                 for _, listener in ipairs(listeners) do
9                         listener(event)
10                 end
11         end
12         if callback then
13                 callback(event)
14         end
15 end
16
17 function events:add_event_listener(eventtype, eventlistener)
18         self._event_listeners[eventtype] = self._event_listeners[eventtype] or {}
19         table.insert(self._event_listeners[eventtype], eventlistener)
20 end
21         
22 function events:remove_event_listener(eventtype, eventlistener)
23         local listeners = self._event_listeners[eventtype]
24         if listeners then
25                 for k, listener in ipairs(listeners) do
26                         if listener == eventlistener then
27                                 table.remove(k)
28                                 return self:removeEventListener(eventtype, eventlistener)
29                         end
30                 end
31         end
32 end
33
34 function events:clear_event_listeners()
35         self._event_listeners = {}
36 end
37
38 function Dragonblocks:create_event_interface()
39         self = self or {}
40         table.assign(self, events)
41         self:clear_event_listeners()
42         return self
43 end