local UICommonChangePanel = UIViewClass() ---------------------------------- 系统函数 ----------------------------------- function UICommonChangePanel:OnOpened(context) self.slotInfo = context.slotInfo self.assistanceType = context.assistanceType if self.assistanceType == MDL.AssistanceFight.AssistanceType.Hero then UIUtils.SetLabelText(self.UICommonPopUp.txt_Title, Const_IDS.IDS_AssistanceFight_ChooseHero_Title) elseif self.assistanceType == MDL.AssistanceFight.AssistanceType.Horse then UIUtils.SetLabelText(self.UICommonPopUp.txt_Title, Const_IDS.IDS_AssistanceFight_ChooseHorse_Title) elseif self.assistanceType == MDL.AssistanceFight.AssistanceType.Treasure then UIUtils.SetLabelText(self.UICommonPopUp.txt_Title, Const_IDS.IDS_AssistanceFight_ChooseTreasure_Title) end self.state_ToggleHide:SetState(self.assistanceType - 1) self.state_Tips:SetState(self.assistanceType == MDL.AssistanceFight.AssistanceType.Hero and 0 or 1) self.mainHeroId = MDL.Player.GetHeroLinUpIds()[self.slotInfo.formationIndex * 2 - 1] local isOn = MDL.Player.Get_TypeState(MDL.Player.WearViewToggleStateType.AssistanceChange) if isOn == self.toggle_Hide.isOn then if self.assistanceType == MDL.AssistanceFight.AssistanceType.Hero then self:RefreshHeroPanel() elseif self.assistanceType == MDL.AssistanceFight.AssistanceType.Horse then self:RefreshHorsePanel() elseif self.assistanceType == MDL.AssistanceFight.AssistanceType.Treasure then self:RefreshTreasurePanel() end else self.toggle_Hide.isOn = isOn end end function UICommonChangePanel:OnCellInit(scrollRect, index, cellTable, data) if scrollRect == self.loop_ChangeScroll then if self.assistanceType == MDL.AssistanceFight.AssistanceType.Hero then self:SetHeroCellItem(cellTable, data) elseif self.assistanceType == MDL.AssistanceFight.AssistanceType.Horse then self:SetHorseCellItem(cellTable, data) elseif self.assistanceType == MDL.AssistanceFight.AssistanceType.Treasure then self:SetTreasureCellItem(cellTable, data) end end end function UICommonChangePanel:OnCellClicked(scrollRect, index, cellTable, target, data) if scrollRect == self.loop_ChangeScroll then if target == cellTable.btn_Change then local dataID if self.assistanceType == MDL.AssistanceFight.AssistanceType.Hero then dataID = data.ID elseif self.assistanceType == MDL.AssistanceFight.AssistanceType.Horse then dataID = data.HorseID elseif self.assistanceType == MDL.AssistanceFight.AssistanceType.Treasure then dataID = data.TreasureID end if self.slotInfo.data.heroId == dataID then -- 下阵 CTL.AssistanceFight.OperateHeroLeave(self.slotInfo.slotId, dataID, self.assistanceType) else if self.assistanceType == MDL.AssistanceFight.AssistanceType.Hero and MDL.AssistanceFight.IsHeroOnAssistancePos(dataID) then -- 替换上阵 CTL.AssistanceFight.OperateSlotHeroChange(self.slotInfo.slotId, MDL.AssistanceFight.GetAssistanceSlotIdByHero(dataID), self.assistanceType) elseif self.assistanceType == MDL.AssistanceFight.AssistanceType.Horse and MDL.AssistanceFight.IsHorseOnAssistancePos(dataID) then CTL.AssistanceFight.OperateSlotHeroChange(self.slotInfo.slotId, MDL.AssistanceFight.GetAssistanceSlotIdByHorse(dataID), self.assistanceType) elseif self.assistanceType == MDL.AssistanceFight.AssistanceType.Treasure and MDL.AssistanceFight.IsTreasureOnAssistancePos(dataID) then CTL.AssistanceFight.OperateSlotHeroChange(self.slotInfo.slotId, MDL.AssistanceFight.GetAssistanceSlotIdByTreasure(dataID), self.assistanceType) else -- 上阵 MDL.AssistanceFight.RequestOptSlotOnEnter(self.slotInfo.slotId, dataID) end end end self:CloseView() end end function UICommonChangePanel:OnValueChanged(comp, state) if comp == self.toggle_Hide then if self.assistanceType == MDL.AssistanceFight.AssistanceType.Hero then self:RefreshHeroPanel() elseif self.assistanceType == MDL.AssistanceFight.AssistanceType.Horse then self:RefreshHorsePanel() elseif self.assistanceType == MDL.AssistanceFight.AssistanceType.Treasure then self:RefreshTreasurePanel() end MDL.Player.Set_TypeState(MDL.Player.WearViewToggleStateType.AssistanceChange, state) end end function UICommonChangePanel:OnBackButtonPressed() self:OnButtonClicked(self.UICommonPopUp.btn_Close) end function UICommonChangePanel:OnButtonClicked(comp) if comp == self.img_Bottom or comp == self.UICommonPopUp.btn_Close then self:CloseView() end end --------------------------------------------------------------------------------- --region ------------------------------- 武将 ------------------------------- function UICommonChangePanel:RefreshHeroPanel() self.loop_ChangeScroll:ClearCells() if self.slotInfo.data.heroId ~= 0 then self.loop_ChangeScroll:AddData(DataSheetManager.HeroNum:GetDataByID(self.slotInfo.data.heroId), 0) end for i, v in ipairs (CTL.AssistanceFight.GetAvailableHeroList(self.slotInfo.formationIndex)) do if not MDL.HeroSelect.IsHasHero(v.ID) or MDL.Player.HeroIsLineUp(v.ID) then break end -- 查找当前阵位上阵武将 if self.slotInfo.data.heroId ~= v.ID and (not self.toggle_Hide.isOn or not MDL.AssistanceFight.IsHeroOnAssistancePos(v.ID)) then self.loop_ChangeScroll:AddData(v, 0) end end UIUtils.SetActive(self.group_Empty, self.loop_ChangeScroll.Count == 0) if self.loop_ChangeScroll.Count == 0 then self.state_NoneHero:SetState(0) end end function UICommonChangePanel:SetHeroCellItem(cellTable, data) local curGs = MDL.AssistanceFight.GetFormationSlotHeroGs(self.slotInfo.formationIndex, data.ID) local heroQuality = CTL.HeroSelect.GetHeroNameQuality(data.ID) local itemId = MDL.HeroAwaken.GetIsHeroAwaken(data.ID) and CTL.HeroAwaken.GetItemIconId(data.ID) or data.HeroItem UTL.Item.ItemSquareIcon(cellTable.img_Avatar, cellTable.img_QualityBg, itemId) UTL.Item.PlayItemEffect(cellTable, itemId) UIUtils.SetLabel(cellTable.txt_Name, UTL.Color.FormatQualityText(UIUtils.GetLocalizedTxt(Const_IDS[data.NameIDS]), heroQuality)) UIUtils.SetActive(cellTable.img_AssistanceIcon, MDL.AssistanceFight.IsHeroOnAssistancePos(data.ID)) UIUtils.SetLabel(cellTable.txt_CENum, curGs) cellTable.state_Btn:SetState(self.slotInfo.data.heroId == data.ID and 0 or 1) cellTable.btn_Change:SetRedPoint(false) if self.slotInfo.data.heroId ~= data.ID then if MDL.AssistanceFight.IsHeroOnAssistancePos(data.ID) then UIUtils.SetLabelText(cellTable.lab_Change, Const_IDS.IDS_BUTTON_CHANGE) else if self.slotInfo.data.heroId == 0 then cellTable.btn_Change:SetRedPoint(true) else cellTable.btn_Change:SetRedPoint(curGs > MDL.AssistanceFight.GetFormationSlotHeroGs(self.slotInfo.formationIndex, self.slotInfo.data.heroId)) end end end end --endregion ------------------------------- 武将 ------------------------------- --region ------------------------------- 坐骑 ------------------------------- function UICommonChangePanel:RefreshHorsePanel() self.loop_ChangeScroll:ClearCells() if self.slotInfo.data.heroId ~= 0 then self.loop_ChangeScroll:AddData(DataSheetManager.HorseData:GetDataByHorseID(self.slotInfo.data.heroId), 0) end for i, v in ipairs (CTL.AssistanceFight.GetAvailableHorseList(self.slotInfo.formationIndex)) do if MDL.WarHorse.IsHasHorse(v.HorseID) and MDL.WarHorse.GetEquippedHeroIDByHorseID(v.HorseID) <= 0 then -- 查找当前阵位上阵坐骑 if self.slotInfo.data.heroId ~= v.HorseID and (not self.toggle_Hide.isOn or not MDL.AssistanceFight.IsHorseOnAssistancePos(v.HorseID)) then self.loop_ChangeScroll:AddData(v, 0) end end end UIUtils.SetActive(self.group_Empty, self.loop_ChangeScroll.Count == 0) if self.loop_ChangeScroll.Count == 0 then self.state_NoneHero:SetState(1) end end function UICommonChangePanel:SetHorseCellItem(cellTable, data) local curGs = MDL.AssistanceFight.GetFormationSlotHorseGs(self.slotInfo.formationIndex, data.HorseID) local heroQuality = CTL.WarHorse.GetHorseQuality(data.HorseID) local itemId = data.Item_Table[1].ItemID UTL.Item.ItemSquareIcon(cellTable.img_Avatar, cellTable.img_QualityBg, itemId) UTL.Item.PlayItemEffect(cellTable, itemId) UIUtils.SetLabel(cellTable.txt_Name, UTL.Color.FormatQualityText(UIUtils.GetLocalizedTxt(Const_IDS[data.HorseName]), heroQuality)) UIUtils.SetActive(cellTable.img_AssistanceIcon, MDL.AssistanceFight.IsHorseOnAssistancePos(data.HorseID)) -- 已助阵标记 UIUtils.SetLabel(cellTable.txt_CENum, curGs) cellTable.state_Btn:SetState(self.slotInfo.data.heroId == data.HorseID and 0 or 1) cellTable.btn_Change:SetRedPoint(false) if self.slotInfo.data.heroId ~= data.HorseID then if MDL.AssistanceFight.IsHorseOnAssistancePos(data.HorseID) then UIUtils.SetLabelText(cellTable.lab_Change, Const_IDS.IDS_BUTTON_CHANGE) else if self.slotInfo.data.heroId == 0 then cellTable.btn_Change:SetRedPoint(true) else cellTable.btn_Change:SetRedPoint(curGs > MDL.AssistanceFight.GetFormationSlotHorseGs(self.slotInfo.formationIndex, self.slotInfo.data.heroId)) end end end end --endregion ------------------------------- 坐骑 ------------------------------- --region ------------------------------- 宝物 ------------------------------- function UICommonChangePanel:RefreshTreasurePanel() self.loop_ChangeScroll:ClearCells() if self.slotInfo.data.heroId ~= 0 then self.loop_ChangeScroll:AddData(DataSheetManager.TreasureData:GetDataByTreasureID(self.slotInfo.data.heroId), 0) end for i, v in ipairs (CTL.AssistanceFight.GetAvailableTreasureList(self.slotInfo.formationIndex)) do if MDL.Treasure.IsHasTreasure(v.TreasureID) and MDL.Treasure.GetEquippedHeroIDByTreasureID(v.TreasureID) <= 0 then -- 查找当前阵位上阵宝物 if self.slotInfo.data.heroId ~= v.TreasureID and (not self.toggle_Hide.isOn or not MDL.AssistanceFight.IsTreasureOnAssistancePos(v.TreasureID)) then self.loop_ChangeScroll:AddData(v, 0) end end end UIUtils.SetActive(self.group_Empty, self.loop_ChangeScroll.Count == 0) if self.loop_ChangeScroll.Count == 0 then self.state_NoneHero:SetState(2) end end function UICommonChangePanel:SetTreasureCellItem(cellTable, data) local curGs = MDL.AssistanceFight.GetFormationSlotTreasureGs(self.slotInfo.formationIndex, data.TreasureID) local heroQuality = data.TreasureQuality local itemId = data.Item_Table[1].ItemID UTL.Item.ItemSquareIcon(cellTable.img_Avatar, cellTable.img_QualityBg, itemId) UTL.Item.PlayItemEffect(cellTable, itemId) UIUtils.SetLabel(cellTable.txt_Name, UTL.Color.FormatQualityText(UIUtils.GetLocalizedTxt(Const_IDS[data.TreasureName]), heroQuality)) UIUtils.SetActive(cellTable.img_AssistanceIcon, MDL.AssistanceFight.IsTreasureOnAssistancePos(data.TreasureID)) -- 已助阵标记 UIUtils.SetLabel(cellTable.txt_CENum, curGs) cellTable.state_Btn:SetState(self.slotInfo.data.heroId == data.TreasureID and 0 or 1) cellTable.btn_Change:SetRedPoint(false) if self.slotInfo.data.heroId ~= data.TreasureID then if MDL.AssistanceFight.IsTreasureOnAssistancePos(data.TreasureID) then UIUtils.SetLabelText(cellTable.lab_Change, Const_IDS.IDS_BUTTON_CHANGE) else if self.slotInfo.data.heroId == 0 then cellTable.btn_Change:SetRedPoint(true) else cellTable.btn_Change:SetRedPoint(curGs > MDL.AssistanceFight.GetFormationSlotTreasureGs(self.slotInfo.formationIndex, self.slotInfo.data.heroId)) end end end end --endregion ------------------------------- 宝物 ------------------------------- return UICommonChangePanel