local UISlgGvELineUp = UIViewClass() function UISlgGvELineUp:OnOpened(context) self:RegistSystemEvent(EventID.UI_SlgGvE_Team_Update_Info, self.RefreshUI) self:RegistSystemEvent(EventID.UI_FreeLineUp_RefreshUI, self.RefreshUI) MDL.FreeLineUp.FreeLineUpGetInfoRequest(MDL.FreeLineUp.FuncType.SlgGvE) self.isSweep = context.isSweep self.enterType = context.enterType if self.enterType == CTL.SlgGvE.LineupEnterType.onlyLineUp then UIUtils.SetLabelText(self.UICommonPopUp.txt_Title, Const_IDS.IDS_SlgGve_Main_Hint_4) else UIUtils.SetLabelText(self.UICommonPopUp.txt_Title, Const_IDS.IDS_SlgGve_Enemy_Hint_7) self.isEnemySoldier = context.isEnemySoldier self.plotId = context.plotId self.pointIndex = context.pointIndex self.plotType = DataSheetManager.SlgGvEPlotData:GetDataByGveMapID(self.plotId).GveMapType if self.isEnemySoldier then local enemyData = DataSheetManager.SlgGvEEnemyData:GetDataByBanditLevel(MDL.SlgGvE.GetCurOfficalLv()) self.subjugateDataPVE = enemyData.SubjugateDataPVE self.levelID = enemyData.LevelID else local plotData = DataSheetManager.SlgGvEPlotData:GetDataByGveMapID(self.plotId) self.subjugateDataPVE = plotData.SubjugateDataPVE self.levelID = plotData.LevelID end end UIUtils.SetActive(self.UICommonPopUp.img_Info, true) self.seasonPrivilegeLeftTime = MDL.SlgGvE.GetSeasonPrivilegeLeftTime() self.energyLimit = MDL.SlgGvE.GetEnergyLimit() end function UISlgGvELineUp:RefreshUI() self.loopScroll:ClearCells() local maxQueueNum = MDL.SlgGvE.GetGvEConstData().MaxQueueNum for i = 1, maxQueueNum do self.loopScroll:AddData(i, 0) end end function UISlgGvELineUp:OnBackButtonPressed() self:OnButtonClicked(self.UICommonPopUp.btn_Close) end function UISlgGvELineUp:OnButtonClicked(comp) if comp == self.UICommonPopUp.btn_Close then self:CloseView() elseif comp == self.UICommonPopUp.img_Info then UIManager.OpenView(Const_UI_Lua.UIEnum.UICommonNoteView, {id = LuaConst.NoteID.SlgGvELineUp}) end end function UISlgGvELineUp:OnCellClicked(scrollRect, index, cellTable, target, data) if scrollRect == self.loopScroll then if target == cellTable.btn_Array1 or target == cellTable.btn_Array2 then CTL.SlgGvE.OpenHeroSelectOfficer(data) elseif target == cellTable.btn_GoBattle then self:OnClickBattleBtn(data) end end end function UISlgGvELineUp:OnClickBattleBtn(teamId) if MDL.SlgGvE.GetTeamInjuryLeftTime(teamId) > 0 then CTL.Tips.AddTipsMsg(Const_IDS["IDS_SlgGve_BattleArray_Hint_13"]) --重伤中 return end local isHasHero = false local isHasHeroEmptySlot = false local lineInfo = self:GetLineInfo(teamId) if lineInfo and lineInfo.heroInfos and #lineInfo.heroInfos > 0 then for _, v in ipairs(lineInfo.heroInfos) do if v.heroId > 0 then isHasHero = true else isHasHeroEmptySlot = true end end else isHasHeroEmptySlot = true end if not isHasHero then CTL.Tips.AddTipsMsg(Const_IDS["IDS_SlgGve_BattleArray_Hint_6"]) --无出战英雄 return end local fightConsume if self.isEnemySoldier then fightConsume = MDL.SlgGvE.GetGvEConstData().FigntBanditConsume else if self.seasonPrivilegeLeftTime > 0 then fightConsume = MDL.SlgGvE.GetGvEConstData().NewSeasonFightConsume else fightConsume = MDL.SlgGvE.GetGvEConstData().FightConsume end end if MDL.SlgGvE.GetTeamEnergy(teamId) < fightConsume then CTL.Tips.AddTipsMsg(Const_IDS["IDS_SlgGve_BattleArray_Hint_8"]) --体力不足 return end if not self.isSweep and isHasHeroEmptySlot then --阵位未满,确认弹窗 UTL.MessageBox.ShowOKCancelBox(nil, UIUtils.GetLocalizedTxt(Const_IDS.IDS_SlgGve_BattleArray_Hint_7), function() self:EnterFubenBattle(teamId) end) return end self:EnterFubenBattle(teamId) end function UISlgGvELineUp:EnterFubenBattle(teamId) if self.isSweep then MDL.SlgGvE.GVEPersonalLandSweepReq(teamId, self.pointIndex) else CTL.SlgGvE.SetLastBattleGridIndex(self.pointIndex) local battleType = self.isEnemySoldier and 1 or 2 MDL.SlgGvE.EnterFubenReq(self.levelID, teamId, battleType, self.plotId, self.pointIndex, self.plotType) end end function UISlgGvELineUp:OnCellInit(scrollRect, index, cellTable, data) local lineInfo = self:GetLineInfo(data) if lineInfo then UIUtils.SetActive(cellTable.group_NoActive, false) if lineInfo.heroInfos and #lineInfo.heroInfos > 0 then self:RefreshHeroes(cellTable, lineInfo.heroInfos) else self:RefreshHeroesEmpty(cellTable) end self:RefreshGs(cellTable, lineInfo.TotalGs) self:RefreshEnergy(cellTable,data) else self:RefreshHeroesEmpty(cellTable) if self:IsTeamUnlock(data) then self:RefreshGs(cellTable, 0) self:RefreshEnergy(cellTable,data) else UIUtils.SetActive(cellTable.group_NoActive, true) cellTable.txt_energy.text = self.energyLimit.."/"..self.energyLimit cellTable.txt_PowerNumber.text = 0 if self.isEnemySoldier then cellTable.txt_CostNumber.text = UTL.Color.FormatGreenColor(MDL.SlgGvE.GetGvEConstData().FigntBanditConsume) else if self.seasonPrivilegeLeftTime > 0 then cellTable.txt_CostNumber.text = UTL.Color.FormatGreenColor(MDL.SlgGvE.GetGvEConstData().NewSeasonFightConsume) else cellTable.txt_CostNumber.text = UTL.Color.FormatGreenColor(MDL.SlgGvE.GetGvEConstData().FightConsume) end end end end local ids = DataSheetManager.SlgGvEQueueData:GetDataByGveQueueID(data).GveQueueName cellTable.txt_MarkName.text = UIUtils.GetLocalizedTxt(Const_IDS[ids]) --重伤 local timeStr = UIUtils.GetLocalizedTxt(Const_IDS.IDS_SlgGve_BattleArray_Hint_2).."{0}:{1}" local leftTime = MDL.SlgGvE.GetTeamInjuryLeftTime(data) cellTable.txt_InjuryTimeCd:ResetAndBeginCustomTimer(false, leftTime, 0, timeStr) self:RefreshBattleBtn(cellTable) end function UISlgGvELineUp:RefreshBattleBtn(cellTable) UIUtils.SetActive(cellTable.btn_Array2, self.enterType == CTL.SlgGvE.LineupEnterType.onlyLineUp) UIUtils.SetActive(cellTable.group_GoBattleOperate, self.enterType ~= CTL.SlgGvE.LineupEnterType.onlyLineUp) if self.isSweep then cellTable.lab_GoBattle.text = UIUtils.GetLocalizedTxt(Const_IDS.IDS_Sweep_Title) else cellTable.lab_GoBattle.text = UIUtils.GetLocalizedTxt(Const_IDS.IDS_SlgGve_Enemy_Hint_7) end end function UISlgGvELineUp:IsTeamUnlock(teamId) for key, value in pairs(MDL.SlgGvE.GetTeamInfoMap()) do if teamId == key then return true end end return false end function UISlgGvELineUp:RefreshEnergy(cellTable, teamId) local energy = MDL.SlgGvE.GetTeamEnergy(teamId) if energy == 0 then cellTable.txt_energy.text = UTL.Color.FormatRedColor(energy).."/"..self.energyLimit else cellTable.txt_energy.text = energy.."/"..self.energyLimit end if self.isEnemySoldier then local num = MDL.SlgGvE.GetGvEConstData().FigntBanditConsume cellTable.txt_CostNumber.text = energy < num and UTL.Color.FormatRedColor(num) or UTL.Color.FormatGreenColor(num) else local num if self.seasonPrivilegeLeftTime > 0 then num = MDL.SlgGvE.GetGvEConstData().NewSeasonFightConsume else num = MDL.SlgGvE.GetGvEConstData().FightConsume end cellTable.txt_CostNumber.text = energy < num and UTL.Color.FormatRedColor(num) or UTL.Color.FormatGreenColor(num) end end function UISlgGvELineUp:RefreshGs(cellTable, totalGs) local currentGS if self.subjugateDataPVE then currentGS = CTL.LevelSelect.GetSubjugateFreeLineGsText(self.subjugateDataPVE, totalGs) else currentGS = totalGs end cellTable.txt_PowerNumber.text = currentGS end function UISlgGvELineUp:RefreshHeroes(cellTable, heroInfos) for i, v in ipairs(heroInfos) do UIUtils.SetActive(cellTable.HeroGroup[i].img_Hero, v.heroId > 0) UIUtils.SetActive(cellTable.HeroGroup[i].img_Empty, not (v.heroId > 0)) if v.heroId > 0 then UTL.Item.SetHeroIconByHeroId(cellTable.HeroGroup[i].img_Hero, v.heroId, MDL.HeroAwaken.GetIsHeroAwaken(v.heroId)) end end end function UISlgGvELineUp:RefreshHeroesEmpty(cellTable) for i, v in ipairs(cellTable.HeroGroup) do UIUtils.SetActive(v.img_Hero, false) UIUtils.SetActive(v.img_Empty, true) end end function UISlgGvELineUp:GetLineInfo(teamId) for _, lineInfo in ipairs(MDL.FreeLineUp.GetLineUpInfoByFunctionType(MDL.FreeLineUp.FuncType.SlgGvE)) do if lineInfo.lineNumber == teamId then return lineInfo end end end function UISlgGvELineUp:OnClosed() UIUtils.SetActive(self.UICommonPopUp.img_Info, false) end return UISlgGvELineUp