local UITreasureBreak = UIViewClass() local resonance_info = require 'Proto/resonance_info_pb' local goldTreasureFragmentItemID = 304 -- 金宝物万能碎片 local superGoldTreasureFragmentItemID = 404 -- 彩金宝物万能碎片 local Node_Effect_State = { StageUp = 0, --小突破 StarUp = 1, --大突破 ToStageUp = 0, --待小突破 ToStarUp = 1, --待大突破 None = 2, } function UITreasureBreak:OnOpened(context) self:RegistSystemEvent(EventID.BagItem_Update, self.UpdateItemInfo) self:RegistSystemEvent(EventID.UI_UpdateTreasureInfo, self.RefreshPanel) self:RegistSystemEvent(EventID.UI_ResonanceChange_Refresh, self.RefreshResonanceLv) -- 设置共鸣 self:RefreshResonanceLv() CTL.FormationResonance.SetSubResonanceImage(self.icon_Resonance, resonance_info.Treasure_Break) -- 设置共鸣图片 -- 设置点击小节点显隐节点属性加成信息 for i, v in ipairs(self.group_UnStage) do self:RegistTriggerEvent(v, UIEventTriggerType.PointerDown) self:RegistTriggerEvent(v, UIEventTriggerType.PointerUp) end self:RefreshTreasureInfo(context.treasureId) end --region ************** 界面刷新 ********************** ---@public 设置共鸣显示 function UITreasureBreak:RefreshResonanceLv() UIUtils.SetActive(self.btn_Resonance, MDL.Unlock.IsUnlock(MDL.Unlock.FunctionType.Resonance)) UIUtils.SetLabel(self.txt_ResonanceLv, string.FormatByIdsId(Const_IDS["IDS_Resonance_Level"], MDL.FormationResonance.GetSubResonanceLv(resonance_info.Treasure_Break))) end ---@public 刷新界面显示 function UITreasureBreak:RefreshPanel() self:RefreshTreasureInfo(self.treasureData.TreasureID) end ---@public 突破材料数量变化刷新显示 function UITreasureBreak:UpdateItemInfo() if self.treasureData then local itemConfig = CTL.Treasure.GetNextBreakItemData(self.treasureData.TreasureID) if itemConfig then self:SetCostInfo(itemConfig) end end end --endregion ************** 界面刷新 ********************** function UITreasureBreak:RefreshTreasureInfo(treasureId) self:StopBreakVoice() if not treasureId then return end local activeInfo = MDL.Treasure.GetTreasureInfo(treasureId) self.treasureData = activeInfo.TreasureData self.treasureId = treasureId or self.treasureId local treasureCfgData = DataSheetManager.TreasureData:GetDataByTreasureID(treasureId) UIUtils.SetLabel(self.txt_TreasureTalent, treasureCfgData.TreasureTalent) UIUtils.SetLabel(self.lab_TreasureName, UTL.Color.FormatQualityText(UIUtils.GetLocalizedTxt(Const_IDS[treasureCfgData.TreasureName]), treasureCfgData.TreasureQuality)) -- 宝物名 UIUtils.SetLabel(self.txt_Break, activeInfo and string.format(UIUtils.GetLocalizedTxt(Const_IDS.IDS_Handbook_Hero_BreakLevel), activeInfo.TreasureInfo.starLevel) or "") -- 突破等级 if activeInfo then local curConfig = DataSheetManager.TreasureStar:GetDataByTreasureID_Star(self.treasureData.TreasureID, activeInfo.TreasureInfo.starLevel) self.StarConfig = curConfig UIUtils.SetLabel(self.txt_OldStar, string.FormatByIdsId(Const_IDS.IDS_Horse_Star_2, activeInfo.TreasureInfo.starLevel)) local nextLevel = activeInfo.TreasureInfo.starLevel + 1 if CTL.Treasure.GetNextBreakItemData(self.treasureData.TreasureID) ~= nil then self.Star:SetState(1) self.isMaxStar = false local curStage = activeInfo.TreasureInfo.starStage self.obj_state:SetState(0) UIUtils.SetLabel(self.txt_NewStar, 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:ShowNextBreakSkill() --突破材料 self:UpdateItemInfo() --特效显示 self:PlayToBreakEffect() UIUtils.SetActive(self.img_line,true) else --突破已满 self.isMaxStar = true self.obj_state:SetState(1) local count = MDL.Bag.GetItemCount(treasureCfgData.PieceItem) or 0 UTL.Item.SetItemCell(self.obj_fullItem, treasureCfgData.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) UIUtils.SetActive(self.img_line,false) UIUtils.SetActive(self.group_NextLevel.gameObject, false) UIUtils.SetActive(self.group_StageTitle.gameObject, false) end end -- 万能碎片HUD if self.treasureData.TreasureQuality == LuaConst.QualityColor.Gold then UIUtils.SetActive(self.currency_Info.gameObject, true) CTL.Currency.OpenCurrencyPanel(self.__viewClassPath, self.currency_Info, {goldTreasureFragmentItemID}) elseif self.treasureData.TreasureQuality == LuaConst.QualityColor.DarkGold then UIUtils.SetActive(self.currency_Info.gameObject, true) CTL.Currency.OpenCurrencyPanel(self.__viewClassPath, self.currency_Info, {superGoldTreasureFragmentItemID}) else UIUtils.SetActive(self.currency_Info.gameObject, false) end end function UITreasureBreak:ShowNextBreakSkill() local activeInfo = MDL.Treasure.GetTreasureInfo(self.treasureData.TreasureID) local starLevel = activeInfo.TreasureInfo.starLevel local starData, starType = CTL.Treasure.GetBreakSkillDataAndType(self.treasureData.TreasureID, starLevel) self.txt_BreakTitle.text = string.FormatByIdsId(Const_IDS.IDS_Horse_Star_8, starLevel + 1) if starType == LuaConst.UIBreakStarType.Attrs then self.state_BreakInfo:SetState(1) local attrText = CTL.Treasure.GetTreasureBreakAttrTextList(self.treasureData.TreasureID, starLevel, UTL.Color.Green) for k,v in ipairs(self.group_Attr) do UIUtils.SetLabel(v, attrText[k]) end else self.state_BreakInfo:SetState(0) local treasureStarData = DataSheetManager.TreasureStar:GetDataByTreasureID_Star(self.treasureData.TreasureID, activeInfo.TreasureInfo.starLevel - 1) local treasureSkillData = DataSheetManager.TreasureSkillData:GetDataByTreasureSkill(treasureStarData.TreasureSkill) UIUtils.SetImageByAssetBundle(self.img_StarSkill, treasureSkillData.TreasureSkillIcon) UIUtils.SetLabel(self.txt_SkillName, string.format(UIUtils.GetLocalizedTxt(Const_IDS.IDS_BreakThrough_SkillName), UIUtils.GetLocalizedTxt(Const_IDS[treasureSkillData.TreasureSkillName]))) UIUtils.SetLabel(self.txt_LevelNow, string.format(UIUtils.GetLocalizedTxt(Const_IDS.IDS_BreakThrough_Level), treasureSkillData.SkillLevel)) UIUtils.SetLabel(self.txt_LevelNext, string.format(UIUtils.GetLocalizedTxt(Const_IDS.IDS_BreakThrough_Level), treasureSkillData.SkillLevel + 1)) end end function UITreasureBreak:PlayBreakEffect() local activeInfo = MDL.Treasure.GetTreasureInfo(self.treasureData.TreasureID) local nextStage = activeInfo.TreasureInfo.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) CTL.Sound.PlayGameSound("UI_breakthrough_02") else self.effect_break.transform:SetParent(self.group_UnStage[nextStage].transform, false) self.effect_break:SetState(Node_Effect_State.StageUp) CTL.Sound.PlayGameSound("UI_breakthrough_01") end end end function UITreasureBreak:PlayToBreakEffect() local activeInfo = MDL.Treasure.GetTreasureInfo(self.treasureData.TreasureID) local nextStage = activeInfo.TreasureInfo.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") 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 UITreasureBreak:OnButtonClicked(comp) if self.btn_Break == comp then if self.itemNotEnough then if self.treasureData and (self.treasureData.TreasureQuality == LuaConst.QualityColor.Gold or self.treasureData.TreasureQuality == 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:OnTreasureFragmentExchange(self.treasureData, bag1Count) then return end end else if self:OnTreasureFragmentExchange(self.treasureData, bag1Count) then return end end end end CTL.Tips.AddTipsMsg(Const_IDS["IDS_Horse_Star_4"]) else self:PlayBreakEffect() local activeInfo = MDL.Treasure.GetTreasureInfo(self.treasureData.TreasureID).TreasureInfo local starStage = activeInfo.starStage if starStage then local starData = DataSheetManager.TreasureStar:GetDataByTreasureID_Star(self.treasureData.TreasureID, activeInfo.starLevel) local stageNum = #starData.AttrRepeat if stageNum - 1 == starStage then self:StartRepeatFunc(self.OnUpdateFun, 1) self.btn_Break:SetGray(true) self.Loc_ChangeColor:SetState(1) UIUtils.SetActive(self.btn_Block.gameObject, true) return end end MDL.Treasure.TreasureBreakReq(self.treasureData.TreasureID) 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 UIManager.OpenView(Const_UI_Lua.UIEnum.UITreasureBreakDetail, {treasureId = self.treasureData.TreasureID}, "HeroShow/UIHeroInfoView") elseif self.obj_fullItem.event_Click == comp then local treasureCfgData = DataSheetManager.TreasureData:GetDataByTreasureID(self.treasureData.TreasureID) UTL.ItemTips.ShowCommonTipsById(treasureCfgData.PieceItem) elseif self.btn_FullBreak == comp then CTL.Reborn.OpenRecycleFragmentView() elseif self.btn_Resonance == comp then UIManager.OpenView(Const_UI_Lua.UIEnum.UIResonanceInfo, {subResonanceID = resonance_info.Treasure_Break, isShowGoto = false}) end end function UITreasureBreak:OnUpdateFun(deltaTime, timeSinceUpdate) MDL.Treasure.TreasureBreakReq(self.treasureData.TreasureID) self.btn_Break:SetGray(false) self.Loc_ChangeColor:SetState(0) self:StopRepeatFunc(self.OnUpdateFun) UIUtils.SetActive(self.btn_Block.gameObject, false) end --小突破属性 function UITreasureBreak:ShowNextAttr() if self.isMaxStar then UIUtils.SetActive(self.group_StageTitle.gameObject, false) UIUtils.SetActive(self.group_NextLevel.gameObject, false) else local activeInfo = MDL.Treasure.GetTreasureInfo(self.treasureData.TreasureID) local nextStage = activeInfo.TreasureInfo.starStage + 1 self:ShowMiddleAttr(nextStage) end end function UITreasureBreak:ShowMiddleAttr(index) if self.isMaxStar then --满突破时,读上一突破的属性 local starConfig = DataSheetManager.TreasureStar:GetDataByTreasureID_Star(self.treasureData.TreasureID, self.StarConfig.Star - 1) local attrStr = CTL.Treasure.GetAttrItemShow(starConfig, index) UIUtils.SetActive(self.group_StageTitle.gameObject, true) self.group_StageTitle.transform:SetParent(self.group_UnStage[index].transform, false) UIUtils.SetLabel(self.txt_StageAttr, attrStr) else local activeInfo = MDL.Treasure.GetTreasureInfo(self.treasureData.TreasureID) UIUtils.SetLabel(self.txt_NextLevel, string.FormatByIdsId(Const_IDS.IDS_Horse_Star_2, activeInfo.TreasureInfo.starLevel + 1)) local attrStr = CTL.Treasure.GetAttrItemShow(self.StarConfig, index) if index == #self.StarConfig.AttrRepeat then UIUtils.SetActive(self.group_StageTitle.gameObject, false) UIUtils.SetLabel(self.txt_StarNum, attrStr) else UIUtils.SetLabel(self.txt_StarNum, nil) UIUtils.SetActive(self.group_StageTitle.gameObject, true) self.group_StageTitle.transform:SetParent(self.group_UnStage[index].transform, false) UIUtils.SetLabel(self.txt_StageAttr, attrStr) end end end function UITreasureBreak: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 UITreasureBreak:OnPointerUp(comp, eventData) self:ShowNextAttr() end function UITreasureBreak: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) self.Loc_ChangeColor:SetState(1) else self.btn_Break:SetRedPoint(true) self.btn_Break:SetGray(false, true) self.Loc_ChangeColor:SetState(0) end end function UITreasureBreak: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 UITreasureBreak:StopBreakVoice() if self.voice_break then CTL.Sound.StopById(self.voice_break) self.voice_break = nil end end function UITreasureBreak:OnClosed() self:StopBreakVoice() end -- 万能碎片兑换 function UITreasureBreak:OnTreasureFragmentExchange(treasureData, bag1Count) local fragmentItemID if treasureData.TreasureQuality == LuaConst.QualityColor.Gold then -- 金宝物万能碎片 fragmentItemID = goldTreasureFragmentItemID elseif treasureData.TreasureQuality == LuaConst.QualityColor.DarkGold then -- 彩金宝物万能碎片 fragmentItemID = superGoldTreasureFragmentItemID 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 UITreasureBreak