require("Base/BasePanel") LoadingPanel = Inherit(BasePanel) local this = LoadingPanel local tipsConfig = ConfigManager.GetConfig(ConfigName.Tips) local loadingConfig=ConfigManager.GetConfig(ConfigName.Loading) --初始化组件(用于子类重写) local spineName=nil local spineObj=nil local configLen=0 function LoadingPanel:InitComponent() -- this.Slider = Util.GetGameObject(self.gameObject, "Slider"):GetComponent("Slider") this.Tip = Util.GetGameObject(self.gameObject, "Slider/Image/LoadingText"):GetComponent("Text") this.SliderText = Util.GetGameObject(self.gameObject, "Slider/Fill Area/Fill/Image/Text"):GetComponent("Text") this.bg = Util.GetGameObject(self.gameObject, "bg1"):GetComponent("Image") this.heroPos=Util.GetGameObject(self.gameObject, "heroPos") screenAdapte(Util.GetGameObject(self.gameObject, "bg1")) screenAdapte(Util.GetGameObject(self.gameObject, "bg2")) end function LoadingPanel:OnOpen(sp) local index = 0 this.bg.sprite = sp math.randomseed(os.time()) index = math.random(1,16) this.Tip.text = GetLanguageStrById(tipsConfig[index].Tips) end -- 销毁时回收 function LoadingPanel:OnDestroy() end local callList = {} local curIndex = 0 local lerp = 0 local maxIndex = 0 local function update() if this.Slider and this.SliderText then lerp = math.clamp(lerp + Time.fixedDeltaTime * 15,0,1) local curValue = this.Slider.value * (1-lerp) + curIndex * lerp this.Slider.value = curValue local curTextValue = math.ceil((curValue/this.Slider.maxValue)*100) curTextValue = curTextValue > 100 and 100 or curTextValue this.SliderText.text = curTextValue .."%" end end function LoadingPanel.AddStep(func) table.insert(callList, func) maxIndex = maxIndex + 1 end function LoadingPanel.OnStep() lerp = 0 curIndex = curIndex + 1 if callList[curIndex] then callList[curIndex]() end end -- 登录时有接口报错时执行,防止登录报错卡死导致进不去游戏的问题 function LoadingPanel.ErrorStep(msg) -- if curIndex >= maxIndex then return end LogError("登录接口"..curIndex..", 报错:"..msg.errCode .. "|"..msg.errMsg) -- 强制进入下一步 LoadingPanel.OnStep() end function LoadingPanel.Start() -- 创建sprite加载器 this.spLoader = SpriteLoader.New() local spName = "loading1" -- local sprites = PackageManager.GetLoadingList() -- if sprites then -- math.randomseed(os.time()) -- local index = math.random(1, #sprites) -- spName = sprites[index] -- end --LoadStreamingTexture(this.spLoader, spName, function(sp) if #callList <= 1 then return end local heroConfig for k,v in ConfigPairs(loadingConfig) do configLen=configLen+1 end local spineLive=math.random(1,configLen) local curLoad=ConfigManager.TryGetConfigData(ConfigName.Loading,spineLive) if curLoad then if spineObj~=nil and spineName~=nil then poolManager:UnLoadLive(spineName, spineObj, PoolManager.AssetType.GameObject) end heroConfig=ConfigManager.TryGetConfigData(ConfigName.HeroConfig,curLoad.Hero) spName=curLoad.LoadingBG end UIManager.OpenPanel(UIName.LoadingPanel,this.spLoader:LoadSprite(spName)) --LogError("heroconfig i================="..heroConfig[10001].Id.." len==="..#heroConfig) if heroConfig then spineName=GetResourcePath(heroConfig.Live) spineObj= poolManager:LoadLive(spineName,this.heroPos.transform, Vector3.one * heroConfig.Scale, Vector3.New(heroConfig.Position[1], heroConfig.Position[2], 0)) spineObj.transform:SetParent(this.heroPos.transform) -- spineObj.transform.localPosition = Vector2.New(0, -20) -- spineObj.transform.localScale=Vector3.one end UpdateBeat:Add(update) lerp = 0 curIndex = 0 this.Slider.maxValue = #callList - 1 this.Slider.value = curIndex --"你知道嘛:充值会让你变得更强!" --"白驹工作室倾情奉献" LoadingPanel.OnStep() --end --end) end function LoadingPanel.End() UpdateBeat:Remove(update) this:ClosePanel() callList = {} if spineObj~=nil and spineName~=nil then poolManager:UnLoadLive(spineName, spineObj, PoolManager.AssetType.GameObject) end spineName=nil spineObj=nil this.spLoader:Destroy() end return LoadingPanel