helium/core/events.lua
Elmārs Āboliņš 1c0be1810b minor cleanup
2021-06-22 15:09:31 +03:00

44 lines
1015 B
Lua

--[[--------------------------------------------------
Helium UI by qfx (qfluxstudios@gmail.com)
Copyright (c) 2021 Elmārs Āboliņš
https://github.com/qeffects/helium
----------------------------------------------------]]
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