177 lines
6.1 KiB
Lua
177 lines
6.1 KiB
Lua
local BattleControllerPVP = require "app/module/battle/controller/battle_controller_pvp"
|
|
local BattleControllerArena = class("BattleControllerArena", BattleControllerPVP)
|
|
local BattleBuffEntity = require "app/userdata/battle/skill/battle_buff_entity"
|
|
|
|
function BattleControllerArena:getBoardConfig()
|
|
return ConfigManager:getConfig("arena_board")
|
|
end
|
|
|
|
function BattleControllerArena:getChapterConfig()
|
|
return ConfigManager:getConfig("arena_rank")
|
|
end
|
|
|
|
function BattleControllerArena:getChapterId()
|
|
return DataManager.ArenaData:getGradingId()
|
|
end
|
|
|
|
function BattleControllerArena:getBuffs()
|
|
if not self.initBuffs then
|
|
self.initBuffs = {}
|
|
local buffList = {}
|
|
local config = self:getChapterConfig()[self.chapterId]
|
|
if config and config.effect then
|
|
for _, effect in ipairs(config.effect) do
|
|
local atkBuffInfo = {
|
|
buff = GFunc.getTable(effect),
|
|
obj = GConst.BattleConst.SIDE_ATK
|
|
}
|
|
local defBuffInfo = {
|
|
buff = GFunc.getTable(effect),
|
|
obj = GConst.BattleConst.SIDE_DEF
|
|
}
|
|
table.insert(buffList, atkBuffInfo)
|
|
table.insert(buffList, defBuffInfo)
|
|
end
|
|
end
|
|
for _, info in ipairs(buffList) do
|
|
local buffEntity = BattleBuffEntity:create()
|
|
buffEntity:init(info.buff)
|
|
buffEntity:setTargetSide(info.obj)
|
|
buffEntity:setIsCantRemove(true)
|
|
buffEntity:setNotShowIcon(true)
|
|
|
|
table.insert(self.initBuffs, {buffEntity = buffEntity, effect = info.buff})
|
|
end
|
|
end
|
|
|
|
return self.initBuffs
|
|
end
|
|
|
|
|
|
-- 战斗结束
|
|
function BattleControllerArena:controllBattleEnd()
|
|
self.combatReport = {
|
|
battleType = GConst.BattleConst.BATTLE_TYPE.ARENA,
|
|
wave = self:getWaveIndex(),
|
|
victory = self.victory,
|
|
round = self.waveRoundCount[self:getWaveIndex()] or 0
|
|
}
|
|
local atkReport = {}
|
|
local teamEntity = self.battleData:getAtkTeam()
|
|
local members = teamEntity:getAllMembers()
|
|
for k, v in pairs(members) do
|
|
local report = {
|
|
heroId = v:getId(),
|
|
dmg = v:getDamageCount(),
|
|
}
|
|
table.insert(atkReport, report)
|
|
end
|
|
self.combatReport.atkReport = atkReport
|
|
|
|
local defReport = {}
|
|
local teamEntity = self.battleData:getDefTeam()
|
|
local members = teamEntity:getAllMembers()
|
|
for k, v in pairs(members) do
|
|
local report = {
|
|
heroId = v:getId(),
|
|
dmg = v:getDamageCount(),
|
|
}
|
|
table.insert(defReport, report)
|
|
end
|
|
self.combatReport.defReport = defReport
|
|
local win = self.victory
|
|
BIReport:postFightHeroReport(self.combatReport.battleType, atkReport)
|
|
ModuleManager.ArenaManager:reqSettlement(win, self.combatReport, self.taskProgress)
|
|
end
|
|
|
|
-- 一共有多少波
|
|
function BattleControllerArena:getMaxWave()
|
|
return 1
|
|
end
|
|
|
|
function BattleControllerArena:getMaxRoundCount()
|
|
if not self.arenaMaxRound then
|
|
self.arenaMaxRound = GFunc.getConstIntValue("arena_max_round")
|
|
end
|
|
return self.arenaMaxRound
|
|
end
|
|
|
|
function BattleControllerArena:findNextDefUnit()
|
|
self:enterRoundEnd(true)
|
|
end
|
|
|
|
function BattleControllerArena:postWaveOver(atkDead, isQuit)
|
|
local deathType = BIReport.FIGHT_DEATH_TYPE.SURVIVE
|
|
local waveEndType = BIReport.FIGHT_WAVE_END_TYPE.WIN
|
|
if atkDead then
|
|
if self.isBossWave then
|
|
deathType = BIReport.FIGHT_DEATH_TYPE.BOSS_FAIL
|
|
else
|
|
deathType = BIReport.FIGHT_DEATH_TYPE.NORMAL_FAIL
|
|
end
|
|
waveEndType = BIReport.FIGHT_WAVE_END_TYPE.FAIL
|
|
end
|
|
|
|
if isQuit then
|
|
waveEndType = BIReport.FIGHT_WAVE_END_TYPE.QUIT
|
|
end
|
|
|
|
local duration = self.waveDurationTime
|
|
local totalTime = self.totalDurationTime
|
|
local startTimes = DataManager.ArenaData:getTotalFightCount()
|
|
local isFirstWin = false
|
|
local isFianlStep = self:getWaveIndex() >= self.maxWaveIndex
|
|
|
|
BIReport:postFightEnd(GConst.BattleConst.BATTLE_TYPE.ARENA, self.battleData, self.chapterId, self:getWaveIndex(), duration, totalTime, self.eliminateCount, self.eliminateTotalCount, waveEndType, deathType, startTimes, isFirstWin, isFianlStep, self.maxLinkCount)
|
|
end
|
|
|
|
function BattleControllerArena:postFightStart()
|
|
local startTimes = DataManager.ArenaData:getTotalFightCount()
|
|
BIReport:postFightBegin(GConst.BattleConst.BATTLE_TYPE.ARENA, self:getWaveIndex(), self.chapterId, self.chapterId, startTimes)
|
|
end
|
|
|
|
function BattleControllerArena:getAtkMinRow()
|
|
return GConst.BattleConst.PVP_ROW_COUNT // 2
|
|
end
|
|
|
|
function BattleControllerArena:getInitBoard()
|
|
if not self.boradList then
|
|
self.boradList = {}
|
|
self.fixedRandomGrid = {}
|
|
self.mysteryBoxIndexMap = {}
|
|
|
|
local config = self:getChapterConfig()[self.chapterId]
|
|
local boardCfg = self:getBoardConfig()
|
|
local boardId = config.rand_board[math.random(1, #config.rand_board)]
|
|
local cfg = boardCfg[boardId]
|
|
if cfg then
|
|
local board = GFunc.getTable(cfg.board)
|
|
for index, info in ipairs(board) do
|
|
if info[2] == GConst.BattleConst.ELEMENT_TYPE.NONE then
|
|
board[index][2] = math.random(1, GConst.BattleConst.ELEMENT_TYPE_COUNT)
|
|
end
|
|
end
|
|
table.insert(self.boradList, {board = board, mysteryBoard = GFunc.getTable(cfg.mystery_box_board), gridEdge = GFunc.getTable(cfg.grid_edge)})
|
|
table.insert(self.fixedRandomGrid, GFunc.getTable(cfg.control_element))
|
|
end
|
|
end
|
|
|
|
return self.boradList, self.fixedRandomGrid, self.mysteryBoxIndexMap
|
|
end
|
|
|
|
function BattleControllerArena:onTouchEvent(eventType, posId, isVirtual)
|
|
local isAtkAction = self.curActionSide == GConst.BattleConst.SIDE_ATK
|
|
local r = ModuleManager.BattleManager:getPosRC(posId).r
|
|
if isAtkAction then
|
|
if r <= self:getAtkMinRow() then
|
|
return
|
|
end
|
|
else
|
|
if r > self:getAtkMinRow() then
|
|
return
|
|
end
|
|
end
|
|
BattleControllerPVP.onTouchEvent(self, eventType, posId, isVirtual)
|
|
end
|
|
|
|
return BattleControllerArena |