helium/core/events.lua
Elmārs Āboliņš a200960ad1 big chungus commit
2020-09-28 00:16:50 +03:00

39 lines
787 B
Lua

local eventClass = {}
eventClass.__index = eventClass
function eventClass.new()
local self = {
eventSubs = {}
}
return setmetatable(self, eventClass)
end
function eventClass:newQueue(name)
self.eventSubs[name] = {}
end
--Data is the individualized table to pass to each subscriber (or middleware)
function eventClass:sub(name, func, data)
self.eventSubs[name][func] = {func = func, data = data}
return func
end
function eventClass:unsub(name, func)
self.eventSubs[name][func] = nil
end
function eventClass:push(name, evntData)
local pushData = evntData
for i, e in pairs(self.eventSubs[name]) do
if self.eventSubs[name].beforeEach then
pushData = self.eventSubs[name].beforeEach(e.data, evntData) or evntData
end
e.func(pushData)
end
end
return eventClass