local this={} this.tab=ConfigManager.GetConfig(ConfigName.Hongmeng) local Gold =0; local DemonCrystal = 0 local HeroList = {} local tempData = nil local TempItem = nil local ItemList = {} local Box = 0 local OpenBox = 0 local HeroCount this.timerEffect = nil function this:AwakeLength() HeroCount = 0 Box = #HarmonyManager.hongmengHeroInfos; OpenBox = #HarmonyManager.hongmengHeroInfos+2 for i = 1, #HarmonyManager.hongmengHeroInfos do if HarmonyManager.hongmengHeroInfos[i].heroId~="" then HeroCount = HeroCount + 1 end end if self.stage == 1 then this.NumText.text = string.format("%d/%d",HeroCount,Box) else local count = 0 for i = 1, #HarmonyManager.hongmengGuards do if HarmonyManager.hongmengGuards[i].heroId ~= "" then count = count + 1 end end this.NumText.text = string.format("%d/%d",HeroCount + count,Box + #HarmonyManager.hongmengGuards) end end function this:InitComponent(gameObject,Golds,DemonCrystals,stage) this.sortingOrder = 0 this.spLoader = SpriteLoader.New() Gold = Golds DemonCrystal = DemonCrystals self.stage = stage -- item预制件 this.item = Util.GetGameObject(gameObject , "HarmonyPanel/item") --btn组件 this.addBtn = Util.GetGameObject(gameObject,"HarmonyPanel/AddBtn") this.GongMingMsgBtn = Util.GetGameObject(gameObject,"HarmonyPanel/KnowGongMing") this.scrollbar = Util.GetGameObject(gameObject,"HarmonyPanel/Scrollbar"):GetComponent("Scrollbar") local scrollParent = Util.GetGameObject(gameObject, "HarmonyPanel/scroll"):GetComponent("RectTransform").rect this.NumText = Util.GetGameObject(gameObject,"HarmonyPanel/itemNumText"):GetComponent("Text") this.ScrollView=SubUIManager.Open(SubUIConfig.ScrollCycleView,Util.GetGameObject(gameObject,"HarmonyPanel/scroll").transform, this.item,this.scrollbar,Vector2.New(-scrollParent.x*2,-scrollParent.y*2),1,5,Vector2.New(42,35)) this.ScrollView.moveTween.MomentumAmount = 1 this.ScrollView.moveTween.Strength = 1 this.BoxList=0; this:AwakeLength() this:InitBox() end local TextList = {} local BoxList = {} function this:InitBox() local keys = GameDataBase.SheetBase.GetKeys(this.tab) --获取数据长度 this.ScrollView:SetData(keys,function (index, go) local key = keys[index] this.SingleBoxDataShow(go, this.tab[key], index) end,false,false) end function this.RunTimerFun() local refreshFunc = function() for key, value in pairs(ItemList) do if value.index <= #HarmonyManager.hongmengHeroInfos then if value.TimerText ~=nil and value.Empty ~=nil then if HarmonyManager.hongmengHeroInfos[value.index].time - GetTimeStamp() > 0 then if value.Empty ~=nil then end local time_content = TimeToFelaxible(HarmonyManager.hongmengHeroInfos[value.index].time - GetTimeStamp()) value.TimerText.text = string.format(Language[12204],time_content) else HarmonyManager.hongmengHeroInfos[value.index].time = 0 if value.TimerText then value.TimerText.text = "" if not value.AddImage.activeSelf then value.AddImage:SetActive(true) end end end end end end end if this.timerEffect ==nil then this.timerEffect = Timer.New(refreshFunc, 1, -1, true) end this.timerEffect:Start() refreshFunc() end function this.SingleBoxDataShow(go,boxData,index) local mask = Util.GetGameObject(go.transform,"Box/Empty/lock/mask"); local lock = Util.GetGameObject(go.transform,"Box/Empty/lock"); local Empty = Util.GetGameObject(go.transform,"Box/Empty") local TimerText = Util.GetGameObject(go.transform,"Box/Empty/frame/Text"):GetComponent("Text") local AddImage = Util.GetGameObject(go.transform,"Box/Empty/frame/AddImage") local redPoint = Util.GetGameObject(go.transform,"Box/Empty/redPoint") local heroObj = Util.GetGameObject(go.transform,"GameObject") Util.GetGameObject(go.transform, "GameObject/proIcon"):GetComponent("Image").sprite = this.spLoader:LoadSprite("r_hero_huo 1_zh") ItemList[go] ={} ItemList[go].index = index ItemList[go].TimerText = TimerText ItemList[go].Empty = Empty ItemList[go].AddImage = AddImage heroObj:SetActive(false) Empty:SetActive(true) mask:SetActive(true) lock:SetActive(true) redPoint:SetActive(false) Util.SetGray(lock,true) local gridData = HarmonyManager.hongmengHeroInfos[boxData.Id] TimerText.text = "" if gridData then if gridData.gridId <= Box then if gridData.heroId ~= "" then Empty:SetActive(false) heroObj:SetActive(true) local data = HeroManager.GetSingleHeroData(gridData.heroId) if data then this.SingleItemDataShow(go, data) else LogError("error: no hero data") end else if gridData.time - GetTimeStamp() <= 0 then TimerText.text = "" AddImage:SetActive(true) else AddImage:SetActive(false) end Empty:SetActive(true) heroObj:SetActive(false) mask:SetActive(false) lock:SetActive(false) redPoint:SetActive(false) end else end elseif index == Box + 1 then mask:SetActive(false) Util.SetGray(lock,false) tempData = boxData if HarmonyManager.RefreshOpenBoxPoint() then Gold = BagManager.GetTotalItemNum(UpViewRechargeType.XuanHuangZhiQi) CheckRedPointStatus(RedPointType.HongMeng_OpenBox) if Gold > boxData.PropPrice[2] then redPoint:SetActive(true) else redPoint:SetActive(false) end else redPoint:SetActive(false) end else TimerText.text = "" end Util.AddOnceClick(go,function() if gridData then if gridData.heroId ~= "" then TempItem = index HarmonyManager:SetMingListIndexData(boxData.Id) HarmonyManager.UnLoadGongMing = boxData.Id--发往服务器 UIManager.OpenPanel(UIName.HongMengUnLoadPanel) else if gridData.time == 0 then UIManager.OpenPanel(UIName.HongMengChooseHeroPanel,false) TempItem = index HarmonyManager.GongMingBox = boxData.Id -- print(Language[12205],HarmonyManager.GongMingBox) else local content = "" local str = ConfigManager.GetConfigData(ConfigName.SpecialConfig,100).Value local num = tonumber(string.split(str,"#")[1]) local money = math.ceil((HarmonyManager.hongmengHeroInfos[boxData.Id].time - GetTimeStamp()) / num)*tonumber(string.split(str,"#")[3]) content =string.format(Language[12189],money) MsgPanel.ShowTwo(content,function () MsgPanel.Hide() end,function () if BagManager.GetItemCountById(16) < money then PopupTipPanel.ShowTip(Language[10846]) MsgPanel.Hide() return end --向服务器 发消息 NetManager.UnlockGrid(boxData.Id,1,function () for i = 1, #HarmonyManager.hongmengHeroInfos do if HarmonyManager.hongmengHeroInfos[i].gridId ==boxData.Id then HarmonyManager.hongmengHeroInfos[i].time = 0 -- print(Language[12206]) break end end AddImage:SetActive(true) TimerText.text = "" end,Language[10731],Language[11934]) this.RunTimerFun() end) end end else if mask.activeSelf then PopupTipPanel.ShowTip(Language[12207]) else if lock.activeSelf then this:AddBoxFun(boxData) end end end end) function this:UpdateItemShow(go,boxData,msg) end end function this:AddBoxFun(boxData) local content = "" Gold = BagManager.GetTotalItemNum(UpViewRechargeType.XuanHuangZhiQi) DemonCrystal = BagManager.GetTotalItemNum(UpViewRechargeType.DemonCrystal) local keys = GameDataBase.SheetBase.GetKeys(this.tab) --获取数据长度 if #HarmonyManager.hongmengHeroInfos >= #keys then PopupTipPanel.ShowTip(Language[12208]) return end if Gold >= boxData.PropPrice[2] then content =string.format(Language[12209],boxData.PropPrice[2]) elseif Gold < boxData.PropPrice[2] then content=string.format(Language[12210],boxData.PropPrice[2],boxData.MoneyPrice[2]) end MsgPanel.ShowTwo(content,function () end,function () if Gold < boxData.PropPrice[2] and DemonCrystal < boxData.MoneyPrice[2] then PopupTipPanel.ShowTip(Language[10497]) return end --向服务器请求消息 NetManager.HongMengRequset(boxData.Id,function() Game.GlobalEvent:DispatchEvent(GameEvent.HongMeng.RereshNumText,boxData.Id) end) end,Language[10731],Language[11934]) end function this:BindEvent() end function this:OnOpen(_sortingOrder) this.sortingOrder = _sortingOrder this:AwakeLength() ItemList = {} this:InitBox() this.RunTimerFun() end function this.SingleItemDataShow(clone,Itemdata) Util.GetGameObject(clone.transform, "GameObject/frame"):GetComponent("Image").sprite = this.spLoader:LoadSprite(GetHeroQuantityImageByquality(Itemdata.heroConfig.Quality,Itemdata.star)) Util.GetGameObject(clone.transform, "GameObject/lv/Text"):GetComponent("Text").text = string.format("%d",Itemdata.lv) Util.GetGameObject(clone.transform, "GameObject/icon"):GetComponent("Image").sprite = this.spLoader:LoadSprite(Itemdata.icon) Util.GetGameObject(clone.transform, "GameObject/proIcon"):GetComponent("Image").sprite = this.spLoader:LoadSprite(GetProStrImageByProNum(Itemdata.changeProId)) local starGrid = Util.GetGameObject(clone.transform, "GameObject/star") local star,starType = Itemdata.GetStar(1) SetHeroStars(this.spLoader, starGrid, star,starType,nil,nil,Vector2.New(0,1)) local effect=SetHeroFlyEffect(Util.GetGameObject(clone.transform, "GameObject"),this.spLoader,Itemdata.star,this.sortingOrder+1,1,3,20) if effect then local particles=effect:GetComponentsInChildren(typeof(UnityEngine.ParticleSystem)) for key, value in pairs(particles:ToTable()) do local mat=value:GetComponent(typeof(UnityEngine.Renderer)) if mat.material.shader.name=="YXZ/Effect/Mix Masking(Without Moving)_alphablend" then mat.material.shader=poolManager:LoadAsset("YXZ_MixMaskingWithoutMoving_alphablend_1",poolManager.AssetType.Other) end end end local meshs1=starGrid:GetComponentsInChildren(typeof(UnityEngine.ParticleSystem)) for key, value in pairs(meshs1:ToTable()) do local mat=value:GetComponent(typeof(UnityEngine.Renderer)) if mat.material.shader.name=="UI Particles/Additive" then mat.material.shader=poolManager:LoadAsset("UI-Particle-Add_1",poolManager.AssetType.Other) end end Util.SetParticleSortLayer(starGrid,this.sortingOrder + 1) end function this:Refesh(id) Box = Box + 1 OpenBox = OpenBox + 1 Gold = BagManager.GetTotalItemNum(UpViewRechargeType.XuanHuangZhiQi) DemonCrystal = BagManager.GetTotalItemNum(UpViewRechargeType.DemonCrystal) if self.stage == 1 then Game.GlobalEvent:DispatchEvent(GameEvent.HongMeng.OnlyRefeshText,{HeroCount,Box}) else local count = 0 for i = 1, #HarmonyManager.hongmengGuards do if HarmonyManager.hongmengGuards[i].heroId ~= "" then count = count + 1 end end Game.GlobalEvent:DispatchEvent(GameEvent.HongMeng.OnlyRefeshText,{HeroCount + count,Box + #HarmonyManager.hongmengGuards}) end local data = {} data.gridId = id data.heroId = "" data.time = 0 table.insert(HarmonyManager.hongmengHeroInfos,data) local keys = GameDataBase.SheetBase.GetKeys(this.tab) --获取数据长度 this.ScrollView:SetData(keys,function (index, go) local key = keys[index] this.SingleBoxDataShow(go, this.tab[key], index) end,true,true) end function this:OpenBoxFun() if tempData then this:AddBoxFun(tempData) else PopupTipPanel.ShowTip(Language[12208]) return end end function this:SetEffectLayer(sort) this.ScrollView:ForeachItemGO(function (index, go) Util.SetParticleSortLayer(go,sort + 1) end) end function this:UpdateHero(Herodata) for i = 1, #HarmonyManager.hongmengHeroInfos do if HarmonyManager.GongMingBox ==HarmonyManager.hongmengHeroInfos[i].gridId then HarmonyManager.hongmengHeroInfos[i].heroId = Herodata.dynamicId HarmonyManager.hongmengHeroInfos[i].time = 0 break end end HeroCount = HeroCount + 1 if self.stage == 1 then Game.GlobalEvent:DispatchEvent(GameEvent.HongMeng.OnlyRefeshText,{HeroCount,Box}) else local count = 0 for i = 1, #HarmonyManager.hongmengGuards do if HarmonyManager.hongmengGuards[i].heroId~="" then count = count + 1 end end Game.GlobalEvent:DispatchEvent(GameEvent.HongMeng.OnlyRefeshText,{HeroCount + count,Box + #HarmonyManager.hongmengGuards}) end local keys = GameDataBase.SheetBase.GetKeys(this.tab) --获取数据长度 --刷新选择英雄界面的 数据 HarmonyManager:SetInitList() this.ScrollView:SetData(keys,function (index, go) local key = keys[index] this.SingleBoxDataShow(go, this.tab[key], index) end,true,true) this.RunTimerFun() end function this:UnLoadFun(msg) HeroCount = HeroCount - 1 for key, value in pairs(ItemList) do if value.index == TempItem then HarmonyManager.hongmengHeroInfos[value.index].time = msg.leftTime + GetTimeStamp() HarmonyManager.hongmengHeroInfos[value.index].heroId = "" end end --刷新选择英雄界面的 数据 HarmonyManager:SetInitList() if self.stage == 1 then Game.GlobalEvent:DispatchEvent(GameEvent.HongMeng.OnlyRefeshText,{HeroCount,Box, 1}) else local count = 0 for i = 1, #HarmonyManager.hongmengGuards do if HarmonyManager.hongmengGuards[i].heroId ~= "" then count = count + 1 end end Game.GlobalEvent:DispatchEvent(GameEvent.HongMeng.OnlyRefeshText,{HeroCount + count,Box + #HarmonyManager.hongmengGuards}) end local keys = GameDataBase.SheetBase.GetKeys(this.tab) --获取数据长度 ItemList = {} this.ScrollView:SetData(keys,function (index, go) local key = keys[index] this.SingleBoxDataShow(go, this.tab[key], index) end,true,true) this.RunTimerFun() end function this:OnlyRefeshHeroLv() ItemList = {} local keys = GameDataBase.SheetBase.GetKeys(this.tab) --获取数据长度 this.ScrollView:SetData(keys,function (index, go) local key = keys[index] this.SingleBoxDataShow(go, this.tab[key], index) end,true,true) end --界面关闭时调用(用于子类重写) function this:OnClose() if this.timerEffect then this.timerEffect:Stop() end end function this:AddListener() Game.GlobalEvent:AddEvent(GameEvent.HongMeng.RereshNumText,self.Refesh,self) Game.GlobalEvent:AddEvent(GameEvent.HongMeng.OpenBoxTips,self.OpenBoxFun,self) Game.GlobalEvent:AddEvent(GameEvent.HongMeng.ChooseData,self.UpdateHero,self) Game.GlobalEvent:AddEvent(GameEvent.HongMeng.UnLoadData,self.UnLoadFun,self) Game.GlobalEvent:AddEvent(GameEvent.Bag.BagGold,self.OnlyRefeshHeroLv,self) Game.GlobalEvent:AddEvent(GameEvent.HongMeng.UpdateGongMingLv,self.OnlyRefeshHeroLv,self) end function this:RemoveListener() Game.GlobalEvent:RemoveEvent(GameEvent.HongMeng.RereshNumText,self.Refesh,self) Game.GlobalEvent:RemoveEvent(GameEvent.HongMeng.OpenBoxTips,self.OpenBoxFun,self) Game.GlobalEvent:RemoveEvent(GameEvent.HongMeng.ChooseData,self.UpdateHero,self) Game.GlobalEvent:RemoveEvent(GameEvent.HongMeng.UnLoadData,self.UnLoadFun,self) Game.GlobalEvent:RemoveEvent(GameEvent.Bag.BagGold,self.OnlyRefeshHeroLv,self) Game.GlobalEvent:RemoveEvent(GameEvent.HongMeng.UpdateGongMingLv,self.OnlyRefeshHeroLv,self) end function this:OnShow(...) end return this