Files
BusyRabbit/Content/Lua/Utils/Emitter.lua
2025-08-01 00:33:26 +08:00

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