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