generated from root/miduo_server
207 lines
5.5 KiB
Lua
207 lines
5.5 KiB
Lua
FightUnitManager = {}
|
|
local this = FightUnitManager
|
|
|
|
local removeObjList = BattleList.New()
|
|
|
|
|
|
local unitArray = {[FightUnitType.UnitSupport] = {},
|
|
[FightUnitType.UnitAircraftCarrier] = {},
|
|
[FightUnitType.UnitAdjutant] = {}}
|
|
|
|
local unitPool = BattleObjectPool.New(function ()
|
|
return FightUnitLogic.New()
|
|
end)
|
|
|
|
|
|
function this.Init()
|
|
this.Clear()
|
|
end
|
|
|
|
function FightUnitManager.AddUnit(unitData)
|
|
local unit = unitPool:Get()
|
|
unit:Init(unitData)
|
|
|
|
|
|
unitArray[tonumber(unitData.type)][tonumber(unitData.camp)] = unit
|
|
|
|
BattleLogic.Event:DispatchEvent(BattleEventName.AddUnit, unit)
|
|
end
|
|
|
|
function FightUnitManager.GetUnit(type, camp)
|
|
|
|
|
|
return unitArray[type][camp]
|
|
end
|
|
|
|
local _RoundBeginFrame = 2
|
|
local _RoundEndFrame = 2
|
|
local _RoundBeginCallBack = nil
|
|
local _RoundEndCallBack = nil
|
|
function FightUnitManager.UpdateRoundBegin()
|
|
if _RoundBeginFrame == 2 then
|
|
return
|
|
end
|
|
_RoundBeginFrame = _RoundBeginFrame + 1
|
|
if _RoundBeginFrame == 2 then
|
|
FightUnitManager.ProcessRoundBegin()
|
|
end
|
|
end
|
|
|
|
function FightUnitManager.UpdateRoundEnd()
|
|
if _RoundEndFrame == 2 then
|
|
return
|
|
end
|
|
_RoundEndFrame = _RoundEndFrame + 1
|
|
if _RoundEndFrame == 2 then
|
|
FightUnitManager.ProcessRoundEnd()
|
|
end
|
|
end
|
|
|
|
function FightUnitManager.ProcessRoundBeginNextFrame(func)
|
|
_RoundBeginFrame = 0
|
|
_RoundBeginCallBack = func
|
|
end
|
|
|
|
function FightUnitManager.ProcessRoundEndNextFrame(func)
|
|
_RoundEndFrame = 0
|
|
_RoundEndCallBack = func
|
|
end
|
|
|
|
function FightUnitManager.ProcessRoundBegin()
|
|
--> 支援 等
|
|
local processQueue = nil
|
|
if RoleManager.GetFastCamp() == 0 then --< 最快我方
|
|
processQueue = {{FightUnitType.UnitAircraftCarrier, 0}, {FightUnitType.UnitSupport, 0}, {FightUnitType.UnitAircraftCarrier, 1}, {FightUnitType.UnitSupport, 1}}
|
|
else
|
|
processQueue = {{FightUnitType.UnitAircraftCarrier, 1}, {FightUnitType.UnitSupport, 1}, {FightUnitType.UnitAircraftCarrier, 0}, {FightUnitType.UnitSupport, 0}}
|
|
end
|
|
if processQueue == nil then
|
|
LogError("### processQueue nil")
|
|
end
|
|
|
|
local index = 1
|
|
local next = nil
|
|
local processFunc = nil
|
|
next = function()
|
|
if index == #processQueue then
|
|
if _RoundBeginCallBack then
|
|
_RoundBeginCallBack()
|
|
else
|
|
LogError("### ProcessRoundBegin callback error")
|
|
end
|
|
-- func()
|
|
else
|
|
index = index + 1
|
|
processFunc()
|
|
end
|
|
end
|
|
|
|
processFunc = function()
|
|
local unit = FightUnitManager.GetUnit(processQueue[index][1], processQueue[index][2])
|
|
if not unit then
|
|
next()
|
|
return
|
|
end
|
|
-- local release = unit.skill[8].release
|
|
-- local cd = unit.skill[8].cd
|
|
|
|
-- local CurRound, MaxRound = BattleLogic.GetCurRound()
|
|
-- if CurRound == release or (CurRound - release) % (cd + 1) == 0 then
|
|
-- if unit then
|
|
local haveSkill = unit:CastSkill(function()
|
|
next()
|
|
end)
|
|
if not haveSkill then
|
|
next()
|
|
end
|
|
-- else
|
|
-- next()
|
|
-- end
|
|
-- else
|
|
-- next()
|
|
-- end
|
|
end
|
|
processFunc()
|
|
end
|
|
|
|
function FightUnitManager.ProcessRoundEnd()
|
|
--> 支援 等
|
|
local processQueue = nil
|
|
if RoleManager.GetFastCamp() == 0 then --< 最快我方
|
|
processQueue = {{FightUnitType.UnitAdjutant, 0}, {FightUnitType.UnitAdjutant, 1}}
|
|
else
|
|
processQueue = {{FightUnitType.UnitAdjutant, 1}, {FightUnitType.UnitAdjutant, 0}}
|
|
end
|
|
if processQueue == nil then
|
|
LogError("### processQueue nil")
|
|
end
|
|
|
|
local index = 1
|
|
local next = nil
|
|
local processFunc = nil
|
|
next = function()
|
|
if index == #processQueue then
|
|
if _RoundEndCallBack then
|
|
_RoundEndCallBack()
|
|
else
|
|
LogError("### ProcessRoundBegin callback error")
|
|
end
|
|
-- func()
|
|
else
|
|
index = index + 1
|
|
processFunc()
|
|
end
|
|
end
|
|
|
|
processFunc = function()
|
|
local unit = FightUnitManager.GetUnit(processQueue[index][1], processQueue[index][2])
|
|
if not unit then
|
|
next()
|
|
return
|
|
end
|
|
-- local release = unit.skill[8].release
|
|
-- local cd = unit.skill[8].cd
|
|
|
|
-- local CurRound, MaxRound = BattleLogic.GetCurRound()
|
|
-- if CurRound == release or (CurRound - release) % (cd + 1) == 0 then
|
|
-- if unit then
|
|
local haveSkill = unit:CastSkill(function()
|
|
next()
|
|
end)
|
|
if not haveSkill then
|
|
next()
|
|
end
|
|
-- else
|
|
-- next()
|
|
-- end
|
|
-- else
|
|
-- next()
|
|
-- end
|
|
end
|
|
processFunc()
|
|
end
|
|
|
|
function this.Clear()
|
|
_RoundBeginFrame = 2
|
|
_RoundEndFrame = 2
|
|
_RoundBeginCallBack = nil
|
|
_RoundEndCallBack = nil
|
|
for _, unitsByType in pairs(unitArray) do
|
|
for _, unit in pairs(unitsByType) do
|
|
unit:Dispose()
|
|
removeObjList:Add(unit)
|
|
end
|
|
end
|
|
unitArray = {[FightUnitType.UnitSupport] = {},
|
|
[FightUnitType.UnitAircraftCarrier] = {},
|
|
[FightUnitType.UnitAdjutant] = {}}
|
|
|
|
|
|
while removeObjList.size > 0 do
|
|
unitPool:Put(removeObjList.buffer[removeObjList.size])
|
|
removeObjList:Remove(removeObjList.size)
|
|
end
|
|
|
|
end
|
|
|
|
return this |