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"); 
 | 
        // } 
 | 
    } 
 | 
  
 | 
} 
 |