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

69 lines
1.7 KiB
Lua
Raw Normal View History

2019-03-12 14:05:45 +08:00
BattleEvent={}
BattleEvent.__index = BattleEvent
2019-03-21 14:33:56 +08:00
local listPool = BattleObjectPool.New(function ()
return BattleList.New()
end)
local itemPool = BattleObjectPool.New(function ()
return { func = 0, obj = 0, once = false }
end)
2019-03-12 14:05:45 +08:00
function BattleEvent.New()
local instance = {}
setmetatable(instance, BattleEvent)
instance.m_listeners = {}
return instance
end
function BattleEvent:AddEvent(sEventName, fListener, pObj, bOnce)
2019-03-21 14:33:56 +08:00
if not self.m_listeners[sEventName] then
self.m_listeners[sEventName] = listPool:Get()
2019-03-12 14:05:45 +08:00
end
2019-03-21 14:33:56 +08:00
local item = itemPool:Get()
item.func = fListener
item.obj = pObj
item.once = bOnce
self.m_listeners[sEventName]:Add(item)
2019-03-12 14:05:45 +08:00
end
2019-03-21 14:33:56 +08:00
2019-07-25 16:20:33 +08:00
function BattleEvent:RemoveEvent(sEventName, fListener, pObj)
2019-03-21 14:33:56 +08:00
if not self.m_listeners[sEventName] then
2019-03-12 14:05:45 +08:00
return
end
local v
2019-03-21 14:33:56 +08:00
for i=1, self.m_listeners[sEventName].size do
v = self.m_listeners[sEventName].buffer[i]
2019-07-25 16:20:33 +08:00
if v.func == fListener and pObj == v.obj then
2019-03-21 14:33:56 +08:00
itemPool:Put(v)
self.m_listeners[sEventName]:Remove(i)
2019-03-12 14:05:45 +08:00
break
end
end
end
2019-03-21 14:33:56 +08:00
function BattleEvent:DispatchEvent(sEventName, ...)
if not self.m_listeners[sEventName] then
2019-03-12 14:05:45 +08:00
return
end
local v
2019-03-21 14:33:56 +08:00
for i=1, self.m_listeners[sEventName].size do
v = self.m_listeners[sEventName].buffer[i]
if not v.obj then
2019-03-12 14:05:45 +08:00
v.func(...)
else
v.func(v.obj, ...)
end
if v.once then
self:RemoveEvent(sEventName, v)
end
end
end
function BattleEvent:ClearEvent()
2019-03-21 14:33:56 +08:00
for k, v in pairs(self.m_listeners) do
for i=1, v.size do
itemPool:Put(v.buffer[i])
end
v:Clear()
listPool:Put(v)
self.m_listeners[k]=nil
end
2019-03-12 14:05:45 +08:00
end