| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- GameEvent = {}
- local _listeners = {}
- function GameEvent.add(eventName, func, tag, priority)
- if not eventName then
- return
- end
-
- _listeners[eventName] = _listeners[eventName] or {}
- local eventListeners = _listeners[eventName]
-
- for _, v in ipairs(eventListeners) do
- if v[2] == tag then
- return
- end
- end
- if priority and #eventListeners >= priority then
- table.insert(eventListeners, priority, {func, tag})
- else
- table.insert(eventListeners, {func, tag})
- end
- end
- function GameEvent.remove(func)
- for eventName, eventListeners in pairs(_listeners) do
- for i = 1, #eventListeners do
- if eventListeners[i][1] == func then
- table.remove(eventListeners, i)
- if 0 == #_listeners[eventName] then
- _listeners[eventName] = nil
- end
- return
- end
- end
- end
- end
- function GameEvent.removeByNameAndTag(eventName, tag)
- assert(tag, "Tag must not be nil")
- local eventListeners = _listeners[eventName]
- if not eventListeners then return end
- for i = #eventListeners, 1, -1 do
- if eventListeners[i][2] == tag then
- table.remove(eventListeners, i)
- break
- end
- end
- if 0 == #eventListeners then
- _listeners[eventName] = nil
- end
- end
- function GameEvent.removeByTag(tag)
- assert(tag, "Tag must not be nil")
- for eventName, eventListeners in pairs(_listeners) do
- self.removeListenerByNameAndTag(eventName, tag)
- end
- end
- function GameEvent.removeAll()
- _listeners = {}
- end
- function GameEvent.push(eventName,...)
- local eventListeners = _listeners[eventName]
- if not eventListeners then
- return
- end
- for _, listener in ipairs(eventListeners) do
- local ok, stop = pcall(listener[1],...)
- if ok then
- if stop then
- -- release_print(eventName,"???")
- break
- end
- else
- local tag = listener[2]
- local tarid = type(tag) == "string" and tag or (tag and tag.ID or 0)
- local err = string.format("名称%s id=%s %s" , eventName, tarid,debug.traceback())
- error(err,stop)
- end
- end
- end
- return GameEvent
|