开始开发大厅烹饪功能
This commit is contained in:
53
Content/Lua/Utils/Emitter.lua
Normal file
53
Content/Lua/Utils/Emitter.lua
Normal file
@ -0,0 +1,53 @@
|
||||
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
|
||||
Reference in New Issue
Block a user