using Thousandto.Core.Base; using System; using System.Collections.Generic; using System.Text; using Thousandto.Cfg.Data; using Thousandto.Code.Center; using Thousandto.Core.Asset; using UnityEngine; using EventManager = UnityEngine.Gonbest.MagicCube.EventManager; using EventSystemHandler = UnityEngine.Gonbest.MagicCube.EventSystemHandler; using EventMessage = UnityEngine.Gonbest.MagicCube.EventMessage; using EventConstDefine = UnityEngine.Gonbest.MagicCube.EventConstDefine; using PreLoadEventDefine = UnityEngine.Gonbest.MagicCube.PreLoadEventDefine; using FLogger = UnityEngine.Gonbest.MagicCube.FLogger; using FFileReader = UnityEngine.Gonbest.MagicCube.FFileReader; namespace Thousandto.Code.Logic { /// /// 资源预加载 /// public class PreloadAssetsSystem { private AssetPreLoader _loader = new AssetPreLoader(); public void Initialize() { _loader.OnFinishedHandler = EnterGame; _loader.OnProgressHandler = OnProgress; } public void Unitialize() { _loader.OnFinishedHandler = null; _loader.OnProgressHandler = null; } //预加载完成,进入游戏 public void EnterGame() { EventManager.SharedInstance.PushFixEvent(PreLoadEventDefine.EID_STEP_START, 5); GameCenter.GameStateSystem.ChangeState((int)GameStateId.Login); } public void OnProgress(float pValue) { GameCenter.UpdateSystem.SetPreloadedCount(_loader.LoadedCount); } //开始预加载 public void StartLoad() { EventManager.SharedInstance.PushFixEvent(PreLoadEventDefine.EID_STEP_START, 4); ReadyAllChars(x=> { _loader.AllChars = x; FLogger.Log("ReadAllChars Count:", x.Length.ToString()); }); _loader.PathList = ReadyAssetPaths(); #if !UNITY_EDITOR || FUNCELL_LAUNCHER //这里特效纹理的Bundle必须预先加载,要不然第一个显示的特效就会出现方块。 VFXTextureAssetsLoader.PreLoadBundle(() => { GameCenter.UpdateSystem.SetPreloadTotal(_loader.PathList.Count); _loader.Start(); }); #else GameCenter.UpdateSystem.SetPreloadTotal(_loader.PathList.Count); _loader.Start(); #endif } //准备资源路径 private List ReadyAssetPaths() { List result = new List(); var itor = DeclarePreload.CacheData.GetEnumerator(); while (itor.MoveNext()) { result.Add(new PreLoadAssetInfo() { Type = itor.Current.Value.Type, AssetName = itor.Current.Value.Path }); } //强制预加载主界面 #if USE_PC_MODEL result.Add(new PreLoadAssetInfo() { Type = 9, AssetName = "UIMainFormPC" }); #else result.Add(new PreLoadAssetInfo() { Type = 9, AssetName = "UIMainForm" }); #endif return result; } //处理所有的字体字符串 private void ReadyAllChars(Action callBack) { //只针对中文和台湾进行字符串处理 if (LanguageSystem.Lang == LanguageConstDefine.CH || LanguageSystem.Lang == LanguageConstDefine.TW) { //如果空余内存大于300M,或者总内存为1200,则重新刷新UIFont if (HardwareManager.MemoryInfo.GetFreeMemory() > 300 || HardwareManager.MemoryInfo.GetSumMemory() > 1200) { //如果系统能支持2048大小的图片 if (SystemInfo.maxTextureSize >= 2048) { var fileName = string.Format(FileUtils.AllCharConfigPath, LanguageSystem.Lang); FLogger.Log("ReadAllChars File:", fileName); FFileReader.ReadTextAsync(fileName, callBack); return; } } } callBack(string.Empty); } } }