local UIWarHorseBreak = UIViewClass() local resonance_info = require 'Proto/resonance_info_pb' local goldWarHorseFragmentItemID = 303 -- 金坐骑万能碎片 local superGoldWarHorseFragmentItemID = 403 -- 彩金坐骑万能碎片 local Node_Effect_State = { StageUp = 0, --小突破 StarUp = 1, --大突破 ToStageUp = 0, --待小突破 ToStarUp = 1, --待大突破 None = 2, } function UIWarHorseBreak:OnOpened(config) self:RegistSystemEvent(EventID.BagItem_Update, self.UpdateItemInfo) self:RegistSystemEvent(EventID.UI_UpdateWarHorseInfo, self.RefreshPanel) self:RegistSystemEvent(EventID.UI_ResonanceChange_Refresh, self.RefreshResonanceLv) self:RefreshResonanceLv() CTL.FormationResonance.SetSubResonanceImage(self.icon_Resonance, resonance_info.Horse_Break) for i, v in ipairs(self.group_unStage) do self:RegistTriggerEvent(v, UIEventTriggerType.PointerDown) self:RegistTriggerEvent(v, UIEventTriggerType.PointerUp) end self:UpdateInfo(config) end function UIWarHorseBreak:RefreshResonanceLv() if MDL.Unlock.IsUnlock(MDL.Unlock.FunctionType.Resonance) then UIUtils.SetActive(self.btn_Resonance, true) else UIUtils.SetActive(self.btn_Resonance, false) end UIUtils.SetLabel(self.txt_ResonanceLv, string.FormatByIdsId(Const_IDS["IDS_Resonance_Level"], MDL.FormationResonance.GetSubResonanceLv(resonance_info.Horse_Break))) end function UIWarHorseBreak:RefreshPanel() self:UpdateInfo(self.config, false) end function UIWarHorseBreak:UpdateInfo(config) self:StopBreakVoice() self.config = config UIUtils.SetLabel(self.txt_WarHorse, UTL.Color.FormatQualityText(UIUtils.GetLocalizedTxt(Const_IDS[config.HorseName]), config.HorseQuality)) UIUtils.SetLabel(self.txt_WarHorseTalent, config.HorseTalent) local activeInfo = MDL.WarHorse.GetInfoByID(config.HorseID) if activeInfo then local curConfig = DataSheetManager.HorseStar:GetDataByHorseID_Star(config.HorseID, activeInfo.HorseInfo.starLevel) self.StarConfig = curConfig UIUtils.SetLabel(self.txt_OldStar, string.FormatByIdsId(Const_IDS.IDS_Horse_Star_2, activeInfo.HorseInfo.starLevel)) UIUtils.SetLabel(self.txt_NextLevel, string.FormatByIdsId(Const_IDS.IDS_Horse_Star_2, activeInfo.HorseInfo.starLevel)) local nextLevel = activeInfo.HorseInfo.starLevel + 1 if CTL.WarHorse.GetNextBreakItemConfig(config.HorseID) ~= nil then self.Star:SetState(1) self.isMaxStar = false local curStage = activeInfo.HorseInfo.starStage self.obj_state:SetState(0) UIUtils.SetLabel(self.txt_NextLevel, string.FormatByIdsId(Const_IDS.IDS_Horse_Star_2, nextLevel)) --连线 for i = 1, curStage do UIUtils.SetActive(self.group_Stage[i], true) end for i = curStage + 1, #self.group_Stage do UIUtils.SetActive(self.group_Stage[i], false) end self.lines:SetState(curStage) --显示下一星属性 self:ShowNextAttr() self.txt_TitleInfo01.text = string.FormatByIdsId(Const_IDS.IDS_Horse_Star_8,nextLevel) UIUtils.SetLabel(self.txt_Info01, UTL.String.FormatCombineTextByID(curConfig.StarText)) --突破材料 self:UpdateItemInfo() --特效显示 self:PlayToBreakEffect() else --突破已满 UIUtils.SetActive(self.group_StageTitle, false) self.isMaxStar = true self.obj_state:SetState(1) local count = MDL.Bag.GetItemCount(config.PieceItem) or 0 UTL.Item.SetItemCell(self.obj_fullItem, config.PieceItem, count) self.lines:SetState(6) self.Star:SetState(0) for i = 1, #self.group_Stage do UIUtils.SetActive(self.group_Stage[i], true) end self.effect_break:SetState(Node_Effect_State.None) self.effect_toBreak:SetState(Node_Effect_State.None) end end -- 万能碎片HUD if self.config.HorseQuality == LuaConst.QualityColor.Gold then UIUtils.SetActive(self.currency_Info.gameObject, true) CTL.Currency.OpenCurrencyPanel(self.__viewClassPath, self.currency_Info, {goldWarHorseFragmentItemID}) elseif self.config.HorseQuality == LuaConst.QualityColor.DarkGold then UIUtils.SetActive(self.currency_Info.gameObject, true) CTL.Currency.OpenCurrencyPanel(self.__viewClassPath, self.currency_Info, {superGoldWarHorseFragmentItemID}) else UIUtils.SetActive(self.currency_Info.gameObject, false) end end function UIWarHorseBreak:PlayBreakEffect() local activeInfo = MDL.WarHorse.GetInfoByID(self.config.HorseID) local nextStage = activeInfo.HorseInfo.starStage + 1 if self.group_unStage[nextStage] then self.effect_break:SetState(Node_Effect_State.None) if nextStage == #self.StarConfig.AttrRepeat then self.effect_break.transform:SetParent(self.group_unStage[nextStage].transform, false) self.effect_break:SetState(Node_Effect_State.StarUp) else self.effect_break.transform:SetParent(self.group_unStage[nextStage].transform, false) self.effect_break:SetState(Node_Effect_State.StageUp) end end end function UIWarHorseBreak:PlayToBreakEffect() local activeInfo = MDL.WarHorse.GetInfoByID(self.config.HorseID) local nextStage = activeInfo.HorseInfo.starStage + 1 if self.group_unStage[nextStage] then self.effect_toBreak:SetState(Node_Effect_State.None) if nextStage == #self.StarConfig.AttrRepeat then self.effect_toBreak.transform:SetParent(self.group_unStage[nextStage].transform, false) self.effect_toBreak:SetState(Node_Effect_State.ToStarUp) self.voice_break = CTL.Sound.PlayGameSound("UI_zuoqi_tupo") CTL.Sound.PlayGameSound("UI_breakthrough_02") else self.effect_toBreak.transform:SetParent(self.group_unStage[nextStage].transform, false) self.effect_toBreak:SetState(Node_Effect_State.ToStageUp) CTL.Sound.PlayGameSound("UI_break_hores_01") end end end function UIWarHorseBreak:UpdateItemInfo() if self.config then local itemConfig = CTL.WarHorse.GetNextBreakItemConfig(self.config.HorseID) if itemConfig then self:SetCostInfo(itemConfig) end end end function UIWarHorseBreak:OnButtonClicked(comp) if self.btn_Break == comp then if self.itemNotEnough then if self.config and (self.config.HorseQuality == LuaConst.QualityColor.Gold or self.config.HorseQuality == LuaConst.QualityColor.DarkGold) then local bag1Count = MDL.Bag.GetItemCount(self.costData[1].ItemID) if bag1Count < self.costData[1].ItemNum then if self.costData[2] then local bag2Count = MDL.Bag.GetItemCount(self.costData[2].ItemID) if bag2Count >= self.costData[2].ItemNum then if self:OnWarHorseFragmentExchange(self.config, bag1Count) then return end end else if self:OnWarHorseFragmentExchange(self.config, bag1Count) then return end end end end CTL.Tips.AddTipsMsg(Const_IDS["IDS_Horse_Star_4"]) else self:PlayBreakEffect() local activeInfo = MDL.WarHorse.GetInfoByID(self.config.HorseID) local nextStage = activeInfo.HorseInfo.starStage + 1 if nextStage == #self.StarConfig.AttrRepeat then --判断大突破前延后1s self:StartRepeatFunc(self.OnLateBreakRequest, 1, 1) self.btn_Break:SetGray(true) UIUtils.SetActive(self.btn_Block, true) else MDL.WarHorse.HorseBreakRequest(self.config.HorseID) end end elseif self.group_Item[1].event_Click == comp then UTL.ItemTips.ShowCommonTipsById(self.itemId1) elseif self.group_Item[2].event_Click == comp then UTL.ItemTips.ShowCommonTipsById(self.itemId2) elseif self.btn_Enlarge == comp or self.btn_ShowSkillTips == comp then CTL.WarHorse.OpenPreviewPanel(self.config.HorseID) elseif self.obj_fullItem.event_Click == comp then UTL.ItemTips.ShowCommonTipsById(self.config.PieceItem) elseif self.btn_FullBreak == comp then CTL.Reborn.OpenRecycleFragmentView() elseif comp == self.btn_Resonance then UIManager.OpenView(Const_UI_Lua.UIEnum.UIResonanceInfo, {subResonanceID = resonance_info.Horse_Break, isShowGoto = false}) end end function UIWarHorseBreak:OnLateBreakRequest() MDL.WarHorse.HorseBreakRequest(self.config.HorseID) self.btn_Break:SetGray(false) UIUtils.SetActive(self.btn_Block, false) end --小突破属性 function UIWarHorseBreak:ShowNextAttr() if self.isMaxStar then UIUtils.SetActive(self.group_StageTitle, false) else local activeInfo = MDL.WarHorse.GetInfoByID(self.config.HorseID) local nextStage = activeInfo.HorseInfo.starStage + 1 self:ShowMiddleAttr(nextStage) end end function UIWarHorseBreak:ShowMiddleAttr(index) if self.isMaxStar then --满突破时,读上一突破的属性 local starConfig = DataSheetManager.HorseStar:GetDataByHorseID_Star(self.config.HorseID, self.StarConfig.Star - 1) local attrStr = CTL.WarHorse.GetAttrItemShow(starConfig, index) UIUtils.SetActive(self.group_StageTitle, true) self.group_StageTitle.transform:SetParent(self.group_unStage[index].transform, false) UIUtils.SetLabel(self.txt_StageAttr, attrStr) else local attrStr = CTL.WarHorse.GetAttrItemShow(self.StarConfig, index) if index <= #self.StarConfig.AttrRepeat then local activeInfo = MDL.WarHorse.GetInfoByID(self.config.HorseID) UIUtils.SetActive(self.group_StageTitle, true) self.group_StageTitle.transform:SetParent(self.group_unStage[index].transform, false) UIUtils.SetLabel(self.txt_StageAttr, attrStr) else UIUtils.SetActive(self.group_StageTitle, false) end end end function UIWarHorseBreak:OnPointerDown(comp, eventData) local index = nil for i, v in ipairs(self.group_unStage) do if v.gameObject == comp.gameObject then index = i end end self:ShowMiddleAttr(index) end function UIWarHorseBreak:OnPointerUp(comp, eventData) self:ShowNextAttr() end function UIWarHorseBreak:SetCostInfo(costData) self.itemNotEnough = false self.costData = costData UTL.Item.SetItemCell(self.group_Item[1], costData[1].ItemID, self:GetItemStr(costData[1].ItemID, costData[1].ItemNum)) self.group_Item[1].gameObject:SetActive(true) if costData[2] and costData[2].ItemID > 0 then self.itemId2 = costData[2].ItemID UTL.Item.SetItemCell(self.group_Item[2], costData[2].ItemID, self:GetItemStr(costData[2].ItemID, costData[2].ItemNum)) self.group_Item[2].gameObject:SetActive(true) else self.group_Item[2].gameObject:SetActive(false) end self.itemId1 = costData[1].ItemID if self.itemNotEnough then self.btn_Break:SetRedPoint(false) self.btn_Break:SetGray(true, true) else self.btn_Break:SetRedPoint(true) self.btn_Break:SetGray(false, true) end end function UIWarHorseBreak:GetItemStr(id, needCount) local haveCount = MDL.Bag.GetItemCount(id) if needCount <= haveCount then return UTL.Color.FormatGreenColor(haveCount) .. "/" .. needCount else self.itemNotEnough = true return UTL.Color.FormatRedColor(haveCount) .. "/" .. needCount end end function UIWarHorseBreak:StopBreakVoice() if self.voice_break then CTL.Sound.StopById(self.voice_break) self.voice_break = nil end end function UIWarHorseBreak:OnClosed() self:StopBreakVoice() end -- 万能碎片兑换 function UIWarHorseBreak:OnWarHorseFragmentExchange(horseData, bag1Count) local fragmentItemID if horseData.HorseQuality == LuaConst.QualityColor.Gold then -- 金坐骑万能碎片 fragmentItemID = goldWarHorseFragmentItemID elseif horseData.HorseQuality == LuaConst.QualityColor.DarkGold then -- 彩金坐骑万能碎片 fragmentItemID = superGoldWarHorseFragmentItemID end if MDL.Bag.GetItemCount(fragmentItemID) > 0 then -- 兑换弹窗 UIManager.OpenView(Const_UI_Lua.UIEnum.UICommonExchange, {costItemId = fragmentItemID, giveItemId = self.costData[1].ItemID, needCount = self.costData[1].ItemNum - bag1Count}) return true end return false end return UIWarHorseBreak