forked from explosivegaming/ExpCluster
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathevent.lua
More file actions
86 lines (71 loc) · 2.32 KB
/
event.lua
File metadata and controls
86 lines (71 loc) · 2.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
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(defines.events.on_singleplayer_init, handler)
Event.add(defines.events.on_multiplayer_init, 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