| using System.Collections; | 
| using System.Collections.Generic; | 
| using UnityEngine; | 
| using System.IO; | 
| using System; | 
| using Cysharp.Threading.Tasks; | 
|   | 
|   | 
| public class BuiltInAssetCopyTask : LaunchTask | 
| { | 
|     bool firstLaunch = false; | 
|   | 
|     public override void Begin() | 
|     { | 
|         duration = Mathf.Max(0.2f, expectTime);  //非安卓平台的时间,安卓由sdk拷贝完成回调 | 
|   | 
|         if (Application.isEditor) | 
|         { | 
|             EditorCopyAsset(); | 
|         } | 
|         else | 
|         { | 
|             //安卓每次由sdk回调拷贝成功,其他平台由unity自己存储标记 | 
|             switch (Application.platform) | 
|             { | 
|                 case RuntimePlatform.Android: | 
|                     AndroidCopyAsset(); | 
|                     break; | 
|                 case RuntimePlatform.IPhonePlayer: | 
|                     IosCopyAsset(); | 
|                     break; | 
|                 case RuntimePlatform.WindowsPlayer: | 
|                     StandaloneCopyAsset(); | 
|                     break; | 
|             } | 
|         } | 
|   | 
|         if (!firstLaunch) | 
|         { | 
|             //LoadInitalConfig().Forget(); | 
|             done = true; | 
|         } | 
|     } | 
|   | 
|     //应该是下载最新的表格后再次加载 非拷贝 | 
|     //protected async UniTask LoadInitalConfig() | 
|     //{ | 
|     //    await ConfigManager.Instance.LoadConfigByType(typeof(InitialFunctionConfig)); | 
|   | 
|     //    done = true; | 
|     //} | 
|   | 
|     public override void End() | 
|     { | 
|         if (AssetSource.isUseAssetBundle) | 
|         {  | 
|             AssetBundleUtility.Instance.InitBuiltInAsset(); | 
|   | 
|             LaunchInHot.Instance.InitSystemMgr(); | 
|   | 
|             //  这里还没开始加载配置 但是提前加载了供LaunchWin使用 | 
|             PriorLanguageConfig.LazyInit(); | 
|             InitialFunctionConfig.LazyInit(); | 
|   | 
|             UIManager.Instance.OpenWindow<LaunchWin>(); | 
|         } | 
|   | 
|         // ConfigInitiator.SyncInit(); | 
|         UIManager.Instance.CloseWindow<DownLoadWin>(); | 
|         UIManager.Instance.CloseWindow<VersionUpdateWin>(); | 
|         Language.InitDefaultLanguage(); | 
|     } | 
|   | 
|     public override void Update() | 
|     { | 
|         if (done) | 
|         { | 
|             return; | 
|         } | 
|         if (!Application.isEditor) | 
|         { | 
|             //安卓每次由sdk回调拷贝成功,其他平台由unity自己存储标记 | 
|             if (Application.platform == RuntimePlatform.Android) | 
|             { | 
|                 AndroidWaitCopyAssetComplete(); | 
|             } | 
|             else | 
|             { | 
|                 if (timer > duration) | 
|                 { | 
|                     done = true; | 
|                 } | 
|                 else | 
|                 { | 
|                     done = false; | 
|                     progress = timer / duration; | 
|                 } | 
|             } | 
|         } | 
|   | 
|   | 
|         timer += Time.deltaTime; | 
|     } | 
|   | 
|   | 
|     private void AndroidWaitCopyAssetComplete() | 
|     { | 
|         if (!SDKUtils.Instance.AssetCopyFinished) | 
|         { | 
|             done = false; | 
|             progress = timer / duration; | 
|         } | 
|         else | 
|         { | 
|             done = true; | 
|         } | 
|     } | 
|   | 
|   | 
|     private void AndroidCopyAsset() | 
|     { | 
|         if (!SDKUtils.Instance.AssetCopyFinished) | 
|         { | 
|             //每次由sdk回调拷贝成功 | 
|             firstLaunch = true; | 
|             UnityEngine.Debug.Log("开始拷贝builtin资源"); | 
|             SDKUtils.Instance.CopyAsset(1); | 
|             //ynmbxxjUtil.Instance.CopyOneAsset("builtin_assetbundle"); | 
|             //ynmbxxjUtil.Instance.CopyOneAsset("builtin_assetbundle.manifest"); | 
|             //ynmbxxjUtil.Instance.CopyOneAsset("builtin/musics"); | 
|             //ynmbxxjUtil.Instance.CopyOneAsset("builtin/musics.manifest"); | 
|             //ynmbxxjUtil.Instance.CopyOneAsset("builtin/prefabs"); | 
|             //ynmbxxjUtil.Instance.CopyOneAsset("builtin/prefabs.manifest"); | 
|             //ynmbxxjUtil.Instance.CopyOneAsset("builtin/sprites"); | 
|             //ynmbxxjUtil.Instance.CopyOneAsset("builtin/sprites.manifest"); | 
|             //ynmbxxjUtil.Instance.CopyOneAsset("builtin/animationclips"); | 
|             //ynmbxxjUtil.Instance.CopyOneAsset("builtin/animationclips.manifest"); | 
|             //ynmbxxjUtil.Instance.CopyOneAsset("builtin/materials"); | 
|             //ynmbxxjUtil.Instance.CopyOneAsset("builtin/materials.manifest"); | 
|             //ynmbxxjUtil.Instance.CopyOneAsset("builtin/scriptableobjects"); | 
|             //ynmbxxjUtil.Instance.CopyOneAsset("builtin/scriptableobjects.manifest"); | 
|   | 
|             //ynmbxxjUtil.Instance.CopyOneAsset("builtin/font"); | 
|             //ynmbxxjUtil.Instance.CopyOneAsset("builtin/font.manifest"); | 
|   | 
|             //foreach (var config in ConfigInitiator.builtinConfig) | 
|             //{ | 
|             //    ynmbxxjUtil.Instance.CopyOneAsset("config/" + config); | 
|             //} | 
|   | 
|             //AssetDeCompressTask.Decompress(ResourcesPath.Instance.ExternalStorePath); | 
|             //LocalSave.SetString("BuiltInAssetCopyCompleted_Android", VersionConfig.Get().version); | 
|         } | 
|         else | 
|             UnityEngine.Debug.Log("builtin资源已经拷贝过了"); | 
|     } | 
|   | 
|     private void IosCopyAsset() | 
|     { | 
|         if (!VersionUtility.Instance.InIosAuditTime()) | 
|         { | 
|             if (!SDKUtils.builtinAssetCopyFinished) | 
|             { | 
|                 firstLaunch = true; | 
|                 var targetDirectory = ResourcesPath.Instance.ExternalStorePath; | 
|                 if (!Directory.Exists(targetDirectory)) | 
|                 { | 
|                     Directory.CreateDirectory(targetDirectory); | 
|                 } | 
|   | 
|                 var fileNames = new List<string>(); | 
|                 //var files = new List<FileInfo>(); | 
|                 //FileExtersion.GetAllDirectoryFileInfos(StringUtility.Contact(ResourcesPath.Instance.StreamingAssetPath, "builtin"), files); | 
|                 //foreach (var file in files) | 
|                 //{ | 
|                 //    var name = Path.GetFileName(file.FullName); | 
|                 //    fileNames.Add(StringUtility.Contact("builtin", Path.DirectorySeparatorChar, name)); | 
|                 //} | 
|   | 
|                 //fileNames.Add("builtin_assetbundle"); | 
|                 //fileNames.Add("builtin_assetbundle.manifest"); | 
|   | 
|                 var configFiles = new List<FileInfo>(); | 
|                 FileExtersion.GetAllDirectoryFileInfos(StringUtility.Contact(ResourcesPath.Instance.StreamingAssetPath, "config"), configFiles); | 
|                 foreach (var file in configFiles) | 
|                 { | 
|                     var name = Path.GetFileName(file.FullName); | 
|                     fileNames.Add(StringUtility.Contact("config", Path.DirectorySeparatorChar, name)); | 
|                 } | 
|   | 
|                 foreach (var item in fileNames) | 
|                 { | 
|                     var fromPath = StringUtility.Contact(ResourcesPath.Instance.StreamingAssetPath, item); | 
|                     var toPath = StringUtility.Contact(targetDirectory, item); | 
|   | 
|                     var destDirectoryName = Path.GetDirectoryName(toPath); | 
|                     if (!Directory.Exists(destDirectoryName)) | 
|                     { | 
|                         Directory.CreateDirectory(destDirectoryName); | 
|                     } | 
|   | 
|                     File.Copy(fromPath, toPath, true); | 
|                 } | 
|   | 
|                 LocalSave.SetString("BuiltInAssetCopyCompleted_IOSorStandalone", VersionConfig.Get().version); | 
|             } | 
|         } | 
|     } | 
|   | 
|     private void StandaloneCopyAsset() | 
|     { | 
|         var targetDirectory = ResourcesPath.Instance.ExternalStorePath; | 
|         if (!Directory.Exists(targetDirectory)) | 
|         { | 
|             Directory.CreateDirectory(targetDirectory); | 
|         } | 
|   | 
|         var fileNames = new List<string>(); | 
|         //var files = new List<FileInfo>(); | 
|         //FileExtersion.GetAllDirectoryFileInfos(StringUtility.Contact(ResourcesPath.Instance.StreamingAssetPath, "builtin"), files); | 
|         //foreach (var file in files) | 
|         //{ | 
|         //    var name = Path.GetFileName(file.FullName); | 
|         //    fileNames.Add(StringUtility.Contact("builtin", Path.DirectorySeparatorChar, name)); | 
|         //} | 
|   | 
|         //fileNames.Add("builtin_assetbundle"); | 
|         //fileNames.Add("builtin_assetbundle.manifest"); | 
|   | 
|         var configFiles = new List<FileInfo>(); | 
|         FileExtersion.GetAllDirectoryFileInfos(StringUtility.Contact(ResourcesPath.Instance.StreamingAssetPath, "config"), configFiles); | 
|         foreach (var file in configFiles) | 
|         { | 
|             var name = Path.GetFileName(file.FullName); | 
|             fileNames.Add(StringUtility.Contact("config", Path.DirectorySeparatorChar, name)); | 
|         } | 
|   | 
|         foreach (var item in fileNames) | 
|         { | 
|             var fromPath = StringUtility.Contact(ResourcesPath.Instance.StreamingAssetPath, item); | 
|             var toPath = StringUtility.Contact(targetDirectory, item); | 
|   | 
|             if (File.Exists(toPath)) | 
|             { | 
|                 continue; | 
|             } | 
|   | 
|             var destDirectoryName = Path.GetDirectoryName(toPath); | 
|             if (!Directory.Exists(destDirectoryName)) | 
|             { | 
|                 Directory.CreateDirectory(destDirectoryName); | 
|             } | 
|   | 
|             File.Copy(fromPath, toPath, true); | 
|         } | 
|     } | 
|   | 
|     private void EditorCopyAsset() | 
|     { | 
|         // if (AssetSource.isUseAssetBundle) | 
|         // { | 
|         //     FileExtersion.DirectoryCopy(ResourcesPath.CONFIG_FODLER, ResourcesPath.Instance.StreamingAssetPath + "config"); | 
|         //     FileExtersion.DirectoryCopy(ResourcesPath.ResourcesOutPath + "BuiltIn", ResourcesPath.Instance.StreamingAssetPath + "builtin"); | 
|         // } | 
|     } | 
|   | 
| } |