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/grid") itemListPrefab = {} for i = 1, 25 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/bottom/lvAndExpGo") this.lv=Util.GetGameObject(self.gameObject, "ScrollView/Content/bottom/lvAndExpGo/lv"):GetComponent("Text") this.exp=Util.GetGameObject(self.gameObject, "ScrollView/Content/bottom/lvAndExpGo/exp"):GetComponent("Slider") this.expText=Util.GetGameObject(self.gameObject, "ScrollView/Content/bottom/lvAndExpGo/exp/Text"):GetComponent("Text") this.lvUpImage=Util.GetGameObject(self.gameObject, "ScrollView/Content/bottom/lvAndExpGo/lvUpImage") -- 地图探索按钮 this.btnMapBack = Util.GetGameObject(self.gameObject, "ScrollView/Content/bottom/btnBack") -- 战斗结果按钮 this.btnResult = Util.GetGameObject(self.gameObject, "ScrollView/Content/bottom/btnResult") this.btnBattleBack = Util.GetGameObject(self.gameObject, "ScrollView/Content/bottom/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/Show/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/Show/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/Show/expeditionGo") --公会副本 this.guildTranscript=Util.GetGameObject(self.gameObject,"ScrollView/Content/Show/guildTranscript") this.guildTranscript_CurScore=Util.GetGameObject(this.guildTranscript,"curScore/num"):GetComponent("Text") --踏碎凌霄 this.tasuilingxiao=Util.GetGameObject(self.gameObject,"ScrollView/Content/Show/tasuilingxiao") this.tasuilingxiao_CurScore=Util.GetGameObject(this.tasuilingxiao,"curScore/num"):GetComponent("Text") this.tasuilingxiao_State=Util.GetGameObject(this.tasuilingxiao,"curScore/state"):GetComponent("Image") this.tasuilingxiao_MaxScore=Util.GetGameObject(this.tasuilingxiao,"maxScore/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(...) 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() and not MapManager.Mapping) -- this.btnResultMax:SetActive(haveRecord and args[5]) this.expeditionGo:SetActive(compShowType == 5) this.guildDeathPos:SetActive(compShowType == 4)--十绝阵 this.guildTranscript:SetActive(compShowType == 6) this.guildCarDelay:SetActive(compShowType == 3) this.tasuilingxiao:SetActive(compShowType == 7)--踏碎凌霄 -- 设置背景遮罩的显隐 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 compShowType == 3 and not drop then this.GuildCarDelayShow() this.guildCarDelay:SetActive(compShowType == 3) for i = 1, #itemListPrefab do itemListPrefab[i].gameObject:SetActive(false) end return end if compShowType == 4 then this.GuildDeathPosShow() end if compShowType == 6 then this.GuildTranscriptShow() end if compShowType == 7 then--踏碎凌霄 this.TaSuiLingXiaoShow(#drop.itemlist) if #drop.itemlist < 1 then for i = 1, #itemListPrefab do itemListPrefab[i].gameObject:SetActive(false) end return end 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) else self:SetItemShow(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 >= 1 ) -- 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) this.tasuilingxiao:SetActive(type == 7) 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 maxDmg or curDmg < maxDmg this.tasuilingxiao_State.gameObject:SetActive(b) -- this.tasuilingxiao:GetComponent("RectTransform").localPosition = Vector3.New(0,110*(math.floor(num/5)),0) if curDmg > maxDmg then this.tasuilingxiao_State.sprite=Util.LoadSprite("r_hero_zhanlishangsheng_png") elseif curDmg < maxDmg then this.tasuilingxiao_State.sprite=Util.LoadSprite("r_hero_zhanlixiajiang_png") end end end --公会副本 function this.GuildTranscriptShow() if GuildTranscriptManager.damage then this.guildTranscript_CurScore.text = GuildTranscriptManager.damage end end --当前背包是否已满 function RewardItemPopup:SelectCanPopUpBagMaxMessage() if(IndicationManager.canPopUpBagMaxMessage) then PopupTipPanel.ShowTip(Language[11507]) IndicationManager.canPopUpBagMaxMessage=false elseif(IndicationManager.getRewardFromMailMessage)then PopupTipPanel.ShowTip(Language[11508]) IndicationManager.getRewardFromMailMessage=false end end function RewardItemPopup:OnSortingOrderChange() if not itemDataList then return end for i = 1, #itemListPrefab do local view = itemListPrefab[i] local curItemData=itemDataList[i] view:OnOpen(true,curItemData,1.15,true,true,false,self.sortingOrder) end -- for i = 1, #itemListPrefabMax do -- local view = itemListPrefabMax[i] -- local curItemData=itemDataList[i] -- view:OnOpen(true,curItemData,1.15,true,true,false,self.sortingOrder) -- end end -- 根据物品列表数据显示物品 function RewardItemPopup:SetItemShow(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, #itemListPrefab) do local go = itemListPrefab[i] if not go then go = SubUIManager.Open(SubUIConfig.ItemView, this.dropGrid.transform) go.gameObject.name = "frame"..i itemListPrefab[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() --在关卡界面获得装备 刷新下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) 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) -- 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= 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= 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