require("Base/BasePanel") RewardItemPopup = Inherit(BasePanel) local this = RewardItemPopup local userLevelData = ConfigManager.GetConfig(ConfigName.PlayerLevelConfig) local itemConfig = ConfigManager.GetConfig(ConfigName.ItemConfig) local itemListPrefab local itemListPrefabMax local func local bagType=0 --1 正常背包 2 临时背包 3 公会车迟显示 --需要显示的小组件类型 -- 1 -- > 界面显示升级 -- 2 -- > 显示地图自由探索按钮 local compShowType = 0 local sortingOrderNum = 0 local callList = Stack.New() local isPopGetSSR = false local isOpenGeiSSRAvtivity = 0--五星成长礼拍脸 local isOpenGeiSSRAvtivityTime local isPlayerAniEnd = true local itemDataList local showHero = 1 local isBackBattle = false --初始化组件(用于子类重写) --此界面无奈做了两套显示逻辑一个是掉落小于等于25时背景根据元素数量做拉伸状态 另一个是元素大于25做界面做可滑动 function RewardItemPopup:InitComponent() this.btnBack = Util.GetGameObject(self.gameObject, "btnBack") this.dropPrefab = Util.GetGameObject(self.gameObject, "frame") --第一种显示 this.ScrollView = Util.GetGameObject(self.gameObject, "ScrollView") this.dropGrid= Util.GetGameObject(self.gameObject, "ScrollView/Content") itemListPrefab = {} for i = 1, 10 do --初始缓存10个 local view = SubUIManager.Open(SubUIConfig.ItemView, this.dropGrid.transform) view.gameObject.name = "frame"..i itemListPrefab[i] = view end --关卡等级经验 this.lvAndExpGo=Util.GetGameObject(self.gameObject, "ScrollView/Content/bg/lvAndExpGo") this.lv=Util.GetGameObject(self.gameObject, "ScrollView/Content/bg/lvAndExpGo/lv"):GetComponent("Text") this.exp=Util.GetGameObject(self.gameObject, "ScrollView/Content/bg/lvAndExpGo/exp"):GetComponent("Slider") this.expText=Util.GetGameObject(self.gameObject, "ScrollView/Content/bg/lvAndExpGo/exp/Text"):GetComponent("Text") this.lvUpImage=Util.GetGameObject(self.gameObject, "ScrollView/Content/bg/lvAndExpGo/lvUpImage") -- 地图探索按钮 this.btnMapBack = Util.GetGameObject(self.gameObject, "ScrollView/Content/bg/btnBack") -- 战斗结果按钮 this.btnResult = Util.GetGameObject(self.gameObject, "ScrollView/Content/bg/btnResult") this.btnBattleBack = Util.GetGameObject(self.gameObject, "ScrollView/Content/bg/btnBattleBack") -- 战斗回放按钮 -- 任意位置继续 this.btnGoOn = Util.GetGameObject(self.gameObject, "btnBack/Image") --第二种显示当超过25个元素时 this.ScrollView2 = Util.GetGameObject(self.gameObject, "bg") this.dropGridMax= Util.GetGameObject(self.gameObject, "bg/ScrollView2/ScrollView2/Content") itemListPrefabMax = {} for i = 1, 25 do --初始缓存10个 local view = SubUIManager.Open(SubUIConfig.ItemView, this.dropGridMax.transform) view.gameObject.name = "frame"..i itemListPrefabMax[i] = view end this.lvAndExpGoMax=Util.GetGameObject(self.gameObject, "bg/lvAndExpGo") this.lvMax=Util.GetGameObject(self.gameObject, "bg/lvAndExpGo/lv"):GetComponent("Text") this.expMax=Util.GetGameObject(self.gameObject, "bg/lvAndExpGo/exp"):GetComponent("Slider") this.expTextMax=Util.GetGameObject(self.gameObject, "bg/lvAndExpGo/exp/Text"):GetComponent("Text") this.lvUpImageMax=Util.GetGameObject(self.gameObject, "bg/lvAndExpGo/lvUpImage") -- 战斗结果按钮 this.btnResultMax = Util.GetGameObject(self.gameObject, "bg/btnResult") this.btnMapBackMax = Util.GetGameObject(self.gameObject, "bg/btnBack") -- this.btnBattleBackMax = Util.GetGameObject(self.gameObject, "bg/btnBattleBack") --车迟斗法 显示 this.guildCarDelay = Util.GetGameObject(self.gameObject, "ScrollView/Content/bg/guildCarDelay") this.guildCarDelaysoreNum = Util.GetGameObject(this.guildCarDelay.gameObject, "soreNum"):GetComponent("Text") this.guildCarDelayhurtNum = Util.GetGameObject(this.guildCarDelay.gameObject, "hurtNum"):GetComponent("Text") --公会十绝阵显示 this.guildDeathPos=Util.GetGameObject(self.gameObject,"ScrollView/Content/bg/guildDeathPos") this.guildDeathPos_CurScore=Util.GetGameObject(this.guildDeathPos,"curScore/num"):GetComponent("Text") this.guildDeathPos_State=Util.GetGameObject(this.guildDeathPos,"curScore/state"):GetComponent("Image") this.guildDeathPos_MaxScore=Util.GetGameObject(this.guildDeathPos,"maxScore/num"):GetComponent("Text") --大闹天功显示 this.expeditionGo=Util.GetGameObject(self.gameObject,"ScrollView/Content/bg/expeditionGo") --公会副本 this.guildTranscript=Util.GetGameObject(self.gameObject,"ScrollView/Content/bg/guildTranscript") this.guildTranscript_CurScore=Util.GetGameObject(this.guildTranscript,"curScore/num"):GetComponent("Text") end --绑定事件(用于子类重写) function RewardItemPopup:BindEvent() Util.AddClick(this.btnBack, function() if isPlayerAniEnd then PlaySoundWithoutClick(SoundConfig.Sound_UICancel) self:ClosePanel() if PlayerManager.IsGetFiveStarHero then--and OperatingManager.IsShowFiveStarPatch then Game.GlobalEvent:DispatchEvent(GameEvent.PatFace.PatFaceSend, FacePanelType.GrowGift, 5) PlayerManager.IsGetFiveStarHero = false end end end) Util.AddClick(this.btnMapBack, function () self:ClosePanel() end) Util.AddClick(this.btnMapBackMax, function () self:ClosePanel() end) Util.AddClick(this.btnResult, function () UIManager.OpenPanel(UIName.DamageResultPanel, 1) end) Util.AddClick(this.btnResultMax, function () UIManager.OpenPanel(UIName.DamageResultPanel, 1) end) Util.AddClick(this.btnBattleBack, function () LogGreen("isBackBattle = true") isBackBattle = true BattleManager.BattleBackFun() end) end --界面打开时调用(用于子类重写) --bagType 1 正常背包 2 地图临时背包 --drop 后端掉落原始数据 --func 回调 function RewardItemPopup:OnOpen(...) LogGreen("isBackBattle = false") isBackBattle = false isPlayerAniEnd = true isOpenGeiSSRAvtivity = 0 sortingOrderNum = self.sortingOrder local args = {...} local drop = args[1] bagType=args[2] func = args[3] if args[4] then compShowType = args[4] end if args[7] then showHero = false else showHero = true end local haveRecord = BattleRecordManager.isHaveRecord() this.btnResult:SetActive(haveRecord and args[5]) this.btnBattleBack:SetActive(haveRecord and args[5] and BattleManager.GetLastBattleType() ~= BATTLE_TYPE.MAP_FIGHT and not GuideManager.IsInMainGuide()) this.btnResultMax:SetActive(haveRecord and args[5]) -- 设置背景遮罩的显隐 local isHideBG = args[6] this.btnBack:GetComponent("Image").color = Color.New(0, 0, 0, isHideBG and 0 or 0.8) this.btnGoOn:SetActive(not isHideBG) if not drop then this.GuildCarDelayShow() this.guildCarDelay:SetActive(compShowType == 3) for i = 1, #itemListPrefab do itemListPrefab[i].gameObject:SetActive(false) end return end this.expeditionGo:SetActive(compShowType == 5) this.guildDeathPos:SetActive(compShowType == 4) this.guildTranscript:SetActive(compShowType == 6) if compShowType == 4 then this.GuildDeathPosShow() end if compShowType == 6 then this.GuildTranscriptShow() end local starItemDataList=BagManager.GetItemListFromTempBag(drop) -- LogError("获取宝物的数量:".. LengthOfTable(starItemDataList)) --做装备叠加特殊组拼数据 local equips = {} for i = 1, #starItemDataList do this.SetItemData2(starItemDataList[i]) if starItemDataList[i].itemType == 2 then--装备叠加 if equips[starItemDataList[i].sId] then equips[starItemDataList[i].sId].num = equips[starItemDataList[i].sId].num + 1 else equips[starItemDataList[i].sId] = starItemDataList[i] equips[starItemDataList[i].sId].num = 1 end end end itemDataList = {} for i, v in pairs(equips) do table.insert(itemDataList, v) end for i, v in pairs(starItemDataList) do if starItemDataList[i].itemType ~= 2 then table.insert(itemDataList, v) end end this.SetComPShowState(compShowType) if #itemDataList < 1 then self:ClosePanel() self:SelectCanPopUpBagMaxMessage() elseif #itemDataList <= 25 then self:SetItemShow(drop) elseif #itemDataList > 25 then self:SetItemShowMax(drop) end SoundManager.PlaySound(SoundConfig.Sound_Reward) this.ShowLvAndExp() self:SelectCanPopUpBagMaxMessage() end --一些元素的显隐 function this.SetComPShowState(type) this.btnBack:GetComponent("Button").enabled = type ~= 2 this.ScrollView:SetActive(#itemDataList <= 25 ) this.ScrollView2:SetActive(#itemDataList > 25 ) this.lvAndExpGo:SetActive(type == 1) this.btnMapBack:SetActive(type == 2) this.lvAndExpGoMax:SetActive(type == 1) this.btnMapBackMax:SetActive(type == 2) this.btnMapBackMax:SetActive(type == 2) this.guildCarDelay:SetActive(type == 3) this.guildDeathPos:SetActive(type == 4) this.guildTranscript:SetActive(type == 6) end function this.GuildCarDelayShow() if GuildCarDelayManager.score and GuildCarDelayManager.hurt then this.guildCarDelaysoreNum.text =GuildCarDelayManager.score this.guildCarDelayhurtNum.text = GuildCarDelayManager.hurt end end --十绝阵 挑战奖励掉落弹窗表现 function this.GuildDeathPosShow() if DeathPosManager.damage and DeathPosManager.historyMax then this.guildDeathPos_CurScore.text =DeathPosManager.damage this.guildDeathPos_MaxScore.text = DeathPosManager.historyMax local b=DeathPosManager.damage>DeathPosManager.historyMax or DeathPosManager.damageDeathPosManager.historyMax then this.guildDeathPos_State.sprite=Util.LoadSprite("r_hero_zhanlishangsheng_png") elseif DeathPosManager.damage 0 then HeroManager.DetectionOpenFiveStarActivity(isOpenGeiSSRAvtivity) end end, 0.5):Start() --在关卡界面获得装备 刷新下btview成员红点 -- Game.GlobalEvent:DispatchEvent(GameEvent.Equip.EquipChange) end) for i = #itemDataList, 1, -1 do isPlayerAniEnd = false local view = itemListPrefab[i] local curItemData=itemDataList[i] view:OnOpen(true,curItemData,1.15,true,true,false,self.sortingOrder) --view.gameObject:SetActive(false) callList:Push(function () local func = function() view.gameObject:SetActive(true) local btn = Util.GetGameObject(view.gameObject, "item/frame"):GetComponent("Button") btn.enabled = false PlayUIAnim(view.gameObject, function() btn.enabled = true end) --改为后端更新 --this.SetItemData2(itemDataList[i]) Timer.New(function () isPopGetSSR = false callList:Pop()() end, 0.05):Start() end if curItemData.configData and curItemData.itemType==3 and curItemData.configData.Quality == 5 then HeroManager.DetectionOpenFiveStarActivity(curItemData.configData.Star) end if curItemData.configData and curItemData.itemType==3 and curItemData.configData.Quality == 5 and showHero then isPopGetSSR = true isOpenGeiSSRAvtivity = curItemData.configData.Star UIManager.OpenPanel(UIName.DropGetSSRHeroShopPanel,curItemData.backData, func) elseif curItemData.configData and curItemData.itemType==1 and (curItemData.configData.ItemType == ItemType.Title or curItemData.configData.ItemType == ItemType.Ride) then--皮肤 坐骑 isPopGetSSR = true UIManager.OpenPanel(UIName.DropGetPlayerDecorateShopPanel,curItemData.backData, func) else func() end end) end callList:Pop()() end -- 根据物品列表数据显示物品 function RewardItemPopup:SetItemShowMax(drop) BagManager.OnShowTipDropNumZero(drop) if drop==nil then return end for i = 1, #itemDataList do itemDataList[i].itemConfig = itemConfig[itemDataList[i].sId] end self:ItemDataListSort(itemDataList) for i = 1, math.max(#itemDataList, #itemListPrefabMax) do local go = itemListPrefabMax[i] if not go then go = SubUIManager.Open(SubUIConfig.ItemView, this.dropGridMax.transform) go.gameObject.name = "frame"..i itemListPrefabMax[i] = go end go.gameObject:SetActive(false) end callList:Clear() callList:Push(function () if isOpenGeiSSRAvtivityTime then isOpenGeiSSRAvtivityTime:Stop() isOpenGeiSSRAvtivityTime = nil end isOpenGeiSSRAvtivityTime = Timer.New(function () isPlayerAniEnd = true if isOpenGeiSSRAvtivity > 0 then HeroManager.DetectionOpenFiveStarActivity(isOpenGeiSSRAvtivity) end end, 0.5):Start() isPlayerAniEnd = true if isOpenGeiSSRAvtivity > 0 then HeroManager.DetectionOpenFiveStarActivity(isOpenGeiSSRAvtivity) end --在关卡界面获得装备 刷新下btview成员红点 -- Game.GlobalEvent:DispatchEvent(GameEvent.Equip.EquipChange) end) for i = #itemDataList, 1, -1 do isPlayerAniEnd = false local view = itemListPrefabMax[i] local curItemData=itemDataList[i] view:OnOpen(true,curItemData,1.15,true,true,false,self.sortingOrder) --view.gameObject:SetActive(false) callList:Push(function () local func = function() view.gameObject:SetActive(true) local btn = Util.GetGameObject(view.gameObject, "item/frame"):GetComponent("Button") btn.enabled = false PlayUIAnim(view.gameObject, function() btn.enabled = true end) --改为后端更新 --this.SetItemData2(itemDataList[i]) if i <= 25 then Timer.New(function () isPopGetSSR = false callList:Pop()() end, 0.05):Start() else isPopGetSSR = false callList:Pop()() end end if curItemData.configData and curItemData.itemType==3 and curItemData.configData.Quality == 5 then HeroManager.DetectionOpenFiveStarActivity(curItemData.configData.Star) end if curItemData.configData and curItemData.itemType==3 and curItemData.configData.Quality == 5 and showHero then--五星英雄 isPopGetSSR = true isOpenGeiSSRAvtivity = curItemData.configData.Star UIManager.OpenPanel(UIName.DropGetSSRHeroShopPanel,curItemData.backData, func) elseif curItemData.configData and curItemData.itemType==1 and (curItemData.configData.ItemType == ItemType.Title or curItemData.configData.ItemType == ItemType.Ride) then--皮肤 坐骑 isPopGetSSR = true UIManager.OpenPanel(UIName.DropGetPlayerDecorateShopPanel,curItemData.backData, func) else func() end end) end callList:Pop()() end --存储本地 function this.SetItemData2(itemdata) if itemdata.itemType==1 then --后端更新 elseif itemdata.itemType==2 then if bagType==1 then EquipManager.UpdateEquipData(itemdata.backData) elseif bagType==2 then EquipManager.InitMapShotTimeEquipBagData(itemdata.backData) end elseif itemdata.itemType==3 then if bagType==1 then HeroManager.UpdateHeroDatas(itemdata.backData) elseif bagType==2 then HeroManager.InitMapShotTimeHeroBagData(itemdata.backData) end elseif itemdata.itemType==4 then if bagType==1 then TalismanManager.InitUpdateSingleTalismanData(itemdata.backData) elseif bagType==2 then TalismanManager.InitMapShotTimeTalismanBagData(itemdata.backData) end elseif itemdata.itemType==5 then if bagType==1 then --SoulPrintManager.InitServerData(itemdata.data) EquipTreasureManager.InitSingleTreasureData(itemdata.backData) elseif bagType==2 then --SoulPrintManager.InitMapShotTimeSoulPrintBagData(itemdata.backData) --SoulPrintManager.StoreData(itemdata.data) end elseif itemdata.itemType==6 then if bagType==1 then PokemonManager.UpdatePokemonDatas(itemdata.backData,true) elseif bagType==2 then end end end --关卡通关掉落时展示经验等级信息 function this.ShowLvAndExp() --this.lvAndExpGo:SetActive(compShowType == 1) if compShowType == 1 then if #itemDataList <= 25 then this.exp.value=PlayerManager.exp/userLevelData[PlayerManager.level].Exp this.expText.text=PlayerManager.exp.."/"..userLevelData[PlayerManager.level].Exp this.lv.text="LV."..PlayerManager.level this.lvUpImage:SetActive(FightPointPassManager.oldLevel 25 then this.expMax.value=PlayerManager.exp/userLevelData[PlayerManager.level].Exp this.expTextMax.text=PlayerManager.exp.."/"..userLevelData[PlayerManager.level].Exp this.lvMax.text="LV."..PlayerManager.level this.lvUpImageMax:SetActive(FightPointPassManager.oldLevel b.itemConfig.Quantity end end) end --界面关闭时调用(用于子类重写) function RewardItemPopup:OnClose() BagManager.SetDropIsSHowEquipPrint(true) local fightConFigData = ConfigManager.GetConfigData(ConfigName.MainLevelConfig, FightPointPassManager.curOpenFight) if compShowType == 1 then compShowType = 0 if FightPointPassManager.oldLevel