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 |