sk_server/luafight/Modules/Battle/Logic/FightUnitManager.lua

207 lines
5.5 KiB
Lua
Raw Normal View History

2024-07-11 16:35:09 +08:00
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