require("Base/BasePanel") EquipTreasureStrongPopup = Inherit(BasePanel) local itemConfig=ConfigManager.GetConfig(ConfigName.ItemConfig) local jewelConfig=ConfigManager.GetConfig(ConfigName.JewelConfig) local this=EquipTreasureStrongPopup local curEquipData local haveTreasures={} local type local isMatEnough=true local matId=0 local isMax=false local isEnough = false local curIndex local datas local isGongMing = false --初始化组件(用于子类重写) function EquipTreasureStrongPopup:InitComponent() this.spLoader = SpriteLoader.New() this.Image2 = Util.GetGameObject(self.transform, "bg/Image") this.content = Util.GetGameObject(self.transform, "bg/content") this.btnBack= Util.GetGameObject(this.content,"btnBack") this.titleTxt=Util.GetGameObject(this.content,"name"):GetComponent("Text") this.itemPre = Util.GetGameObject(this.content,"itemView") this.firstScroll=Util.GetGameObject(this.content,"firstScroll") this.secondScroll=Util.GetGameObject(this.content,"secondScroll") this.properItemPre = Util.GetGameObject( this.content,"propertyPre") this.propertyGrid=Util.GetGameObject(this.secondScroll,"grid") this.costItemPre=Util.GetGameObject(this.content,"costItemPre") this.costPreList = {} this.costItemGrid=Util.GetGameObject(this.content,"costGrid") this.hintTxt=Util.GetGameObject(this.content,"hintTxt"):GetComponent("Text") this.btnGrid=Util.GetGameObject(this.content,"btnGrid") this.btnRefine=Util.GetGameObject(this.btnGrid,"btnRefine") this.btnRefineText = Util.GetGameObject(this.btnRefine,"Text"):GetComponent("Text") this.btnStrong=Util.GetGameObject(this.btnGrid,"btnStrong") this.btnStrongText = Util.GetGameObject(this.btnStrong,"Text"):GetComponent("Text") this.btnShenying=Util.GetGameObject(this.btnGrid,"btnShenying") this.btnShenyingText = Util.GetGameObject(this.btnShenying,"Text"):GetComponent("Text") this.btn_strongPage=Util.GetGameObject(this.content,"btnList/btnStrong") this.btn_refinePage=Util.GetGameObject(this.content,"btnList/btnRefine") this.btn_shenyingPage=Util.GetGameObject(this.content,"btnList/btnShenying") this.btn_strongPageRed=Util.GetGameObject(this.btn_strongPage,"red") this.btn_refinePageRed=Util.GetGameObject(this.btn_refinePage,"red") this.btn_shenyingPageRed=Util.GetGameObject(this.btn_shenyingPage,"red") this.selectBtn=Util.GetGameObject(this.content,"btnList/selectBtn") this.selectText = Util.GetGameObject(this.selectBtn,"Text"):GetComponent("Text") this.treasureDatas = {} this.treasureDatas2 = {} this.costTreasureDatas = {} this.properList = {} this.properList[0] = {} this.properList[0].go = this.properItemPre this.properList[0].leftTxt = Util.GetGameObject(this.properItemPre,"leftTxt"):GetComponent("Text") this.properList[0].rightTxt = Util.GetGameObject(this.properItemPre,"rightTxt"):GetComponent("Text") local rootHight = this.firstScroll.transform.rect.height local rootWidth=this.firstScroll.transform.rect.width this.firstScrollCycleView = SubUIManager.Open(SubUIConfig.ScrollCycleView,this.firstScroll.transform,this.itemPre,nil, Vector2.New(rootWidth,rootHight), 1, 5, Vector2.New(15,50)) this.gongming = Util.GetGameObject(this.content,"gongming") this.gongming.gameObject:SetActive(false) this.select = Util.GetGameObject(this.content,"select") end --绑定事件(用于子类重写) function EquipTreasureStrongPopup:BindEvent() --关闭按钮 Util.AddClick(this.btnBack, function() PlaySoundWithoutClick(SoundConfig.Sound_UICancel) self:ClosePanel() end) --强化页签 Util.AddClick(this.btn_strongPage, function() if type == 1 then return end this:SetWindShow(1,0) this:RefreshRedPoint(0,false) end) --精炼页签 Util.AddClick(this.btn_refinePage, function() if type == 2 then return end this:SetWindShow(2,0) this:RefreshRedPoint(0,false) end) --神应页签 Util.AddClick(this.btn_shenyingPage, function() if type == 3 then return end this:SetWindShow(3,0) this:RefreshRedPoint(0,false) end) --强化按钮 Util.AddClick(this.btnStrong, function() if isGongMing then return end --如果强化界面 强化到最高等级谈提示 精炼界面 就切界面 if type==1 then if isMax then PopupTipPanel.ShowTip(Language[11770]) return end else this:SetWindShow(1,0) return end --材料是否足够 if isMatEnough==false then UIManager.OpenPanel(UIName.RewardItemSingleShowPopup,matId) return end NetManager.EquipTreasureBuildRequest(curEquipData.idDyn,1,nil,function (msg) EquipTreasureManager.ChangeTreasureLv(curEquipData.idDyn,type) this.treasureDatas[curIndex]:OnOpen(false, {curEquipData.id,0}, 1, false, false, false, 0,curEquipData.idDyn) this:SetWindShow(type,0) this:RefreshRedPoint(0,true) if isMax then PopupTipPanel.ShowTip(Language[11772]) else --PopupTipPanel.ShowTip("强化成功") end local oldWarPowerValue = EquipTreasureManager.CalculateWarForceBySid(curEquipData.id,curEquipData.lv - 1,curEquipData.refineLv,curEquipData.treeLv) local newWarPowerValue = EquipTreasureManager.CalculateWarForceBySid(curEquipData.id,curEquipData.lv,curEquipData.refineLv,curEquipData.treeLv) if oldWarPowerValue ~= newWarPowerValue then UIManager.OpenPanel(UIName.WarPowerChangeNotifyPanelV2,{oldValue = oldWarPowerValue,newValue = newWarPowerValue}) end Game.GlobalEvent:DispatchEvent(GameEvent.Treasure.TreasureLvUp) end) end) --精炼按钮 Util.AddClick(this.btnRefine, function() --如果精炼界面 精炼到最高等级谈提示 否 强化界面 就切界面 if type==2 then if isMax then PopupTipPanel.ShowTip(Language[11773]) return end else this:SetWindShow(2,0) return end if isMatEnough==false then UIManager.OpenPanel(UIName.RewardItemSingleShowPopup,matId) return end local maters={} if curEquipData.refineConfig.JewelExpend then for i = 1, #curEquipData.refineConfig.JewelExpend do local id = curEquipData.refineConfig.JewelExpend[i] local type = id[1] local equips,num=EquipTreasureManager.GetEnoughRefineTreasure(type,curEquipData.idDyn) local equipValue={} equipValue.equip=equips equipValue.needNum=id[2] haveTreasures[type]=equipValue end end if haveTreasures then for i, v in pairs(haveTreasures) do local index=1 if v.equip then for i, value in pairs(v.equip) do if #maters < v.needNum then maters[index]=value.idDyn index=index+1 end end end end end NetManager.EquipTreasureBuildRequest(curEquipData.idDyn,2,maters,function (msg) if maters then for i = 1, #maters do EquipTreasureManager.RemoveTreasureByIdDyn(maters[i]) end end EquipTreasureManager.ChangeTreasureLv(curEquipData.idDyn,type) this:SetWindShow(type,0) this:RefreshRedPoint(0,true) this.treasureDatas[curIndex]:OnOpen(false, {curEquipData.id,0}, 1, false, false, false, 0,curEquipData.idDyn) if isMax then PopupTipPanel.ShowTip(Language[11774]) else --PopupTipPanel.ShowTip("精炼成功") end local oldWarPowerValue = EquipTreasureManager.CalculateWarForceBySid(curEquipData.id,curEquipData.lv ,curEquipData.refineLv - 1,curEquipData.treeLv) local newWarPowerValue = EquipTreasureManager.CalculateWarForceBySid(curEquipData.id,curEquipData.lv,curEquipData.refineLv,curEquipData.treeLv) if oldWarPowerValue ~= newWarPowerValue then UIManager.OpenPanel(UIName.WarPowerChangeNotifyPanelV2,{oldValue = oldWarPowerValue,newValue = newWarPowerValue}) end Game.GlobalEvent:DispatchEvent(GameEvent.Treasure.TreasureLvUp) end) return end) --神应升级按钮 Util.AddClick(this.btnShenying, function() --材料是否足够 if isMatEnough==false then UIManager.OpenPanel(UIName.RewardItemSingleShowPopup,matId) return end if isMax then PopupTipPanel.ShowTip("等级已达上限") return end NetManager.SendUpgradeGodTreeRequest(curEquipData.idDyn,1,function (msg) PopupTipPanel.ShowTip("升级成功") EquipTreasureManager.ChangeTreasureLv(curEquipData.idDyn,type) Timer.New(function() this:SetWindShow(type,0) end,0.1):Start() this.treasureDatas[curIndex]:OnOpen(false, {curEquipData.id,0}, 1, false, false, false, 0,curEquipData.idDyn) this:RefreshRedPoint(0.2,true) local oldWarPowerValue = EquipTreasureManager.CalculateWarForceBase(curEquipData.id,curEquipData.lv ,curEquipData.refineLv,curEquipData.treeLv-1,curEquipData) local newWarPowerValue = EquipTreasureManager.CalculateWarForceBase(curEquipData.id,curEquipData.lv,curEquipData.refineLv,curEquipData.treeLv,curEquipData) if oldWarPowerValue ~= newWarPowerValue then UIManager.OpenPanel(UIName.WarPowerChangeNotifyPanelV2,{oldValue = oldWarPowerValue,newValue = newWarPowerValue}) end -- 宝物属性改变需要重新计算战斗力 HeroPropManager.SetDirtyByType(curEquipData.upHeroDid, Hero_Prop_Type.EquipTreasure) -- EquipTreasureManager.SetTreasureDirty(curEquipData.idDyn, true) Game.GlobalEvent:DispatchEvent(GameEvent.Treasure.TreasureLvUp) end) end) end function EquipTreasureStrongPopup:RefreshRedPoint(delta,isRefreshTabRed) Timer.New(function() for k,v in pairs(this.treasureDatas2) do local redShow = HeroManager.CheckIsUpTreasure(v.data.idDyn,type) v.red.gameObject:SetActive(redShow) end this.select.transform:SetParent(curIndex.transform) this.select:GetComponent("RectTransform").anchoredPosition3D = Vector3.New(-8.5,5.04,0) if type==1 then this.selectText.text="强 化" elseif type==2 then this.selectText.text="精 炼" else this.selectText.text="神 应" end -- this.selectText.text = type == 1 and "强 化" or "精 炼" this.select.transform.localScale = Vector3.one this.select.gameObject:SetActive(true) this.select.transform:SetSiblingIndex(1) end,delta):Start() if isRefreshTabRed then local redDataStrong ,redDataRefine,redDataShenying = false,false,false for k,v in pairs(datas) do if not redDataStrong then redDataStrong = HeroManager.CheckIsUpTreasure(v.idDyn,1) end if not redDataRefine then redDataRefine = HeroManager.CheckIsUpTreasure(v.idDyn,2) end if not redDataShenying then redDataShenying = HeroManager.CheckIsUpTreasure(v.idDyn,3) end end this.btn_strongPageRed.gameObject:SetActive(redDataStrong) this.btn_refinePageRed.gameObject:SetActive(redDataRefine) this.btn_shenyingPageRed.gameObject:SetActive(redDataShenying) end end --界面打开时调用(用于子类重写) function EquipTreasureStrongPopup:OnOpen(...) local args={...} curEquipData = args[1] type = args[2] end function EquipTreasureStrongPopup:OnShow() datas = EquipTreasureManager.GetAllHeroEquipedTreasureData() this.btn_shenyingPage:SetActive(CheckFunctionOpen(FUNCTION_OPEN_TYPE.SACREDTREE)) this.formationInfo = FormationManager.GetFormationByID(FormationTypeDef.FORMATION_NORMAL) table.sort(datas,function(a,b) local aIsMainFormation = this:GetHeroIsMainFormation(a.upHeroDid) local bIsMainFormation = this:GetHeroIsMainFormation(b.upHeroDid) if aIsMainFormation and bIsMainFormation then if a.upHeroDid ~= b.upHeroDid then return aIsMainFormation.position < bIsMainFormation.position else return a.equipType < b.equipType end elseif not aIsMainFormation and not bIsMainFormation then if a.quantity == b.quantity then return a.id < b.id else return a.quantity > b.quantity end else return aIsMainFormation end end) this:ShowTopDataList(datas) this:SetWindShow(type,0.2) this:RefreshRedPoint(0.5,true) end function EquipTreasureStrongPopup:GetHeroIsMainFormation(HeroId) for k,v in ipairs(this.formationInfo.teamHeroInfos) do if HeroId == v.heroId then return v end end return nil end function EquipTreasureStrongPopup:ShowTopDataList(list) if not this.treasureDatas then this.treasureDatas = {} end this.firstScrollCycleView:ForeachItemGO(function(index, go) go.gameObject:SetActive(false) end) this.firstScrollCycleView:SetData(list,function(index, go) this:SetScrollPre(go,list[index],index) if not this.treasureDatas2[go] then this.treasureDatas2[go] = {} end this.treasureDatas2[go].red = Util.GetGameObject(go,"red") this.treasureDatas2[go].data = list[index] end,false,false) for i = 1,#list do if list[i].idDyn == curEquipData.idDyn then this.firstScrollCycleView:SetIndex(i) break end end end function EquipTreasureStrongPopup:SetScrollPre(go,data,_index) if data.idDyn == curEquipData.idDyn then curIndex = go end local btn = Util.GetGameObject(go,"btn") local name = Util.GetGameObject(go,"nameDi/Text") go.gameObject:SetActive(true) if not this.treasureDatas[go] then this.treasureDatas[go] = SubUIManager.Open(SubUIConfig.ItemView,go.transform) this.treasureDatas[go].transform:SetAsFirstSibling() end this.treasureDatas[go]:OnOpen(false, {data.id,0}, 1, false, false, false, 0,data.idDyn) name:GetComponent("Text").text = HeroManager.GetSingleHeroData(data.upHeroDid).heroConfig.ReadingName Util.AddOnceClick(btn,function() if curEquipData.idDyn == data.idDyn then return end this.select.transform:SetParent(go.transform) this.select:GetComponent("RectTransform").anchoredPosition3D = Vector3.New(-8.5,5.04,0) this.select.gameObject:SetActive(true) this.select.transform:SetSiblingIndex(1) curEquipData = data curIndex = go this:SetWindShow(type,0) end) end --设置界面显示 1.强化 2.精炼 3.神应 function EquipTreasureStrongPopup:SetWindShow(_index) haveTreasures = {} type = _index curEquipData = EquipTreasureManager.GetSingleEquipTreasreData(curEquipData.idDyn) local items, propertyShow if _index == 1 then this.titleTxt.text = Language[11775] this.btnRefine:SetActive(false) this.btnStrong:SetActive(true) this.btnShenying:SetActive(false) this.SetBtnSelect(this.btn_strongPage) isMax = curEquipData.lv == curEquipData.maxLv this.properList[0].leftTxt.text = "强化等级" if isMax then this.properList[0].rightTxt.text = Language[11062] this.btnStrong.gameObject:SetActive(false) else this.btnStrongText.text = Language[11777] this.properList[0].rightTxt.text = string.format( "%d/%d",curEquipData.lv+1,curEquipData.maxLv) end propertyShow = EquipTreasureManager.GetCurrLvAndNextLvPropertyValue(1,curEquipData.levelPool,curEquipData.lv) --显示消耗 items = HeroManager.GetCostItems(curEquipData.idDyn,curEquipData.strongConfig) if curEquipData.quantity == 6 then this.hintTxt.text = "强化等级已达上限" else this.hintTxt.text = Language[11778] end elseif _index == 2 then this.titleTxt.text=Language[11779] this.btnRefine:SetActive(true) this.btnStrong:SetActive(false) this.btnShenying:SetActive(false) this.SetBtnSelect(this.btn_refinePage) isMax=curEquipData.refineLv==curEquipData.maxRefineLv this.properList[0].leftTxt.text = "精炼等级" if isMax then this.properList[0].rightTxt.text = Language[11062] this.btnRefine.gameObject:SetActive(false) else this.btnRefineText.text=Language[11781] this.properList[0].rightTxt.text = string.format( "%d/%s",curEquipData.refineLv+1,curEquipData.maxRefineLv) end propertyShow = EquipTreasureManager.GetCurrLvAndNextLvPropertyValue(2,curEquipData.refinePool,curEquipData.refineLv) items = HeroManager.GetCostItems(curEquipData.idDyn,curEquipData.refineConfig) if curEquipData.quantity == 6 then this.hintTxt.text = "精炼等级已达上限" else this.hintTxt.text=Language[11782] end else this.titleTxt.text="神应" this.btnRefine:SetActive(false) this.btnStrong:SetActive(false) this.btnShenying:SetActive(true) this.SetBtnSelect(this.btn_shenyingPage) isMax=curEquipData.treeLv>=curEquipData.maxTreeLv this.properList[0].leftTxt.text = "神应等级"..curEquipData.treeLv if isMax then this.properList[0].rightTxt.text = Language[11062] this.btnRefine.gameObject:SetActive(false) else this.btnShenyingText.text="升 级" this.properList[0].rightTxt.text = curEquipData.treeLv+1 end propertyShow = SacredTreeManager.GetPropText(curEquipData.treeLv,curEquipData.id) if isMax then this.hintTxt.text = "神应等级已达上限" else items = HeroManager.GetHoodTreeUpCost(curEquipData.treeLv) end end isGongMing = false --if HarmonyManager.IsInfo(curEquipData.upHeroDid) and HarmonyManager.GetSingleAdditions(index) ~= -1 and _index == 1 then if HarmonyManager.IsInfo(curEquipData.upHeroDid) and _index == 1 then isGongMing = true this.hintTxt.text = "共鸣中的宝物无法强化" this.hintTxt.gameObject:SetActive(true) this.Image2.gameObject:SetActive(false) this.costItemGrid.gameObject:SetActive(false) this.btnGrid.gameObject:SetActive(false) else this.hintTxt.gameObject:SetActive(isMax) this.Image2.gameObject:SetActive(not isMax) this.costItemGrid.gameObject:SetActive(not isMax) this.btnGrid.gameObject:SetActive(not isMax) end this:SetPropertyShow(propertyShow) this:CostShow(items) end function EquipTreasureStrongPopup:CostShow(items) isMatEnough=true if not this.costItemPreList then this.costItemPreList = {} end --显示消耗物品 if items then for i = 1,math.max(#items,#this.costItemPreList) do if not items[i] then this.costItemPreList[i].gameObject:SetActive(false) this.costPreList[i].gameObject:SetActive(false) else if not this.costPreList[i] then this.costPreList[i] = newObjToParent(this.costItemPre,this.costItemGrid) end if not this.costItemPreList[i] then this.costItemPreList[i] = SubUIManager.Open(SubUIConfig.ItemView,this.costPreList[i].transform) end this.costPreList[i].gameObject:SetActive(true) this.costItemPreList[i].gameObject:SetActive(true) this.costItemPreList[i]:OnOpen(false,{items[i].id,0}, 0.8, true, false , false, 0) if items[i].isEnough then this.costItemPreList[i].name:GetComponent("Text").text = string.format("%s/%s",PrintWanNum2(items[i].haveNum),PrintWanNum2(items[i].needNum)) else --如果材料不足默认弹第一个不足的材料tip if isMatEnough then isMatEnough=false matId=items[i].id end this.costItemPreList[i].name:GetComponent("Text").text = string.format("%s/%s",PrintWanNum2(items[i].haveNum),PrintWanNum2(items[i].needNum)) end end end else this.costItemGrid.gameObject:SetActive(false) end end --设置属性的显示 function EquipTreasureStrongPopup:SetPropertyShow(_infos) if this.hintTxt.gameObject.activeInHierarchy then -- this.properList[0].go.gameObject:SetActive(false) this.propertyGrid.gameObject:SetActive(false) return end this.propertyGrid.gameObject:SetActive(true) if isGongMing then for i = 0, #this.properList do this.properList[i].go.gameObject:SetActive(false) end --this.gongming.gameObject:SetActive(true) return end --this.gongming.gameObject:SetActive(false) this.properList[0].go.gameObject:SetActive(true) for i = 1, #this.properList do this.properList[i].go.gameObject:SetActive(false) end local index = 1 for key, value in pairs(_infos) do if not this.properList[index] then this.properList[index] = {} this.properList[index].go = newObjToParent(this.properItemPre,this.propertyGrid) this.properList[index].leftTxt = Util.GetGameObject(this.properList[index].go,"leftTxt"):GetComponent("Text") this.properList[index].rightTxt = Util.GetGameObject(this.properList[index].go,"rightTxt"):GetComponent("Text") end this.properList[index].go.gameObject:SetActive(true) local proper=ConfigManager.GetConfigData(ConfigName.PropertyConfig,key) if proper.Style==1 then this.properList[index].leftTxt.text=string.format("%s+%s",GetLanguageStrById(proper.Info),value.currValue) this.properList[index].rightTxt.text= isMax and Language[11062] or value.nextValue else this.properList[index].leftTxt.text=GetLanguageStrById(proper.Info).."+"..value.currValue/100 .."%" this.properList[index].rightTxt.text = isMax and Language[11062] or value.nextValue/100 .."%" end index = index + 1 end LayoutRebuilder.ForceRebuildLayoutImmediate(this.secondScroll.transform) end --设置物体选中 function this.SetBtnSelect(_parObj) this.selectBtn.transform:SetParent(_parObj.transform) this.selectBtn.transform.localScale = Vector3.one this.selectBtn.transform.localPosition=Vector3.zero this.selectBtn.transform:SetSiblingIndex(1) end --界面关闭时调用(用于子类重写) function EquipTreasureStrongPopup:OnClose() isEnough=true isMax=false isMatEnough=false haveTreasures={} matId = 0 end --界面销毁时调用(用于子类重写) function EquipTreasureStrongPopup:OnDestroy() curEquipData=nil type=0 this.spLoader:Destroy() Util.ClearChild(this.propertyGrid.transform) this.properList = {} for i = 1,#this.costItemPreList do SubUIManager.Close(this.costItemPreList[i]) end this.costItemPreList = {} Util.ClearChild(this.costItemGrid.transform) this.costPreList = {} for k,v in pairs(this.treasureDatas) do SubUIManager.Close(v) end this.treasureDatas = {} SubUIManager.Close(this.firstScrollCycleView) end return EquipTreasureStrongPopup