local UIHeroStrenthen = UIViewClass() local SoulTab = 0 -- 选中魂时的tabIndex local TypeIcon = { [SoulTab] = "wjxl_msz_po.png", [MDL.HeroStrenthen.NurturingType.Power] = "wjxl_msz_li.png", [MDL.HeroStrenthen.NurturingType.Physical] = "wjxl_msz_ti.png", [MDL.HeroStrenthen.NurturingType.Skill] = "wjxl_msz_ji.png", } local TypeIconBg = { [SoulTab] = ConstAssetPathConfig.Path31, [MDL.HeroStrenthen.NurturingType.Power] = ConstAssetPathConfig.AssetPath142, [MDL.HeroStrenthen.NurturingType.Physical] = ConstAssetPathConfig.AssetPath143, [MDL.HeroStrenthen.NurturingType.Skill] = ConstAssetPathConfig.AssetPath144, } local BaseAttrAddIds = { "IDS_AttrName_basicatk_percent", "IDS_AttrName_basichplmt_percent", "IDS_AttrName_basicdef_percent", } -------------------- function UIHeroStrenthen:OnOpened(context) self:RegistSystemEvent(EventID.BagItem_Update, self.RefreshStrenthenMaterialState) -- 背包物品刷新 self:RegistSystemEvent(EventID.BagItem_Update, self.RefreshStrenthenRedPoint) -- 刷新红点 self:RegistSystemEvent(EventID.Strenthen_RefreshProgressAndLevel, self.RefreshStrenthenProgressAndLevel) -- 进度 or 等级刷新 self:RegistSystemEvent(EventID.Strenthen_RefreshProgressAndLevel, self.RefreshStrenthenState) -- 进度 or 等级刷新 self:RegistSystemEvent(EventID.Strenthen_RefreshProgressAndLevel, self.RefreshStrenthenMaterialState) -- 背包物品刷新 self:RegistSystemEvent(EventID.Strenthen_RefreshProgressAndLevel, self.RefreshStrenthenRedPoint) -- 刷新红点 self.selectTab = -1 self.curHeroId = MDL.HeroSelect.curSelectHeroID self:InitPanel() end function UIHeroStrenthen:OnButtonClicked(comp) if comp == self.group_Power.btn_Info then -- 力 self.selectTab = MDL.HeroStrenthen.NurturingType.Power self:RefreshStrenthenState() self:RefreshStrenthenMaterialState() elseif comp == self.group_Physical.btn_Info then -- 体 self.selectTab = MDL.HeroStrenthen.NurturingType.Physical self:RefreshStrenthenState() self:RefreshStrenthenMaterialState() elseif comp == self.group_Skill.btn_Info then -- 技 self.selectTab = MDL.HeroStrenthen.NurturingType.Skill self:RefreshStrenthenState() self:RefreshStrenthenMaterialState() elseif comp == self.group_StagePo.btn_StagePo then -- 魂 self.selectTab = SoulTab self:RefreshStrenthenState() self:RefreshStrenthenMaterialState() elseif comp == self.btn_Strenthen then if self.selectTab == SoulTab then MDL.HeroStrenthen.BreakStrengthenReq(self.curHeroId) else MDL.HeroStrenthen.StriveStrengthenReq(self.curHeroId, self.selectTab) end end end function UIHeroStrenthen:OnCellInit(scrollRect, index, cellTable, data) if scrollRect == self.loop_RewardScroll then local count = MDL.Bag.GetItemCount(data.ItemID) local str if count < data.ItemNum then str = string.format("%s/%s", UTL.Color.FormatRedColor(count), data.ItemNum) else str = string.format("%s/%s", UTL.Color.FormatGreenColor(count), data.ItemNum) end UTL.Item.SetItemCell(cellTable.item, data.ItemID, str) end end function UIHeroStrenthen:OnCellClicked(scrollRect, index, cellTable, target, data) if scrollRect == self.loop_RewardScroll then if target == cellTable.item.event_Click then UTL.ItemTips.ShowCommonTipsById(data.ItemID) end end end -------------------- function UIHeroStrenthen:InitPanel() UIUtils.SetLocalizationImage(self.group_StagePo.img_Po_Txt, TypeIcon[SoulTab]) UIUtils.SetLocalizationImage(self.group_Power.img_Attr_Txt, TypeIcon[MDL.HeroStrenthen.NurturingType.Power]) UIUtils.SetLocalizationImage(self.group_Physical.img_Attr_Txt, TypeIcon[MDL.HeroStrenthen.NurturingType.Physical]) UIUtils.SetLocalizationImage(self.group_Skill.img_Attr_Txt, TypeIcon[MDL.HeroStrenthen.NurturingType.Skill]) self:RefreshStrenthenProgressAndLevel() self:RefreshStrenthenState() self:RefreshStrenthenMaterialState() self:RefreshStrenthenRedPoint() end function UIHeroStrenthen:RefreshStrenthenProgressAndLevel() -- 设置下一个修炼位置 self:SetDefaultSelect() -- 设置力、体、技数据 self:SetNurturingAreaData(self.group_Power, MDL.HeroStrenthen.NurturingType.Power) self:SetNurturingAreaData(self.group_Physical, MDL.HeroStrenthen.NurturingType.Physical) self:SetNurturingAreaData(self.group_Skill, MDL.HeroStrenthen.NurturingType.Skill) -- 总区域设置 self:SetSoulAreaData() -- 设置等级 local curLevel = MDL.HeroStrenthen.GetStrengthenLevel(self.curHeroId) local curStrenthenNameData = DataSheetManager.StrenthenName:GetDataByStrentheneLevel(curLevel) local __, nextStrenthenNameData = DataSheetManager.StrenthenName:TryGetDataByStrentheneLevel(curLevel + 1) if nextStrenthenNameData then self.obj_titleState:SetState(0) UIUtils.SetLabelText(self.txt_NewStar, Const_IDS[nextStrenthenNameData.Name]) else self.obj_titleState:SetState(1) end UIUtils.SetLabelText(self.txt_OldStar, Const_IDS[curStrenthenNameData.Name]) -- 设置是否激活线 if curLevel > 0 then self.obj_LineState:SetState(0) else self.obj_LineState:SetState(1) end end function UIHeroStrenthen:RefreshStrenthenState() if self.selectTab == SoulTab then UIUtils.SetActive(self.Info_Po_Attr.gameObject, true) UIUtils.SetActive(self.Info_Process_Attr, false) local curLevel = MDL.HeroStrenthen.GetStrengthenLevel(self.curHeroId) local curHeroStrenthenData = MDL.HeroStrenthen.GetHeroStrenthenData(self.curHeroId, curLevel) local nextHeroStrenthenData = MDL.HeroStrenthen.GetHeroStrenthenData(self.curHeroId, curLevel + 1) if curLevel == 0 then for i, v in ipairs(self.Info_Po_Attr) do local nextAttrData = nextHeroStrenthenData.FirstAttr_Table[i] UIUtils.SetLabel(v.lab_Old, UTL.Attr.GetAttrText(nextAttrData.FirstAttrType, 0)) UIUtils.SetActive(v.img_Arrow, true) UIUtils.SetActive(v.lab_New, true) UIUtils.SetLabel(v.lab_New, UTL.Attr.GetAttrText(nextAttrData.FirstAttrType, nextAttrData.FirstAttrNum, "E8D588")) end UIUtils.SetActive(self.obj_hintRoot, false) else for i, v in ipairs(self.Info_Po_Attr) do local curAttrNum = curHeroStrenthenData["AttrNum" .. i] local nextAttrNum if nextHeroStrenthenData then nextAttrNum = nextHeroStrenthenData["AttrNum" .. i] end local str if curAttrNum then str = string.format("%s+%s", UIUtils.GetLocalizedTxt(Const_IDS[BaseAttrAddIds[i]]), UTL.Attr.FormatNumberToPercentage(curAttrNum, 1)) else str = string.format("%s+%s", UIUtils.GetLocalizedTxt(Const_IDS[BaseAttrAddIds[i]]), UTL.Attr.FormatNumberToPercentage(nextAttrNum, 1)) end UIUtils.SetLabel(v.lab_Old, str) if nextAttrNum then UIUtils.SetActive(v.img_Arrow, true) UIUtils.SetActive(v.lab_New, true) UIUtils.SetLabel(v.lab_New, UTL.Attr.FormatNumberToPercentage(nextAttrNum, 1)) else UIUtils.SetActive(v.img_Arrow, false) UIUtils.SetActive(v.lab_New, false) end end UIUtils.SetActive(self.obj_hintRoot, true) end else UIUtils.SetActive(self.Info_Po_Attr.gameObject, false) UIUtils.SetActive(self.obj_hintRoot, false) UIUtils.SetActive(self.Info_Process_Attr, true) UIUtils.SetLocalizationImage(self.img_Txt, TypeIcon[self.selectTab]) UIUtils.SetImageByAssetBundle(self.img_BG, TypeIconBg[self.selectTab]) local curLevel = MDL.HeroStrenthen.GetStrengthenLevel(self.curHeroId) UIUtils.SetLabel(self.txt_Lv, curLevel) -- 显示进度 local lastAttrTotalNum = 0 local lastNurturingData = MDL.HeroStrenthen.GetStrenthenNurturingData(self.curHeroId, self.selectTab, curLevel - 1) if lastNurturingData then lastAttrTotalNum = lastNurturingData.AttrTotalNum end local attrNum, attrTotalNum = CTL.HeroStrenthen.GetCurAndMaxAttrNum(self.curHeroId, self.selectTab) if attrTotalNum == lastAttrTotalNum then UIUtils.SetAtlasImageFillAmount(self.slider_XP, 1) UIUtils.SetLabelText(self.txt_XP, Const_IDS.IDS_GuildBoss_EmptyText) else UIUtils.SetAtlasImageFillAmount(self.slider_XP, (attrNum - lastAttrTotalNum) / (attrTotalNum - lastAttrTotalNum)) -- 将进度折算成次数显示 local curNurturingData = MDL.HeroStrenthen.GetStrenthenNurturingData(self.curHeroId, self.selectTab, curLevel) UIUtils.SetLabel(self.txt_XP, string.format("%s/%s", (attrNum - lastAttrTotalNum) / curNurturingData.AttrAddNum, (attrTotalNum - lastAttrTotalNum) / curNurturingData.AttrAddNum)) end -- 显示属性 local attrType = DataSheetManager.StrenthenAttrID:GetDataByID(self.selectTab) UIUtils.SetLabel(self.lab_01, UTL.Attr.GetAttrText(attrType.AttrID, math.floor(attrNum + MDL.HeroStrenthen.GetActivateAttrNumByType(self.curHeroId, attrType.AttrID)))) -- 设置下一级属性 local nextNurturingData = MDL.HeroStrenthen.GetStrenthenNurturingData(self.curHeroId, self.selectTab, curLevel + 1) if nextNurturingData then UIUtils.SetActive(self.img_Arrow, true) UIUtils.SetLabel(self.lab_1, string.FormatByIdsId(Const_IDS.IDS_TalentSkill_Level, curLevel)) UIUtils.SetLabel(self.lab_02, UTL.Attr.GetAttrText(attrType.AttrID, math.floor(attrTotalNum + MDL.HeroStrenthen.GetActivateAttrNumByType(self.curHeroId, attrType.AttrID)), "E8D588")) else UIUtils.SetActive(self.img_Arrow, false) UIUtils.SetLabel(self.lab_1, "") UIUtils.SetLabel(self.lab_02, "") end end -- 设置选中状态 UIUtils.SetActive(self.group_StagePo.img_Select, self.selectTab == SoulTab) UIUtils.SetActive(self.group_Power.img_Change01_Select, self.selectTab == MDL.HeroStrenthen.NurturingType.Power) UIUtils.SetActive(self.group_Physical.img_Change01_Select, self.selectTab == MDL.HeroStrenthen.NurturingType.Physical) UIUtils.SetActive(self.group_Skill.img_Change01_Select, self.selectTab == MDL.HeroStrenthen.NurturingType.Skill) end function UIHeroStrenthen:RefreshStrenthenMaterialState() if self.selectTab == SoulTab then if MDL.HeroStrenthen.IsReachMaxStrengthenLevel(self.curHeroId) then self.obj_StrenthenState:SetState(2) UIUtils.SetLabelText(self.lab_HintInfo, Const_IDS.IDS_HeroStrenthen_MaxLevel) else local curLevel = MDL.HeroStrenthen.GetStrengthenLevel(self.curHeroId) local reachMaxAttrNum = CTL.HeroStrenthen.GetReachMaxAttrNum(self.curHeroId) local allNurturingNum = table.getDictCount(MDL.HeroStrenthen.NurturingType) local nextStrenthenData = MDL.HeroStrenthen.GetHeroStrenthenData(self.curHeroId, curLevel + 1) if MDL.HeroStar.GetHeroStarLevel(self.curHeroId) < nextStrenthenData.HeroStarLimit then self.obj_StrenthenState:SetState(1) UIUtils.SetLabel(self.lab_SoulHint, string.FormatByIdsId(Const_IDS.IDS_HeroStrenthen_EvolveLimit, nextStrenthenData.HeroStarLimit)) else if reachMaxAttrNum == allNurturingNum then self.obj_StrenthenState:SetState(0) self:SetStrenthenRedPoint(self.img_YelPoint, self.btn_Strenthen, CTL.HeroStrenthen.CalculateStrenthenRedPoint(self.curHeroId)) else self.obj_StrenthenState:SetState(1) UIUtils.SetLabelText(self.lab_SoulHint, Const_IDS.IDS_HeroStrenthen_ProgressLimit) end end local strenthenData = MDL.HeroStrenthen.GetHeroStrenthenData(self.curHeroId, curLevel) self.loop_RewardScroll:ReloadAll(strenthenData.Item_Table) end else local attrNum, attrTotalNum = CTL.HeroStrenthen.GetCurAndMaxAttrNum(self.curHeroId, self.selectTab) if attrNum == attrTotalNum then if MDL.HeroStrenthen.IsReachMaxStrengthenLevel(self.curHeroId) then self.obj_StrenthenState:SetState(2) UIUtils.SetLabelText(self.lab_HintInfo, Const_IDS.IDS_HeroStrenthen_MaxLevel) else local curLevel = MDL.HeroStrenthen.GetStrengthenLevel(self.curHeroId) local nextNurturingData = MDL.HeroStrenthen.GetStrenthenNurturingData(self.curHeroId, self.selectTab, curLevel + 1) if nextNurturingData.AttrTotalNum == attrTotalNum then self.obj_StrenthenState:SetState(2) UIUtils.SetLabelText(self.lab_HintInfo, Const_IDS.IDS_HeroStrenthen_MaxLevel) else self.obj_StrenthenState:SetState(2) local curStrenthenNameData = DataSheetManager.StrenthenName:GetDataByStrentheneLevel(curLevel + 1) local str = UIUtils.GetLocalizedTxt(Const_IDS[curStrenthenNameData.Name]) UIUtils.SetLabel(self.lab_HintInfo, string.FormatByIdsId(Const_IDS.IDS_HeroStrenthen_StrenthenLimit, str)) end end else self.obj_StrenthenState:SetState(0) self:SetStrenthenRedPoint(self.img_YelPoint, self.btn_Strenthen, CTL.HeroStrenthen.CalculateNurturingRedPoint(self.curHeroId, self.selectTab)) local curLevel = MDL.HeroStrenthen.GetStrengthenLevel(self.curHeroId) local nurturingData = MDL.HeroStrenthen.GetStrenthenNurturingData(self.curHeroId, self.selectTab, curLevel) self.loop_RewardScroll:ReloadAll(nurturingData.Item_Table) end end end function UIHeroStrenthen:RefreshStrenthenRedPoint() self:SetStrenthenRedPoint(self.group_StagePo.img_YelPoint, self.group_StagePo.btn_StagePo, CTL.HeroStrenthen.CalculateStrenthenRedPoint(self.curHeroId)) self:SetStrenthenRedPoint(self.group_Power.img_YelPoint, self.group_Power.btn_Info, CTL.HeroStrenthen.CalculateNurturingRedPoint(self.curHeroId, MDL.HeroStrenthen.NurturingType.Power)) self:SetStrenthenRedPoint(self.group_Physical.img_YelPoint, self.group_Physical.btn_Info, CTL.HeroStrenthen.CalculateNurturingRedPoint(self.curHeroId, MDL.HeroStrenthen.NurturingType.Physical)) self:SetStrenthenRedPoint(self.group_Skill.img_YelPoint, self.group_Skill.btn_Info, CTL.HeroStrenthen.CalculateNurturingRedPoint(self.curHeroId, MDL.HeroStrenthen.NurturingType.Skill)) end function UIHeroStrenthen:SetStrenthenRedPoint(img_YelPoint, btn, isShow) if MDL.Player.HeroIsLineUp(self.curHeroId) then btn:SetRedPoint(isShow) UIUtils.SetActive(img_YelPoint, false) else btn:SetRedPoint(false) UIUtils.SetActive(img_YelPoint, isShow) end end -- 设置力、体、技区域数据 function UIHeroStrenthen:SetNurturingAreaData(comp, nurturingType) local curLevel = MDL.HeroStrenthen.GetStrengthenLevel(self.curHeroId) if curLevel > 0 then -- 设置等级 UIUtils.SetLabel(comp.txt_Lv, string.FormatByIdsId(Const_IDS.IDS_TalentSkill_Level, curLevel)) -- 设置属性加成 local attrType = DataSheetManager.StrenthenAttrID:GetDataByID(nurturingType) local attrNum, attrTotalNum = CTL.HeroStrenthen.GetCurAndMaxAttrNum(self.curHeroId, nurturingType) -- 此处需要加上激活时的属性 UIUtils.SetLabel(comp.txt_Attr, UTL.Attr.GetAttrText(attrType.AttrID, math.floor(attrNum + MDL.HeroStrenthen.GetActivateAttrNumByType(self.curHeroId, attrType.AttrID)))) -- 设置属性进度 local lastAttrTotalNum = 0 local lastNurturingData = MDL.HeroStrenthen.GetStrenthenNurturingData(self.curHeroId, nurturingType, curLevel - 1) if lastNurturingData then lastAttrTotalNum = lastNurturingData.AttrTotalNum end UIUtils.SetAtlasImageFillAmount(comp.img_ProgressBar, (attrNum - lastAttrTotalNum) / (attrTotalNum - lastAttrTotalNum)) UIUtils.SetActive(comp.img_Line, attrNum == attrTotalNum) -- 设置状态 comp.obj_State:SetState(0) UIUtils.SetGray(comp.img_BG, false) UIUtils.SetGray(comp.img_Attr_Txt, false) else comp.obj_State:SetState(1) UIUtils.SetActive(comp.img_Line, false) UIUtils.SetGray(comp.img_BG, true) UIUtils.SetGray(comp.img_Attr_Txt, true) end end -- 设置魂区域数据 function UIHeroStrenthen:SetSoulAreaData() if MDL.HeroStrenthen.IsReachMaxStrengthenLevel(self.curHeroId) then -- 满级显示 UIUtils.SetActive(self.group_StagePo.img_ProgressBar, false) self.group_StagePo.effect_Star:StopUIEffect() UIUtils.SetActive(self.group_StagePo.effect_Star, false) else local reachMaxAttrNum = CTL.HeroStrenthen.GetReachMaxAttrNum(self.curHeroId) local allNurturingNum = table.getDictCount(MDL.HeroStrenthen.NurturingType) if reachMaxAttrNum == allNurturingNum then -- 力、体、技全部满级 -- 打开可进阶特效 UIUtils.SetActive(self.group_StagePo.effect_Star, true) self.group_StagePo.effect_Star:PlayUIEffect() else -- 关闭可进阶特效 self.group_StagePo.effect_Star:StopUIEffect() UIUtils.SetActive(self.group_StagePo.effect_Star, false) end -- 设置进度 UIUtils.SetActive(self.group_StagePo.img_ProgressBar, true) UIUtils.SetAtlasImageFillAmount(self.group_StagePo.img_ProgressBar, reachMaxAttrNum / allNurturingNum) end end function UIHeroStrenthen:SetDefaultSelect() if self.selectTab > 0 then -- 如果选中的是小点 并且没有修炼满 则直接返回 local attrNum, attrTotalNum = CTL.HeroStrenthen.GetCurAndMaxAttrNum(self.curHeroId, self.selectTab) if attrNum < attrTotalNum then return end end for _, nurturingType in pairs(MDL.HeroStrenthen.NurturingType) do local attrNum, attrTotalNum = CTL.HeroStrenthen.GetCurAndMaxAttrNum(self.curHeroId, nurturingType) if attrNum < attrTotalNum then self.selectTab = nurturingType return end end self.selectTab = SoulTab -- 为0时展示魂 end return UIHeroStrenthen