require("Base/BasePanel") this = Inherit(BasePanel) local this = this 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 local allAddProVal = {} --初始化组件(用于子类重写) function this:InitComponent(gameObject) this.gameObject = gameObject this.upStar=Util.GetGameObject(gameObject,"upStar") this.noUpStarText=Util.GetGameObject(gameObject,"noUpStarText") this.upStarPre=Util.GetGameObject(this.upStar,"upStarPre") this.upStarGrid=Util.GetGameObject(this.upStar,"grid") this.upStarBtn=Util.GetGameObject(this.upStar,"btns/upStarBtn") this.upStarBtnRedPoint=Util.GetGameObject(this.upStar,"btns/upStarBtn/redPoint") this.goldBtn=Util.GetGameObject(this.upStar,"goldGrid/gold") this.goldText=Util.GetGameObject(this.upStar,"goldGrid/gold/Text"):GetComponent("Text") this.goldImage=Util.GetGameObject(this.upStar,"goldGrid/gold") this.gold2Btn=Util.GetGameObject(this.upStar,"goldGrid/gold2") this.gold2Text=Util.GetGameObject(this.upStar,"goldGrid/gold2/Text"):GetComponent("Text") this.gold2Image=Util.GetGameObject(this.upStar,"goldGrid/gold2") this.roleUpStarLayoutTip=Util.GetGameObject(this.upStar,"tip"):GetComponent("Text") this.roleUpStarRedPoint=Util.GetGameObject(gameObject,"rolePanel/btnList/btnUpStar/redPoint") this.goCompoundHero=Util.GetGameObject(this.upStar.transform, "goCompoundHero") Util.GetGameObject(this.upStar.transform, "goCompoundHero/Text"):GetComponent("Text").text = Language[12290] --升星属性 this.curStarGrid = Util.GetGameObject(this.upStar.transform, "upStarProInfo/curStarGrid") this.nextStarGrid = Util.GetGameObject(this.upStar.transform, "upStarProInfo/nextStarGrid") this.skillInfoGrid = Util.GetGameObject(this.upStar.transform, "upStarProInfo/skillInfo") this.skillInfoGrid:SetActive(false) this.atkPro_UpStar=Util.GetGameObject(gameObject,"upStar/upStarProInfo/pro/atk") this.hpPro_UpStar=Util.GetGameObject(gameObject,"upStar/upStarProInfo/pro/hp") this.phyDef_UpStar=Util.GetGameObject(gameObject,"upStar/upStarProInfo/pro/phyDef") this.magDef_UpStar=Util.GetGameObject(gameObject,"upStar/upStarProInfo/pro/magDef") this.lv_UpStar=Util.GetGameObject(gameObject,"upStar/upStarProInfo/pro/lv/proValue"):GetComponent("Text") this.nextlv_UpStar=Util.GetGameObject(gameObject,"upStar/upStarProInfo/pro/lv/nextproValue"):GetComponent("Text") return this end --绑定事件(用于子类重写) function this:BindEvent() --升星 Util.AddClick(this.upStarBtn, function() self:StarUpClick() end) --前往化虚坛 Util.AddClick(this.goCompoundHero, function() if ActTimeCtrlManager.SingleFuncState(FUNCTION_OPEN_TYPE.COMPOUND_HERO) then JumpManager.GoJump(750001) else PopupTipPanel.ShowTip(ActTimeCtrlManager.GetFuncTip(FUNCTION_OPEN_TYPE.COMPOUND_HERO)) end end) end --添加事件监听(用于子类重写) function this:AddListener() Game.GlobalEvent:AddEvent(GameEvent.Bag.BagGold, this.UpdateHeroUpStarMaterialShow) end --移除事件监听(用于子类重写) function this:RemoveListener() Game.GlobalEvent:RemoveEvent(GameEvent.Bag.BagGold,this.UpdateHeroUpStarMaterialShow) end function this:OnShow(_sortinglayer,_parent,_curHerodata,_isUpZhen,_heroDatas) this.gameObject:SetActive(true) this.sortingOrder = _sortinglayer curHeroData = _curHerodata parent = _parent heroDatas = _heroDatas isUpZhen = _isUpZhen this:GetCurHeroUpLvOrUpStarSData() this:UpdateHeroUpStarData()--进阶 end --更新英雄进阶数据 function this:UpdateHeroUpStarData() --进阶材料 this:UpdateHeroUpStarMaterialShow() --计算面板属性 if isUpZhen then local formationList = FormationManager.GetFormationByID(FormationTypeDef.FORMATION_NORMAL) local allHeroTeamAddProVal = HeroManager.GetAllHeroTeamAddProVal(formationList.teamHeroInfos,curHeroData.dynamicId) allAddProVal = HeroManager.CalculateHeroAllProValList(1, curHeroData.dynamicId, false,nil,nil,true,allHeroTeamAddProVal) else allAddProVal = HeroManager.CalculateHeroAllProValList(1,curHeroData.dynamicId,false) end --进阶属性提升 if upStarRankUpConfig and upStarRankUpConfig.Id then this:UpdateHeroUpStarProUpShow() end --进阶吞英雄条件 Util.ClearChild(this.upStarGrid.transform) local curUpStarData= HeroManager.GetHeroCurUpStarInfo(curHeroData.dynamicId) if curUpStarData and #curUpStarData>0 then this.upStar:SetActive(true) this.noUpStarText:SetActive(false) parent.talentTipStrGo:SetActive(true) upStarConsumeMaterial={} upStarMaterialIsAll = {} upStarPreList = {} this.goCompoundHero:SetActive(curHeroData.star == 4 or curHeroData.star == 5) 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=Util.LoadSprite(GetProStrImageByProNum(curHeroData.heroConfig.PropertyName)) if curUpStarData[i].upStarMaterialsData.Issame==1 then Util.GetGameObject(go.transform,"icon"):GetComponent("Image").sprite=Util.LoadSprite(GetResourcePath(curHeroData.heroConfig.Icon)) Util.GetGameObject(go.transform,"frame"):GetComponent("Image").sprite=Util.LoadSprite(GetHeroQuantityImageByquality(curHeroData.heroConfig.Quality, curUpStarData[i].upStarMaterialsData.StarLimit)) Util.GetGameObject(go.transform, "iconbg/proImage"):GetComponent("Image").sprite=Util.LoadSprite(GetProStrImageByProNum(curHeroData.heroConfig.PropertyName)) 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=Util.LoadSprite(GetResourcePath(heroConfig.Icon)) Util.GetGameObject(go.transform,"frame"):GetComponent("Image").sprite=Util.LoadSprite(GetHeroQuantityImageByquality(heroConfig.Quality, curUpStarData[i].upStarMaterialsData.StarLimit)) Util.GetGameObject(go.transform, "iconbg/proImage"):GetComponent("Image").sprite=Util.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=Util.LoadSprite(GetProStrImageByProNum(curHeroData.heroConfig.PropertyName)) end Util.GetGameObject(go.transform,"iconDefault"):SetActive(true) Util.GetGameObject(go.transform,"icon"):SetActive(false) Util.GetGameObject(go.transform,"frame"):GetComponent("Image").sprite=Util.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(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 else this.upStar:SetActive(false) this.noUpStarText:SetActive(true) parent.talentTipStrGo:SetActive(false) end self:AutoSelectUpStarHeroList(curUpStarData) end --获取当前英雄的下一突破 和 升星 静态数据 function this: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 this: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 = Util.LoadSprite(GetResourcePath(itemConfig[ConsumeMaterial[1][1]].ResourceID)) if BagManager.GetItemCountById(ConsumeMaterial[1][1])%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 = Util.LoadSprite(GetResourcePath(itemConfig[ConsumeMaterial[2][1]].ResourceID)) if BagManager.GetItemCountById(ConsumeMaterial[2][1])%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 this:UpdateHeroUpStarProUpShow() if upStarRankUpConfig and upStarRankUpConfig.Id then local size = Vector2.New (45,45) SetHeroStars(this.curStarGrid, curHeroData.star,2,size,-9) SetHeroStars(this.nextStarGrid, curHeroData.star + 1,2,size,-9) --this.curLvEnd.text = HeroManager.GetCurHeroStarLvEnd(1,curHeroData) --this.nextLvEnd.text = HeroManager.GetCurHeroStarLvEnd(2,curHeroData,curHeroData.breakId,upStarRankUpConfig.Id) local nextUpStarConFig = ConfigManager.GetConfigData(ConfigName.HeroRankupConfig,upStarRankUpConfig.Id) local nextProUpVal = 0 if nextUpStarConFig then nextProUpVal = nextUpStarConFig.PropertiesDisplay end --this.proUpVal.text = GetPropertyFormatStr(2, nextProUpVal) --this.UpdateHeroUpStarProUpSkillShow(this.skillInfoGrid,self:NextStarUpSkillTabs()) local nextallAddProVal=HeroManager.CalculateHeroAllProValList(2,curHeroData.dynamicId,false,curHeroData.breakId,upStarRankUpConfig.Id) this:ProShow(this.atkPro_UpStar,allAddProVal,HeroProType.Attack,nextallAddProVal) this:ProShow(this.hpPro_UpStar,allAddProVal,HeroProType.Hp,nextallAddProVal) this:ProShow(this.phyDef_UpStar,allAddProVal,HeroProType.PhysicalDefence,nextallAddProVal) this:ProShow(this.magDef_UpStar,allAddProVal,HeroProType.MagicDefence,nextallAddProVal) this.lv_UpStar.text= HeroManager.GetCurHeroStarLvEnd(1,curHeroData) this.nextlv_UpStar.text= HeroManager.GetCurHeroStarLvEnd(2,curHeroData,curHeroData.breakId,upStarRankUpConfig.Id) end end function this:ProShow(go,allAddProVal,HeroProType,nextallAddProVal) local curProSConFig = ConfigManager.GetConfigData(ConfigName.PropertyConfig,HeroProType) Util.GetGameObject(go,"proName"):GetComponent("Text").text = curProSConFig.Info..":" Util.GetGameObject(go,"proValue"):GetComponent("Text").text = allAddProVal[HeroProType] Util.GetGameObject(go,"Image"):GetComponent("Image").sprite = Util.LoadSprite(PropertyTypeIconDef[HeroProType]) if nextallAddProVal then Util.GetGameObject(go,"nextproValue"):GetComponent("Text").text = nextallAddProVal[HeroProType] end end --升星选择祭品后刷新界面 function this: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].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(2,upStarRedPointState) end --刷新当前升星坑位英雄的信息 function this:UpdateUpStarPosHeroData(curSelectHeroList) if LengthOfTable(curSelectHeroList)%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.dynamicId) end upStarConsumeMaterial[curSelectUpStarData.upStarData[2]]=curUpStarConsumeMaterial for i = 1, #upStarConsumeMaterial do --Log("选择升星位置的英雄数量 "..#upStarConsumeMaterial[i]) if #upStarConsumeMaterial[i]>0 then for j = 1, #upStarConsumeMaterial[i] do --Log("选择升星位置的英雄都有谁 "..upStarConsumeMaterial[i][j]) end end end end --分析设置升星界面显示的英雄list数据 如果当前升星材料的坑位的英雄数据与 以其他坑位有重合并且选择上的英雄不显示 如果是当前坑位显示的英雄显示对勾 function this: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.dynamicId==upStarConsumeMaterial[j][k] then v.isSelect=1 end end else for i, v in pairs(curEndShowHeroListData) do if v.dynamicId==upStarConsumeMaterial[j][k] 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 this:StarUpClick() if (not HarmonyManager.IsInfo(curHeroData.dynamicId)) and (not HarmonyManager:IsEnvoy(curHeroData.dynamicId)) then -- body curHeroData -- print("1111111111",1111111111,tostring(HarmonyManager.IsInfo(curHeroData.dynamicId)),tostring(HarmonyManager:IsEnvoy(curHeroData.dynamicId))) if curHeroData.oriLv>=HeroManager.heroLvEnd[curHeroData.heroConfig.Id] then PopupTipPanel.ShowTip(Language[11846]) return end -- elseif then -- -- body -- print("2222222",1111111111) -- if curHeroData.lv>=HeroManager.heroLvEnd[curHeroData.heroConfig.Id] then -- PopupTipPanel.ShowTip(Language[11846]) -- return -- end end if curHeroData.lv 0 then BagManager.SetDropIsSHowEquipPrint(false) UIManager.OpenPanel(UIName.RewardItemPopup, msg, 1, function () self:DeleteUpStarMaterials() end) else self:DeleteUpStarMaterials() end CheckRedPointStatus(RedPointType.ShengXingYouLi) end) end) -- 进阶音效 PlaySoundWithoutClick(SoundConfig.Sound_Recruit3) else PopupTipPanel.ShowTip(Language[11852]) end end --扣除升星 消耗的材料 更新英雄数据 function this: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 --本地数据删除材料英雄 for i = 1, #upStarConsumeMaterial do HeroManager.DeleteHeroDatas(upStarConsumeMaterial[i]) 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 this:OnSortingOrderChange() end function this:OnHide() this.gameObject:SetActive(false) end function this:OnClose() end function this:OnDestroy() upStarPreList = {} end return this