53 lines
1.3 KiB
Lua
53 lines
1.3 KiB
Lua
|
|
local Emitter = {
|
||
|
|
EventHandlers = {}
|
||
|
|
}
|
||
|
|
|
||
|
|
-- 注册事件监听
|
||
|
|
function Emitter.OnEvent(eventName, handler)
|
||
|
|
if not eventName or type(handler) ~= "function" then
|
||
|
|
print("[EventSystem] Invalid event registration")
|
||
|
|
return
|
||
|
|
end
|
||
|
|
|
||
|
|
if not Emitter.EventHandlers[eventName] then
|
||
|
|
Emitter.EventHandlers[eventName] = {}
|
||
|
|
end
|
||
|
|
|
||
|
|
table.insert(Emitter.EventHandlers[eventName], handler)
|
||
|
|
return handler -- 返回handler用于注销
|
||
|
|
end
|
||
|
|
|
||
|
|
-- 触发事件
|
||
|
|
function Emitter.EmitEvent(eventName, ...)
|
||
|
|
local handlers = Emitter.EventHandlers[eventName]
|
||
|
|
if not handlers then return end
|
||
|
|
|
||
|
|
print("[EventSystem] Emitting event: " .. eventName)
|
||
|
|
for i = #handlers, 1, -1 do -- 倒序遍历允许在回调中移除事件
|
||
|
|
local success, err = pcall(handlers[i], ...)
|
||
|
|
if not success then
|
||
|
|
print("[EventSystem] Error in handler: " .. tostring(err))
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
-- 注销事件
|
||
|
|
function Emitter.OffEvent(eventName, handler)
|
||
|
|
local handlers = Emitter.EventHandlers[eventName]
|
||
|
|
if not handlers then return end
|
||
|
|
|
||
|
|
for i = #handlers, 1, -1 do
|
||
|
|
if handlers[i] == handler then
|
||
|
|
table.remove(handlers, i)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
if #handlers == 0 then
|
||
|
|
Emitter.EventHandlers[eventName] = nil
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
return Emitter
|