320 lines
12 KiB
Lua
320 lines
12 KiB
Lua
local ATM_MainMatchView={}
|
|
local this=ATM_MainMatchView
|
|
local commonInfo = require("Modules/ArenaTopMatch/View/ATM_CommonInfo")
|
|
--初始化组件(用于子类重写)
|
|
function ATM_MainMatchView:InitComponent()
|
|
|
|
this.btnRecord = Util.GetGameObject(self.gameObject, "record")
|
|
this.btnTeamRank = Util.GetGameObject(self.gameObject, "teamRank")
|
|
|
|
this.btnFightDetail = Util.GetGameObject(self.gameObject, "btnDetail")
|
|
|
|
this.containPanel = Util.GetGameObject(self.gameObject, "contain")
|
|
this.lockPanel = Util.GetGameObject(self.gameObject, "contain/LockBg")
|
|
this.lockContext = Util.GetGameObject(this.lockPanel, "context"):GetComponent("Text")
|
|
this.lockTime = Util.GetGameObject(this.lockPanel, "JoinRoot/time"):GetComponent("Text")
|
|
this.lockTip = Util.GetGameObject(this.lockPanel, "JoinRoot/tip"):GetComponent("Text")
|
|
this.outTip = Util.GetGameObject(this.lockPanel, "OutRoot/Text"):GetComponent("Text")
|
|
this.WeedOutText = Util.GetGameObject(this.lockPanel, "WeedOutRoot/Text"):GetComponent("Text")
|
|
this.WeedOutMyRank = Util.GetGameObject(this.lockPanel, "WeedOutRoot/MyRank"):GetComponent("Text")
|
|
this.WeedOutMyRankText = Util.GetGameObject(this.lockPanel, "WeedOutRoot/MyRank/Text"):GetComponent("Text")
|
|
this.WeedOutBestRank = Util.GetGameObject(this.lockPanel, "WeedOutRoot/BestRank"):GetComponent("Text")
|
|
this.WeedOutBestRankText = Util.GetGameObject(this.lockPanel, "WeedOutRoot/BestRank/Text"):GetComponent("Text")
|
|
|
|
this.lockIn = Util.GetGameObject(this.lockPanel, "JoinRoot")
|
|
this.lockOut = Util.GetGameObject(this.lockPanel, "OutRoot")
|
|
this.WeedOutRoot = Util.GetGameObject(this.lockPanel, "WeedOutRoot")
|
|
|
|
this.effect = Util.GetGameObject(self.gameObject, "bg/UI_effect_ArenaMainPanel_particle")
|
|
|
|
this.orggroup = Util.GetGameObject(this.lockPanel, "orggroup")
|
|
this.Demons = Util.GetGameObject(this.lockPanel, "Demons")
|
|
this.myBaby = {}
|
|
for i = 1, 6 do
|
|
this.myBaby[i] = Util.GetGameObject(this.lockPanel,"Demons/heroPro (" .. i .. ")")
|
|
end
|
|
end
|
|
|
|
--绑定事件(用于子类重写)
|
|
function ATM_MainMatchView:BindEvent()
|
|
commonInfo.BindEvent()
|
|
Util.AddClick(this.btnRecord, function ()
|
|
-- UIManager.OpenPanel(UIName.RecordPopup)
|
|
ArenaTopMatchManager.RequestBattleHistory(function()
|
|
UIManager.OpenPanel(UIName.RecordPopup)
|
|
end)
|
|
|
|
end)
|
|
|
|
Util.AddClick(this.btnTeamRank, function ()
|
|
ArenaTopMatchManager.RequestMyTeamRank(function()
|
|
UIManager.OpenPanel(UIName.ATMTeamRankPopup)
|
|
end)
|
|
end)
|
|
|
|
Util.AddClick(this.btnFightDetail, function ()
|
|
this.battleDetailBtnClick()
|
|
end)
|
|
|
|
end
|
|
--添加事件监听(用于子类重写)
|
|
function ATM_MainMatchView:AddListener()
|
|
Game.GlobalEvent:AddEvent(GameEvent.TopMatch.OnTopMatchDataUpdate, this.OnOpen, this)
|
|
Game.GlobalEvent:AddEvent(GameEvent.ATM_RankView.OnOpenBattle, this.battleDetailBtnClick)
|
|
|
|
end
|
|
|
|
--移除事件监听(用于子类重写)
|
|
function ATM_MainMatchView:RemoveListener()
|
|
Game.GlobalEvent:RemoveEvent(GameEvent.TopMatch.OnTopMatchDataUpdate, this.OnOpen, this)
|
|
Game.GlobalEvent:RemoveEvent(GameEvent.ATM_RankView.OnOpenBattle, this.battleDetailBtnClick)
|
|
end
|
|
|
|
--界面打开时调用(用于子类重写)
|
|
function ATM_MainMatchView:OnOpen(...)
|
|
local isActive = ArenaTopMatchManager.IsTopMatchActive()
|
|
this.StateChange(isActive)
|
|
end
|
|
|
|
-- 状态切换
|
|
local isJoin = nil
|
|
local isOver = nil
|
|
function this.StateChange(isOpen)
|
|
local baseData = ArenaTopMatchManager.GetBaseData()
|
|
-- 没开启或者开启没参赛都属于未参赛
|
|
isJoin = baseData.joinState == 1
|
|
isOver = baseData.progress == -2
|
|
LogGreen("isOpen "..tostring(isOpen).." "..tostring(isJoin).." "..tostring(isOver).." "..baseData.joinState)
|
|
local battleInfo = ArenaTopMatchManager.GetBattleInfo()
|
|
LogGreen("battleInfo.result "..battleInfo.result.." baseData.battleState "..baseData.battleState)
|
|
LogGreen("baseData.loser "..tostring(baseData.loser))
|
|
if isOpen then
|
|
if isJoin then
|
|
this.SetPlayerInfo()
|
|
if baseData.loser then
|
|
this.SetWeedOutRootInfo()
|
|
end
|
|
else
|
|
this.SetNotJionInfo()
|
|
end
|
|
if isOver then
|
|
this.SetOverInfo()
|
|
end
|
|
else
|
|
if isOver then
|
|
this.SetOverInfo()
|
|
else
|
|
this.SetLockInfo()
|
|
end
|
|
end
|
|
|
|
this.containPanel:SetActive(not isOpen or not isJoin or baseData.loser or isOver)-- or isOver
|
|
this.btnRecord:SetActive(isOpen and isJoin)
|
|
this.btnTeamRank:SetActive(isOpen and isJoin)
|
|
this.btnFightDetail:SetActive(isOpen and isJoin and baseData.battleState == TOP_MATCH_TIME_STATE.OPEN_IN_END)
|
|
-- this.orggroup:SetActive(not isOpen and not isOver)
|
|
-- this.Demons:SetActive(not isOpen and not isOver) --not isOpen or (isOpen and isOver)
|
|
this.orggroup:SetActive(true)
|
|
this.Demons:SetActive(true)
|
|
this.FreshTeam()
|
|
end
|
|
|
|
|
|
function this.battleDetailBtnClick()
|
|
local battleInfo = ArenaTopMatchManager.GetBattleInfo()
|
|
if not isJoin or (isJoin and isOver) then
|
|
return
|
|
end
|
|
if battleInfo.result == -1 then
|
|
return
|
|
end
|
|
if ArenaTopMatchManager.GetIsBattleEndState(1) then
|
|
return
|
|
end
|
|
if UIManager.IsOpen(UIName.BattlePanel) then
|
|
return
|
|
end
|
|
local nameStr = battleInfo.myInfo.name.."|"..battleInfo.enemyInfo.name
|
|
ArenaTopMatchManager.RequestReplayRecord(battleInfo.result, battleInfo.fightData, nameStr, function()
|
|
|
|
local blueInfo = battleInfo.myInfo
|
|
local redInfo = battleInfo.enemyInfo
|
|
--构建显示结果数据
|
|
local arg = {}
|
|
arg.result = battleInfo.result
|
|
arg.blue = {}
|
|
arg.blue.uid = blueInfo.uid
|
|
arg.blue.name = blueInfo.name
|
|
arg.blue.head = blueInfo.head
|
|
arg.blue.frame = blueInfo.headFrame
|
|
arg.red = {}
|
|
arg.red.uid = redInfo.uid
|
|
arg.red.name = redInfo.name
|
|
arg.red.head = redInfo.head
|
|
arg.red.frame = redInfo.headFrame
|
|
UIManager.OpenPanel(UIName.ArenaResultPopup, arg)
|
|
end)
|
|
end
|
|
function this.SetPlayerInfo()
|
|
this.lockIn:SetActive(false)
|
|
this.lockOut:SetActive(false)
|
|
this.WeedOutRoot:SetActive(false)
|
|
|
|
local battleInfo = ArenaTopMatchManager.GetBattleInfo()
|
|
local attInfo = battleInfo.myInfo
|
|
local defInfo = battleInfo.enemyInfo
|
|
local myResult = -1
|
|
local blueInfo = nil
|
|
local redInfo = nil
|
|
-- LogPink("battleInfo.result "..battleInfo.result)
|
|
local battleEndResultSortState = true --true 战斗最终直接赋值 false 颠倒赋值
|
|
-- LogRed("PlayerManager.uid "..PlayerManager.uid.." "..attInfo.uid.." "..defInfo.uid)
|
|
if attInfo.uid == PlayerManager.uid then
|
|
blueInfo = attInfo
|
|
redInfo = defInfo
|
|
myResult = battleInfo.result
|
|
battleEndResultSortState = true
|
|
elseif defInfo.uid == PlayerManager.uid then
|
|
blueInfo = defInfo
|
|
redInfo = attInfo
|
|
if battleInfo.result ~= -1 then
|
|
myResult = (battleInfo.result + 1) % 2
|
|
end
|
|
battleEndResultSortState = false
|
|
end
|
|
--if battleInfo.result == 0 then -- 如果进攻方失败,则如果我是进攻方则我失败,反之胜利
|
|
-- myResult = attInfo.uid == PlayerManager.uid and 0 or 1
|
|
--elseif battleInfo.result == 1 then -- 如果进攻方胜利,则如果我是进攻方则我胜利
|
|
-- myResult = attInfo.uid == PlayerManager.uid and 1 or 0
|
|
--end
|
|
|
|
local baseData = ArenaTopMatchManager.GetBaseData()
|
|
commonInfo.SetActive(true)
|
|
commonInfo.SetInfoData(1, blueInfo, redInfo, myResult, baseData == TOP_MATCH_STAGE.CHOOSE,battleEndResultSortState)
|
|
end
|
|
|
|
function this.SetLockInfo()
|
|
--加一套编队
|
|
this.lockIn:SetActive(true)
|
|
this.lockOut:SetActive(false)
|
|
this.WeedOutRoot:SetActive(false)
|
|
commonInfo.SetActive(false)
|
|
|
|
this.lockContext.text = Language[10169]
|
|
this.lockTip.text = Language[10170]
|
|
|
|
if not this.lockTimer then
|
|
local startTime = ArenaTopMatchManager.GetTopMatchTime()
|
|
local during = startTime - PlayerManager.serverTime
|
|
during = during <= 0 and 0 or during
|
|
this.lockTime.text = TimeToHMS(during)
|
|
|
|
this.lockTimer = Timer.New(function ()
|
|
local startTime = ArenaTopMatchManager.GetTopMatchTime()
|
|
local during = startTime - PlayerManager.serverTime
|
|
during = during <= 0 and 0 or during
|
|
local timeStr = TimeToHMS(during)
|
|
this.lockTime.text = timeStr
|
|
end, 1, -1, true)
|
|
this.lockTimer:Start()
|
|
end
|
|
this.FreshTeam()
|
|
end
|
|
function this.FreshTeam()
|
|
Util.AddOnceClick(this.orggroup, function ()
|
|
UIManager.OpenPanel(UIName.FormationPanelV2, FORMATION_TYPE.ARENA_TOP_MATCH, function()
|
|
-- 重新获取战斗数据
|
|
--ArenaTopMatchManager.RequestTopMatchBaseInfo()
|
|
end)
|
|
end)
|
|
for i, demon in ipairs(this.myBaby) do
|
|
Util.GetGameObject(demon, "frame"):GetComponent("Image").sprite = Util.LoadSprite(GetQuantityImageByquality(1))
|
|
Util.GetGameObject(demon, "hero"):SetActive(false)
|
|
end
|
|
local formation = FormationManager.GetFormationByID(FormationTypeDef.ARENA_TOM_MATCH)
|
|
for i, hero in ipairs(formation.teamHeroInfos) do
|
|
local heroData = HeroManager.GetSingleHeroData(hero.heroId)
|
|
local heroGo = Util.GetGameObject(this.myBaby[hero.position], "hero")
|
|
heroGo:SetActive(true)
|
|
Util.GetGameObject(heroGo, "lvbg/levelText"):GetComponent("Text").text = heroData.lv
|
|
SetHeroStars(Util.GetGameObject(heroGo, "starGrid"), heroData.star)
|
|
local demonId = heroData.id
|
|
local heroConfig = ConfigManager.GetConfigData(ConfigName.HeroConfig, demonId)
|
|
Util.GetGameObject(this.myBaby[hero.position], "frame"):GetComponent("Image").sprite = Util.LoadSprite(GetQuantityImageByquality(heroConfig.Quality,heroData.star))
|
|
Util.GetGameObject(heroGo, "icon"):GetComponent("Image").sprite = Util.LoadSprite(GetResourcePath(heroConfig.Icon))
|
|
Util.GetGameObject(heroGo, "proIcon"):GetComponent("Image").sprite = Util.LoadSprite(GetProStrImageByProNum(heroConfig.PropertyName))
|
|
end
|
|
end
|
|
function this.SetNotJionInfo()
|
|
this.lockIn:SetActive(false)
|
|
this.lockOut:SetActive(true)
|
|
this.WeedOutRoot:SetActive(false)
|
|
commonInfo.SetActive(false)
|
|
this.lockContext.text = Language[10171]
|
|
this.outTip.text = Language[10172]
|
|
end
|
|
|
|
function this.SetOverInfo()
|
|
this.lockIn:SetActive(false)
|
|
this.lockOut:SetActive(true)
|
|
this.WeedOutRoot:SetActive(false)
|
|
commonInfo.SetActive(false)
|
|
this.lockContext.text = Language[10173]
|
|
this.outTip.text = Language[10174]
|
|
end
|
|
function this.SetWeedOutRootInfo()
|
|
this.lockIn:SetActive(false)
|
|
this.lockOut:SetActive(false)
|
|
this.WeedOutRoot:SetActive(true)
|
|
commonInfo.SetActive(false)
|
|
local tmData = ArenaTopMatchManager.GetBaseData()
|
|
this.WeedOutText.text = Language[12208]
|
|
this.WeedOutMyRank.text = Language[10104]
|
|
this.WeedOutMyRankText.text = tmData.myrank <= 0 and Language[10041] or ArenaTopMatchManager.GetRankNameByRank(tmData.myrank)
|
|
this.WeedOutBestRank.text = Language[12245]
|
|
this.WeedOutBestRankText.text = tmData.maxRank <= 0 and Language[10094] or this.GetRankName(tmData.maxRank)
|
|
end
|
|
|
|
-- 获取我得排名信息
|
|
function this.GetRankName(rank)
|
|
if rank == 1 then
|
|
return Language[10095]
|
|
elseif rank == 2 then
|
|
return Language[10096]
|
|
else
|
|
local maxTurn = ArenaTopMatchManager.GetEliminationMaxRound()
|
|
for i = 1, maxTurn do
|
|
if i == maxTurn then
|
|
local config = ConfigManager.GetConfigData(ConfigName.ChampionshipSetting, 1)
|
|
return config.ChampionshipPlayer..Language[10097]
|
|
end
|
|
if rank > math.pow(2, i) and rank <= math.pow(2, i+1) then
|
|
return (i+1)..Language[10097]
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- 层级改变回调
|
|
local orginLayer = 0
|
|
function ATM_MainMatchView:OnSortingOrderChange(sort)
|
|
Util.AddParticleSortLayer(this.effect, sort - orginLayer)
|
|
orginLayer = sort
|
|
end
|
|
|
|
|
|
--界面关闭时调用(用于子类重写)
|
|
function ATM_MainMatchView:OnClose()
|
|
if this.lockTimer then
|
|
this.lockTimer:Stop()
|
|
this.lockTimer = nil
|
|
end
|
|
commonInfo.SetEffectPopupShow(false)
|
|
end
|
|
|
|
--界面销毁时调用(用于子类重写)
|
|
function ATM_MainMatchView:OnDestroy()
|
|
|
|
end
|
|
|
|
return ATM_MainMatchView |