require("Base/BasePanel") RoleAwakeLayout = Inherit(BasePanel) local this = RoleAwakeLayout local itemConfig = ConfigManager.GetConfig(ConfigName.ItemConfig) local heroRankupConfig = ConfigManager.GetConfig(ConfigName.HeroRankupConfig) local propertyConfig = ConfigManager.GetConfig(ConfigName.PropertyConfig) local heroSkinConfig = ConfigManager.GetConfig(ConfigName.HeroSkin) local isUpStarMaterials = true --升星 材料是否充足 local curSelectUpStarData --当前选择升星坑位的数据 local curSelectUpStarGo --当前选择升星坑位的预设 local upStarConsumeMaterial = {} --升星消耗的英雄组 {{1坑位英雄信息}{2坑位英雄信息}{}} local upStarMaterialIsAll = {} --升星消耗的英雄组是否满足 {{1满足}{2不满足}{}} local isHeroUpStar = false --是否可升星 local upStarRankUpConfig = {} --即将要升星的数据 local curStarRankUpConfig = {} --当前升星的数据 local curHeroData --当前英雄信息 local parent = {} local upStarPreList = {} local heroDatas = {} local isUpZhen = false function RoleAwakeLayout:New(gameObject) local b = {} b.gameObject = gameObject b.transform = gameObject.transform setmetatable(b, { __index = RoleAwakeLayout }) return b end --初始化组件(用于子类重写) function RoleAwakeLayout:InitComponent() this.spLoader = SpriteLoader.New() Util.GetGameObject(self.gameObject, "content/Image/Text"):GetComponent("Text").text = Language[12691] Util.GetGameObject(self.gameObject, "content/Image (3)/Text"):GetComponent("Text").text = Language[12692] Util.GetGameObject(self.gameObject, "content/tip"):GetComponent("Text").text = Language[12693] this.roleUpStarLayoutTip1 = Util.GetGameObject(self.gameObject, "content/tip1"):GetComponent("Text") Util.GetGameObject(self.gameObject, "content/upStarBtn/Text"):GetComponent("Text").text = Language[12694] Util.GetGameObject(self.gameObject, "content/lvUp/Text"):GetComponent("Text").text = Language[12695] --天赋 this.talent1Image = Util.GetGameObject(self.gameObject, "talent/talent (1)"):GetComponent("Image") this.talent1Progress = Util.GetGameObject(self.gameObject, "talent/talent (1)/progress"):GetComponent("Text") this.talent2Image = Util.GetGameObject(self.gameObject, "talent/talent (2)"):GetComponent("Image") this.talent2Progress = Util.GetGameObject(self.gameObject, "talent/talent (2)/progress"):GetComponent("Text") this.talentBtn = Util.GetGameObject(self.gameObject, "talent/talentBtn") this.curLvEnd = Util.GetGameObject(self.gameObject, "lvUp/curLvEnd"):GetComponent("Text") this.nextLvEnd = Util.GetGameObject(self.gameObject, "lvUp/nextLvEnd"):GetComponent("Text") --升星觉醒 this.upStarPre = Util.GetGameObject(self.gameObject, "upStarPre") this.upStarGrid = Util.GetGameObject(self.gameObject, "grid") this.upStarBtnRedPoint = Util.GetGameObject(self.gameObject, "upStarBtn/redPoint") this.goldBtn = Util.GetGameObject(self.gameObject, "goldGrid/gold") this.goldText = Util.GetGameObject(self.gameObject, "goldGrid/gold/Text"):GetComponent("Text") this.goldImage = Util.GetGameObject(self.gameObject, "goldGrid/gold") this.gold2Btn = Util.GetGameObject(self.gameObject, "goldGrid/gold2") this.gold2Text = Util.GetGameObject(self.gameObject, "goldGrid/gold2/Text"):GetComponent("Text") this.gold2Image = Util.GetGameObject(self.gameObject, "goldGrid/gold2") this.upStarBtn = Util.GetGameObject(self.gameObject, "upStarBtn") end --绑定事件(用于子类重写) function RoleAwakeLayout:BindEvent() --升星 Util.AddOnceClick(this.upStarBtn, function() self:StarUpClick() end) end --添加事件监听(用于子类重写) function RoleAwakeLayout:AddListener() Game.GlobalEvent:AddEvent(GameEvent.Bag.BagGold, this.UpdateHeroUpStarMaterialShow, self) end --移除事件监听(用于子类重写) function RoleAwakeLayout:RemoveListener() Game.GlobalEvent:RemoveEvent(GameEvent.Bag.BagGold, this.UpdateHeroUpStarMaterialShow, self) end function RoleAwakeLayout:OnShow() self.gameObject:SetActive(true) end function RoleAwakeLayout:SetData(_sortinglayer, _parent, _curHerodata, _isUpZhen, _heroDatas) this.sortingOrder = _sortinglayer curHeroData = _curHerodata parent = _parent heroDatas = _heroDatas isUpZhen = _isUpZhen self:GetCurHeroUpLvOrUpStarSData() self:UpdateHeroUpStarData() --进阶 local upStarRankUpConfig for k, v in ConfigPairs(ConfigManager.GetConfig(ConfigName.HeroRankupConfig)) do if v.Star == curHeroData.heroConfig.Star and v.LimitStar == curHeroData.star and v.OpenStar == curHeroData.star + 1 then upStarRankUpConfig = v break end end if upStarRankUpConfig then if HarmonyManager.GetSingleAdditions(HarmonyAddType.AddLv) >= upStarRankUpConfig.LimitHongmengLevel then -- 鸿蒙阵神将共鸣等级 this.upStarBtn.gameObject:SetActive(true) this.roleUpStarLayoutTip1.gameObject:SetActive(false) else this.upStarBtn.gameObject:SetActive(false) this.roleUpStarLayoutTip1.gameObject:SetActive(true) this.roleUpStarLayoutTip1.text = Language[12696] .. upStarRankUpConfig.LimitHongmengLevel end end end --更新英雄进阶数据 function RoleAwakeLayout:UpdateHeroUpStarData() --进阶材料 self:UpdateHeroUpStarMaterialShow() --进阶属性提升 this.curLvEnd.text = HeroManager.GetCurHeroStarLvEnd(1, curHeroData) this.nextLvEnd.text = HeroManager.GetCurHeroStarLvEnd(2, curHeroData, curHeroData.breakId, upStarRankUpConfig.Id) local OpenPassiveSkillRules = curHeroData.star == HeroManager.awakeNextStarIndex and curHeroData.heroConfig.Awaken or curHeroData.heroConfig.OpenPassiveSkillRules OpenPassiveSkillRules = GetPassiveByMaxStar(curHeroData.heroConfig, OpenPassiveSkillRules) local openlists, compoundOpenNum, compoundNum, allUpStarOpenData = HeroManager.GetAllPassiveSkillIds( curHeroData.heroConfig, curHeroData.breakId, curHeroData.upStarId) this.talent1Progress.text = #openlists - compoundOpenNum .. "/" .. #OpenPassiveSkillRules - compoundNum this.talent2Progress.text = #openlists - compoundOpenNum .. "/" .. #OpenPassiveSkillRules - compoundNum Util.AddOnceClick(this.talentBtn, function() UIManager.OpenPanel(UIName.RoleAwakeTalentPopup, curHeroData.heroConfig) end) --进阶吞英雄条件 Util.ClearChild(this.upStarGrid.transform) local curUpStarData = HeroManager.GetHeroCurUpStarInfo(curHeroData.dynamicId) if curUpStarData and #curUpStarData > 0 then upStarConsumeMaterial = {} upStarMaterialIsAll = {} upStarPreList = {} for i = 1, #curUpStarData do local go = newObject(this.upStarPre) go.transform:SetParent(this.upStarGrid.transform) go.transform.localScale = Vector3.one go.transform.localPosition = Vector3.zero; go:SetActive(true) go.transform.name = "upStarPre" .. i upStarPreList[i] = go upStarConsumeMaterial[i] = {} upStarMaterialIsAll[i] = 2 Util.GetGameObject(go.transform, "iconbg/proImage"):SetActive(false) if curUpStarData[i].upStarMaterialsData.Issame == 1 or curUpStarData[i].upStarMaterialsData.IsId > 0 then Util.GetGameObject(go.transform, "iconDefault"):SetActive(false) Util.GetGameObject(go.transform, "icon"):SetActive(true) Util.GetGameObject(go.transform, "iconbg/proImage"):SetActive(true) Util.GetGameObject(go.transform, "iconbg/proImage"):GetComponent("Image").sprite = this.spLoader :LoadSprite(GetProStrImageByProNum(curHeroData.changeProId)) if curUpStarData[i].upStarMaterialsData.Issame == 1 then Util.GetGameObject(go.transform, "icon"):GetComponent("Image").sprite = this.spLoader:LoadSprite( GetResourcePath(curHeroData.heroConfig.Icon)) Util.GetGameObject(go.transform, "frame"):GetComponent("Image").sprite = this.spLoader:LoadSprite( GetHeroQuantityImageByquality(curHeroData.heroConfig.Quality, curUpStarData[i].upStarMaterialsData.StarLimit)) Util.GetGameObject(go.transform, "iconbg/proImage"):GetComponent("Image").sprite = this.spLoader :LoadSprite(GetProStrImageByProNum(curHeroData.changeProId)) elseif curUpStarData[i].upStarMaterialsData.IsId > 0 then local heroConfig = ConfigManager.GetConfigData(ConfigName.HeroConfig, curUpStarData[i].upStarMaterialsData.IsId) Util.GetGameObject(go.transform, "icon"):GetComponent("Image").sprite = this.spLoader:LoadSprite( GetResourcePath(heroConfig.Icon)) Util.GetGameObject(go.transform, "frame"):GetComponent("Image").sprite = this.spLoader:LoadSprite( GetHeroQuantityImageByquality(heroConfig.Quality, curUpStarData[i].upStarMaterialsData.StarLimit)) Util.GetGameObject(go.transform, "iconbg/proImage"):GetComponent("Image").sprite = this.spLoader :LoadSprite(GetProStrImageByProNum(heroConfig.PropertyName)) end else if curUpStarData[i].upStarMaterialsData.IsSameClan == 1 then Util.GetGameObject(go.transform, "iconbg/proImage"):SetActive(true) Util.GetGameObject(go.transform, "iconbg/proImage"):GetComponent("Image").sprite = this.spLoader :LoadSprite(GetProStrImageByProNum(curHeroData.changeProId)) end Util.GetGameObject(go.transform, "iconDefault"):SetActive(true) Util.GetGameObject(go.transform, "icon"):SetActive(false) Util.GetGameObject(go.transform, "frame"):GetComponent("Image").sprite = this.spLoader:LoadSprite( GetHeroQuantityImageByquality(nil, curUpStarData[i].upStarMaterialsData.StarLimit)) end local upStarHeroListData = HeroManager.GetUpStarHeroListData(curUpStarData[i].upStarMaterialsData.Id, curHeroData) if upStarHeroListData.state > 0 then Util.GetGameObject(go.transform, "add/add"):SetActive(true) else Util.GetGameObject(go.transform, "add/add"):SetActive(false) end Util.GetGameObject(go.transform, "num"):GetComponent("Text").text = string.format( "%s/%s", 0, curUpStarData[i].upStarData[4]) SetHeroStars(this.spLoader, Util.GetGameObject(go.transform, "iconbg/starGrid"), curUpStarData[i].upStarMaterialsData.StarLimit, 1, nil, -15.3) local addBtn = Util.GetGameObject(go.transform, "add") Util.AddOnceClick(addBtn, function() curSelectUpStarData = curUpStarData[i] curSelectUpStarGo = go local curShowHeroListData = self:SetShowHeroListData(upStarConsumeMaterial, upStarHeroListData.heroList) --参数1 显示的herolist 2 3 升当前星的规则 4 打开RoleUpStarListPanel的界面 UIManager.OpenPanel(UIName.RoleUpStarListPanel, curShowHeroListData, curUpStarData[i] .upStarMaterialsData, curUpStarData[i].upStarData, this, upStarConsumeMaterial[i], curHeroData) end) end end self:AutoSelectUpStarHeroList(curUpStarData) end --获取当前英雄的下一突破 和 升星 静态数据 function RoleAwakeLayout:GetCurHeroUpLvOrUpStarSData() isHeroUpStar = false upStarRankUpConfig = {} local heroRankUpConfig = ConfigManager.GetConfig(ConfigName.HeroRankupConfig) for i, v in ConfigPairs(heroRankUpConfig) do if v.Star == curHeroData.heroConfig.Star then --初始星级相等 if v.Show == 2 then -- 2 升星 if v.Id ~= curHeroData.upStarId and curHeroData.star == v.LimitStar then --Log("升星 "..v.Id) upStarRankUpConfig = v isHeroUpStar = true end end end end end --更新英雄进阶材料显示 function RoleAwakeLayout:UpdateHeroUpStarMaterialShow() --进阶金币 妖壶条件 if upStarRankUpConfig then isUpStarMaterials = true local ConsumeMaterial = upStarRankUpConfig.ConsumeMaterial if ConsumeMaterial and #ConsumeMaterial >= 2 then if ConsumeMaterial[1][2] > 0 then this.goldImage:SetActive(true) this.goldImage:GetComponent("Image").sprite = this.spLoader:LoadSprite(GetResourcePath(itemConfig [ConsumeMaterial[1][1]].ResourceID)) if BagManager.GetItemCountById(ConsumeMaterial[1][1]) < ConsumeMaterial[1][2] then isUpStarMaterials = false this.goldText.text = string.format("%s", ConsumeMaterial[1][2]) else this.goldText.text = string.format("%s", ConsumeMaterial[1][2]) end Util.AddOnceClick(this.goldBtn, function() UIManager.OpenPanel(UIName.RewardItemSingleShowPopup, ConsumeMaterial[1][1]) end) else this.goldImage:SetActive(false) end if ConsumeMaterial[2][2] > 0 then this.gold2Image:SetActive(true) this.gold2Image:GetComponent("Image").sprite = this.spLoader:LoadSprite(GetResourcePath(itemConfig [ConsumeMaterial[2][1]].ResourceID)) if BagManager.GetItemCountById(ConsumeMaterial[2][1]) < ConsumeMaterial[2][2] then isUpStarMaterials = false this.gold2Text.text = string.format("%s", ConsumeMaterial[2][2]) else this.gold2Text.text = string.format("%s", ConsumeMaterial[2][2]) end Util.AddOnceClick(this.gold2Btn, function() UIManager.OpenPanel(UIName.RewardItemSingleShowPopup, ConsumeMaterial[2][1]) end) else this.gold2Image:SetActive(false) end end end end --升星选择祭品后刷新界面 function RoleAwakeLayout:AutoSelectUpStarHeroList(_curUpStarData) local curUpStarData = _curUpStarData if curUpStarData and #curUpStarData > 0 then for i = 1, #curUpStarData do curSelectUpStarData = curUpStarData[i] curSelectUpStarGo = upStarPreList[i] local upStarHeroListData = HeroManager.GetUpStarHeroListData(curUpStarData[i].upStarMaterialsData.Id, curHeroData) local curSelectHeroList = {} if curUpStarData[i].upStarMaterialsData.Issame == 1 or curUpStarData[i].upStarMaterialsData.IsId > 0 or (curUpStarData[i].upStarMaterialsData.IsSameClan == 1 and curUpStarData[i].upStarMaterialsData.StarLimit == 3 and curHeroData.heroConfig.Qualiy ~= 3) then if LengthOfTable(upStarHeroListData.heroList) >= curUpStarData[i].upStarData[4] then for i = 1, curUpStarData[i].upStarData[4] do if upStarHeroListData.heroList[i].type == RoleUpStarMatType.item or upStarHeroListData.heroList[i].type == RoleUpStarMatType.hero and upStarHeroListData.heroList[i].lockState == 0 and upStarHeroListData.heroList[i].isFormation == "" and not HarmonyManager.IsChangeColor(upStarHeroListData.heroList[i].dynamicId) and not HarmonyManager:IsEnvoy(upStarHeroListData.heroList[i].dynamicId) then table.insert(curSelectHeroList, upStarHeroListData.heroList[i]) end end self:UpdateUpStarPosHeroData(curSelectHeroList) end end end end --进阶红点 local upStarRedPointState = HeroManager.IsShowUpStarRedPoint(curHeroData) this.upStarBtnRedPoint:SetActive(upStarRedPointState) parent:CheckRedPointType(RoleInfoPanelIndex.juexing, upStarRedPointState) end --刷新当前升星坑位英雄的信息 function RoleAwakeLayout:UpdateUpStarPosHeroData(curSelectHeroList) if LengthOfTable(curSelectHeroList) < curSelectUpStarData.upStarData[4] then upStarMaterialIsAll[curSelectUpStarData.upStarData[2]] = 2 Util.GetGameObject(curSelectUpStarGo.transform, "add/add"):SetActive(true) local upStarHeroListData = HeroManager.GetUpStarHeroListData(curSelectUpStarData.upStarMaterialsData.Id, curHeroData) if upStarHeroListData.state <= 0 then Util.GetGameObject(curSelectUpStarGo.transform, "add/add"):SetActive(false) end Util.GetGameObject(curSelectUpStarGo.transform, "num"):GetComponent("Text").text = string.format( "%s/%s", LengthOfTable(curSelectHeroList), curSelectUpStarData.upStarData[4]) else upStarMaterialIsAll[curSelectUpStarData.upStarData[2]] = 1 Util.GetGameObject(curSelectUpStarGo.transform, "add/add"):SetActive(false) Util.GetGameObject(curSelectUpStarGo.transform, "num"):GetComponent("Text").text = string.format( "%s/%s", LengthOfTable(curSelectHeroList), curSelectUpStarData.upStarData[4]) end local curUpStarConsumeMaterial = {} for i, v in pairs(curSelectHeroList) do table.insert(curUpStarConsumeMaterial, v) end upStarConsumeMaterial[curSelectUpStarData.upStarData[2]] = curUpStarConsumeMaterial end --分析设置升星界面显示的英雄list数据 如果当前升星材料的坑位的英雄数据与 以其他坑位有重合并且选择上的英雄不显示 如果是当前坑位显示的英雄显示对勾 function RoleAwakeLayout:SetShowHeroListData(upStarConsumeMaterial, curHeroList) --1 消耗的总消耗组 2 当前坑位可选择的所有英雄 --Log("#curHeroList "..#curHeroList) local curEndShowHeroListData2 = {} for i = 1, #curHeroList do table.insert(curEndShowHeroListData2, curHeroList[i]) end local curEndShowHeroListData = {} for i, v in pairs(curEndShowHeroListData2) do v.isSelect = 2 table.insert(curEndShowHeroListData, v) end for j = 1, #upStarConsumeMaterial do if upStarConsumeMaterial[j] and #upStarConsumeMaterial[j] > 0 then for k = 1, #upStarConsumeMaterial[j] do if j == curSelectUpStarData.upStarData[2] then --curSelectUpStarData 当前坑位选择的英雄信息 for _, v in pairs(curEndShowHeroListData) do if v.type == RoleUpStarMatType.hero and v.dynamicId == upStarConsumeMaterial[j][k].dynamicId then v.isSelect = 1 elseif v.type == RoleUpStarMatType.item and v.id == upStarConsumeMaterial[j][k].id and v.index == upStarConsumeMaterial[j][k].index then v.isSelect = 1 end end else for i, v in pairs(curEndShowHeroListData) do if v.type == RoleUpStarMatType.hero and v.dynamicId == upStarConsumeMaterial[j][k].dynamicId then curEndShowHeroListData[i] = nil elseif v.type == RoleUpStarMatType.item and v.id == upStarConsumeMaterial[j][k].id and v.index == upStarConsumeMaterial[j][k].index then curEndShowHeroListData[i] = nil end end end end end end local curList = {} for _, v in pairs(curEndShowHeroListData) do table.insert(curList, v) end return curList end --进阶按钮点击事件处理 function RoleAwakeLayout:StarUpClick() if curHeroData.oriLv >= HeroManager.heroLvEnd[curHeroData.heroConfig.Id] then PopupTipPanel.ShowTip(Language[12697]) return end if curHeroData.lv < upStarRankUpConfig.LimitLevel then PopupTipPanel.ShowTip(Language[12698] .. upStarRankUpConfig.LimitLevel) return end local isUpStarMaterialsHero = true for i = 1, #upStarMaterialIsAll do if upStarMaterialIsAll[i] == 2 then isUpStarMaterialsHero = false end end if isUpStarMaterials and isUpStarMaterialsHero then NetManager.HeroUpStarEvent(curHeroData.dynamicId, upStarConsumeMaterial, function(msg) self:DeleteUpStarMaterials() UIManager.OpenPanel(UIName.RoleAwakeSuccessPanel, curHeroData, upStarRankUpConfig.Id, upStarRankUpConfig.OpenLevel, function() local dropItemTabs = BagManager.GetTableByBackDropData(msg) if #dropItemTabs > 0 then BagManager.SetDropIsSHowEquipPrint(false) UIManager.OpenPanel(UIName.RewardItemPopup, msg, 1, function() end) end end) CheckRedPointStatus(RedPointType.ShengXingYouLi) CheckRedPointStatus(RedPointType.HongMeng_UpTower) end) -- 进阶音效 PlaySoundWithoutClick(SoundConfig.Sound_Recruit3) else PopupTipPanel.ShowTip(Language[12699]) end end --扣除升星 消耗的材料 更新英雄数据 function RoleAwakeLayout:DeleteUpStarMaterials() HeroManager.UpdateSingleHeroDatas(curHeroData.dynamicId, curHeroData.oriLv, curHeroData.star + 1, curHeroData .breakId, upStarRankUpConfig.Id, true) HeroManager.UpdateSingleHeroSkillData(curHeroData.dynamicId) for i, v in pairs(heroDatas) do if curHeroData == v then curHeroData = HeroManager.GetSingleHeroData(curHeroData.dynamicId) v = curHeroData end end --本地数据删除材料英雄 local curDelHeroDids = {} for i = 1, #upStarConsumeMaterial do for j = 1, #upStarConsumeMaterial[i] do if upStarConsumeMaterial[i][j].type == RoleUpStarMatType.hero then table.insert(curDelHeroDids, upStarConsumeMaterial[i][j].dynamicId) end end end if curDelHeroDids and #curDelHeroDids > 0 then HeroManager.DeleteHeroDatas(curDelHeroDids) end if HeroManager.heroListPanelProID ~= ProIdConst.All then heroDatas = HeroManager.GetHeroDataByProperty(HeroManager.heroListPanelProID) else heroDatas = HeroManager.GetAllHeroDatas() end if UIManager.IsOpen(UIName.RoleInfoPanel) then --当界面存在时需要刷新当前界面 HeroManager.SortHeroDatas(heroDatas) parent:OnOpen(curHeroData, heroDatas, isUpZhen) parent:OnShow() end end function RoleAwakeLayout:OnSortingOrderChange() end function RoleAwakeLayout:OnHide() self.gameObject:SetActive(false) end function RoleAwakeLayout:OnClose() upStarPreList = {} end function RoleAwakeLayout:OnDestroy() this.spLoader:Destroy() upStarPreList = {} end return this