--[[ 神兽突破界面 ]]-- local resonance_info = require 'Proto/resonance_info_pb' local UIGodBeastBreak = UIViewClass() local BreakState = MDL.GodBeast.BreakState local MAX_FRAGMENT_COUNT = 4 local GoldGodBeastFragmentItemID = 305 local SuperGoldGodBeastFragmentItemID = 405 function UIGodBeastBreak:OnOpened(context) self:RegistSystemEvent(EventID.UI_GodBeastRefresh, self.RefreshPanel) CTL.Bag.RegisteEventByItemType(LuaConst.ItemType.GodBeast, self.RefreshPanel, self) self.config = context.config self.curSelectArea = 1 self.lastStarLevel = -1 self.breakBtnLock = false self:RefreshPanel() if self.config.GodBeastQuality == LuaConst.QualityColor.Gold then UIUtils.SetActive(self.currency_Info, true) CTL.Currency.OpenCurrencyPanel(self.__viewClassPath, self.currency_Info, {GoldGodBeastFragmentItemID}) elseif self.config.GodBeastQuality == LuaConst.QualityColor.DarkGold then UIUtils.SetActive(self.currency_Info, true) CTL.Currency.OpenCurrencyPanel(self.__viewClassPath, self.currency_Info, {SuperGoldGodBeastFragmentItemID}) else UIUtils.SetActive(self.currency_Info, false) end end function UIGodBeastBreak:OnClosed() CTL.Bag.UnRegisteEventByItemType(LuaConst.ItemType.GodBeast, self.RefreshPanel, self) end function UIGodBeastBreak:RefreshPanel() self.developInfo = MDL.GodBeast.GetGodBeastInfoByID(self.config.ID) self.breakStarData = DataSheetManager.GodBeastStar:GetDataByID_Star(self.config.ID, self.developInfo.starLevel) self.breakState = MDL.GodBeast.GetBreakStateInfo(self.config.ID) self:RefreshTopBtnGroup() self:UpdateTopInfo() self:UpdateBottomInfo() end function UIGodBeastBreak:UpdateTopInfo() -- 命轮几重 UIUtils.SetLabel(self.txt_Break, string.FormatByIdsId(Const_IDS.IDS_Godbeast_FateWheelLevel1, self.breakStarData.Star)) -- 资质 UIUtils.SetLabel(self.txt_GodBeastTalent, self.config.GodBeastTalent) -- 姓名 UIUtils.SetLabel(self.txt_BeastName, UTL.Color.FormatQualityText(UIUtils.GetLocalizedTxt(Const_IDS[self.config.GodBeastName]), self.config.GodBeastQuality)) -- 纳灵 UIUtils.SetLabel(self.txt_ResonanceLv, string.FormatByIdsId(Const_IDS["IDS_Resonance_Level"], MDL.FormationResonance.GetSubResonanceLv(resonance_info.GodBeast_Break))) end function UIGodBeastBreak:RefreshTopBtnGroup() self.fragmentCount = self.breakStarData.WheelTpyeNum local groupCompUse if self.fragmentCount == 0 then -- 突破到最大上限 self.fragmentCount = MAX_FRAGMENT_COUNT groupCompUse = self.group_Stage4 self:SetPieceStage(groupCompUse, true) else if self.fragmentCount == 1 then groupCompUse = self.group_Stage1 elseif self.fragmentCount == 2 then groupCompUse = self.group_Stage2 elseif self.fragmentCount == 3 then groupCompUse = self.group_Stage3 elseif self.fragmentCount == 4 then groupCompUse = self.group_Stage4 end self:SetPieceStage(groupCompUse, false) end self:UpdateCurSelect(self:GetNextAvailableBreakIndex()) self.state_Stage:SetState(self.fragmentCount - 1) end function UIGodBeastBreak:SetAttrTextByArea(index, attrCollection, info) UIUtils.SetLabelText(attrCollection.txt_StageTitle, Const_IDS[DataSheetManager.AttrData:GetDataByID(CTL.GodBeast.BREAK_ORDER_INDEX[index]).Name]) if info.pointNums > 0 then local total = 0 for i = 1, info.pointNums do local excelData = DataSheetManager.GodBeastWheelAttr:GetDataByID_AreaId_PointId(self.breakStarData.WheelAttr, info.areaId, i) total = total + excelData.AttrNum end UIUtils.SetLabel(attrCollection.txt_StageAttr, "+" .. total) else UIUtils.SetLabel(attrCollection.txt_StageAttr, nil) end end function UIGodBeastBreak:SetMaxBreakText(areaID, attrCollection) UIUtils.SetLabelText(attrCollection.txt_StageTitle, Const_IDS[DataSheetManager.AttrData:GetDataByID(CTL.GodBeast.BREAK_ORDER_INDEX[areaID]).Name]) if self.developInfo.starLevel - 1 > 0 then local beastStarLast = DataSheetManager.GodBeastStar:GetDataByID_Star(self.config.ID, self.developInfo.starLevel - 1) local total = 0 for i, v in DataSheetManager.GodBeastWheelAttr:GetDataByID_AreaId_PointId(beastStarLast.WheelAttr, areaID) do total = total + v.AttrNum end UIUtils.SetLabel(attrCollection.txt_StageAttr, "+" .. total) end end function UIGodBeastBreak:SetPieceStage(groupCompUse, isMax) if isMax then for idx, v in ipairs(CTL.GodBeast.BREAK_ORDER_INDEX) do self:SetMaxBreakText(idx, self.group_Top[idx], {areaId = idx, pointNums = MAX_FRAGMENT_COUNT}) local areaArr = groupCompUse[idx] for activeIndex = 1, MAX_FRAGMENT_COUNT do UIUtils.SetActive(areaArr[activeIndex].gameObject, true) end UIUtils.SetActive(self.effect_Group_Activated[idx].gameObject, true) end else for idx, info in ipairs(self.developInfo.breakInfo) do -- 设置每边的属性 self:SetAttrTextByArea(info.areaId, self.group_Top[info.areaId], info) -- 全部点亮时显示特效 UIUtils.SetActive(self.effect_Group_Activated[info.areaId].gameObject, info.pointNums >= self.fragmentCount and true or false) if info.pointNums == 0 then for _, activePiece in ipairs(groupCompUse[info.areaId]) do UIUtils.SetActive(activePiece.gameObject, false) end else -- groupCompUse[info.areaId][pointNums] -- 亮几格 local areaArr = groupCompUse[info.areaId] for i, v in ipairs(areaArr) do if i <= info.pointNums then UIUtils.SetActive(v.gameObject, true) else UIUtils.SetActive(v.gameObject, false) end end end end -- 设置选中 self:UpdateCurSelect(self.curSelectArea) end end function UIGodBeastBreak:UpdateBottomInfo() local info = MDL.GodBeast.GetGodBeastInfoByID(self.config.ID) if self.breakState == BreakState.max then -- 命轮满 self.obj_state:SetState(1) self.Star_Bg:SetState(0) -- 命轮背景显示 UTL.Item.SetItemCell(self.obj_fullItem, self.config.PieceItem, MDL.Bag.GetItemCount(self.config.Item_Table[1].ItemID)) else self.obj_state:SetState(0) self.Star_Bg:SetState(1) -- 命轮背景显示 -- 命轮title UIUtils.SetLabel(self.txt_TitleInfo01, string.FormatByIdsId(Const_IDS.IDS_Godbeast_FateWheelLevel2, self.breakStarData.Star + 1)) if self.breakState == BreakState.smallBreak then self.activeItemTb = DataSheetManager.GodBeastStarItemRepeat:GetDataByID(self.breakStarData.WheelCostRepeatID).Item_Table UIUtils.SetLabelText(self.lab_Break, Const_IDS.IDS_Godbeast_FateWheelLevel3) elseif self.breakState == BreakState.bigBreak then self.activeItemTb = DataSheetManager.GodBeastStarItemRepeat:GetDataByID(self.breakStarData.StarCostRepeatID).Item_Table UIUtils.SetLabelText(self.lab_Break, Const_IDS.IDS_Godbeast_FateWheelLevel4) end -- 命轮属性描述 local starAttrTab = DataSheetManager.GodBeastStarAttr:GetDataByID(self.breakStarData.StarAttr).Attr_Table for i = 1, 3 do UIUtils.SetLabel(self.group_Attr[i], UTL.Attr.GetAttrText(starAttrTab[i].AttrType, starAttrTab[i].AttrNum)) end self:UpdateCostItem(self.activeItemTb) -- 天赋点 local breakStarData = DataSheetManager.GodBeastStar:GetDataByID_Star(self.config.ID, info.starLevel) UIUtils.SetLabel(self.group_Attr[#self.group_Attr], string.FormatByIdsId(Const_IDS.IDS_Godbeast_Talent12, breakStarData.SkillPoint)) end -- 突破按钮红点 self.btn_Break:SetRedPoint(MDL.GodBeast.CanBreak(self.config.ID)) end -- 设置激活道具图标 function UIGodBeastBreak:UpdateCostItem(costItemTb) self.isEnough = true for i, item in ipairs(costItemTb) do local count = MDL.Bag.GetItemCount(item.ItemID) local isItemEnough = count >= item.ItemNum if not isItemEnough then self.isEnough = false end local contentItem = self.group_Item[i] if not contentItem then contentItem = self:InstantiateCollection(self.group_Item, self.ItemTemplate.gameObject) end UTL.Item.SetItemCell( contentItem, item.ItemID, isItemEnough and UTL.Color.FormatGreenColor(count) .. "/" .. item.ItemNum or UTL.Color.FormatRedColor(count) .. "/" .. item.ItemNum ) UIUtils.SetActive(contentItem.gameObject, true) end for i = #self.group_Item, #costItemTb + 1, -1 do UIUtils.SetActive(self.group_Item[i].gameObject, false) end end function UIGodBeastBreak:UpdateCurSelect(index) if index == -1 then self.group_Choosed.state_Choosed:SetState(6) else self.group_Choosed.state_Choosed:SetState(index - 1) self.curSelectArea = index end end function UIGodBeastBreak:GetNextAvailableBreakIndex() if MDL.GodBeast.GetBreakCountByArea(self.config.ID, self.curSelectArea) >= self.fragmentCount then for i, v in ipairs(self.developInfo.breakInfo) do if v.pointNums < self.fragmentCount then return v.areaId end end end return self.curSelectArea end function UIGodBeastBreak:OnClickBreak() if not self.isEnough then if self.config.GodBeastQuality == LuaConst.QualityColor.Gold or self.config.GodBeastQuality == LuaConst.QualityColor.DarkGold then local bag1Count = MDL.Bag.GetItemCount(self.activeItemTb[1].ItemID) if bag1Count < self.activeItemTb[1].ItemNum then if self.activeItemTb[2] then local bag2Count = MDL.Bag.GetItemCount(self.activeItemTb[2].ItemID) if bag2Count >= self.activeItemTb[2].ItemNum then if self:OnGodBeastFragmentExchange(self.config, bag1Count) then return end end else if self:OnGodBeastFragmentExchange(self.config, bag1Count) then return end end end end CTL.Tips.AddTipsMsg(Const_IDS.IDS_Godbeast_FateWheelLevel5) return end if self.breakState == BreakState.smallBreak then if MDL.GodBeast.GetBreakCountByArea(self.config.ID, self.curSelectArea) >= self.fragmentCount then self:UpdateCurSelect(self:GetNextAvailableBreakIndex()) end self.effect_Group_Break[self.curSelectArea]:PlayUIEffect() MDL.GodBeast.GodBeastBreakReq(self.config.ID, self.curSelectArea) CTL.Sound.PlayGameSound("UI_breakout_01") elseif self.breakState == BreakState.bigBreak then if not self.breakBtnLock then self.breakBtnLock = true self.effect_Group_Break[#self.effect_Group_Break]:PlayUIEffect() self:UpdateCurSelect(1) self:StartRepeatFunc(self.OnLateBigBreak, CTL.GodBeast.LATE_EXECUTE_SECOND, 1) CTL.Sound.PlayGameSound("UI_breakout_01") end end end function UIGodBeastBreak:OnLateBigBreak() MDL.GodBeast.GodBeastBreakReq(self.config.ID, 0) self.breakBtnLock = false end --region -------------------------------------- 系统函数 ------------------------------------- function UIGodBeastBreak:OnButtonClicked(comp) if comp == self.btn_Break then self:OnClickBreak() elseif comp == self.btn_Resonance then UIManager.OpenView(Const_UI_Lua.UIEnum.UIResonanceInfo, {subResonanceID = resonance_info.GodBeast_Break, isShowGoto = false}) elseif comp == self.btn_Enlarge then UIManager.OpenView(Const_UI_Lua.UIEnum.UIGodBeastBreakDetail, {ID = self.config.ID}, Const_UI_Lua.UIEnum.UIHeroInfoView) elseif comp == self.btn_FullBreak then CTL.Reborn.OpenRecycleFragmentView() else if comp == self.obj_fullItem.event_Click then UTL.ItemTips.ShowCommonTipsById(self.config.Item_Table[1].ItemID) return end for i, v in ipairs(self.group_BtnStage) do if comp == v then self:UpdateCurSelect(i) return end end for i, v in ipairs(self.group_Item) do if comp == v.event_Click then UTL.ItemTips.ShowCommonTipsById(self.activeItemTb[i].ItemID) return end end end end function UIGodBeastBreak:OnGodBeastFragmentExchange(godBeasteData, bag1Count) local fragmentItemID if godBeasteData.GodBeastQuality == LuaConst.QualityColor.Gold then fragmentItemID = GoldGodBeastFragmentItemID elseif godBeasteData.GodBeastQuality == LuaConst.QualityColor.DarkGold then fragmentItemID = SuperGoldGodBeastFragmentItemID end if MDL.Bag.GetItemCount(fragmentItemID) > 0 then -- 兑换弹窗 UIManager.OpenView(Const_UI_Lua.UIEnum.UICommonExchange, {costItemId = fragmentItemID, giveItemId = self.activeItemTb[1].ItemID, needCount = self.activeItemTb[1].ItemNum - bag1Count}) return true end return false end --endregion return UIGodBeastBreak