Files
factorio-scenario-ExpCluster/exp_legacy/module/utils/event.lua
2024-11-19 22:09:54 +00:00

88 lines
2.3 KiB
Lua

local Clustorio = require("modules/clusterio/api")
local ExpUtil = require("modules/exp_util")
local Event = {
real_handlers = {
events = {},
on_nth_tick = {},
on_init = nil,
on_load = nil,
},
handlers = {
events = {},
on_nth_tick = {},
on_init = nil,
on_load = nil,
}
}
local function call_handlers_factory(handlers)
return function(event)
for _, handler in ipairs(handlers) do
handler(event)
end
end
end
function Event.add(event_name, handler)
ExpUtil.assert_not_runtime()
ExpUtil.assert_argument_type(event_name, "number", 1, "event_name")
ExpUtil.assert_argument_type(handler, "function", 2, "handler")
local handlers = Event.handlers.events[event_name]
if not handlers then
handlers = {}
Event.handlers.events[event_name] = handlers
Event.real_handlers.events[event_name] = call_handlers_factory(handlers)
end
handlers[#handlers+1] = handler
end
function Event.on_nth_tick(tick, handler)
ExpUtil.assert_not_runtime()
ExpUtil.assert_argument_type(tick, "number", 1, "tick")
ExpUtil.assert_argument_type(handler, "function", 2, "handler")
local handlers = Event.handlers.on_nth_tick[tick]
if not handlers then
handlers = {}
Event.handlers.on_nth_tick[tick] = handlers
Event.real_handlers.on_nth_tick[tick] = call_handlers_factory(handlers)
end
handlers[#handlers+1] = handler
end
function Event.on_init(handler)
ExpUtil.assert_not_runtime()
ExpUtil.assert_argument_type(handler, "function", 1, "handler")
local handlers = Event.handlers.on_init
if not handlers then
handlers = {}
Event.handlers.on_init = handlers
Event.real_handlers.on_init = call_handlers_factory(handlers)
end
handlers[#handlers+1] = handler
Event.add(Clustorio.events.on_server_startup, handler)
end
function Event.on_load(handler)
ExpUtil.assert_not_runtime()
ExpUtil.assert_argument_type(handler, "function", 1, "handler")
local handlers = Event.handlers.on_load
if not handlers then
handlers = {}
Event.handlers.on_load = handlers
Event.real_handlers.on_load = call_handlers_factory(handlers)
end
handlers[#handlers+1] = handler
end
return Event