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 |