miduo_server/luafight/Modules/Battle/Logic/Base/BattleEvent.lua

51 lines
1.3 KiB
Lua

BattleEvent={}
BattleEvent.__index = BattleEvent
function BattleEvent.New()
local instance = {}
setmetatable(instance, BattleEvent)
instance.m_listeners = {}
return instance
end
function BattleEvent:AddEvent(sEventName, fListener, pObj, bOnce)
if self.m_listeners[sEventName] == nil then
self.m_listeners[sEventName] = {}
end
table.insert(self.m_listeners[sEventName],{ func = fListener, obj = pObj, once = bOnce } )
end
function BattleEvent:RemoveEvent(sEventName, fListener)
if self.m_listeners[sEventName] == nil then
return
end
local v
for i=1, #self.m_listeners[sEventName] do
v = self.m_listeners[sEventName][i]
if v.func == fListener then
table.remove(self.m_listeners[sEventName], i)
break
end
end
end
function BattleEvent:DispatchEvent(sEventName,...)
if self.m_listeners[sEventName] == nil then
return
end
local v
for i=1, #self.m_listeners[sEventName] do
v = self.m_listeners[sEventName][i]
if nil == v.obj then
v.func(...)
else
v.func(v.obj, ...)
end
if v.once then
self:RemoveEvent(sEventName, v)
end
end
end
function BattleEvent:ClearEvent()
self.m_listeners={}
end