using System; 
 | 
using System.Collections.Generic; 
 | 
using System.IO; 
 | 
using UnityEngine; 
 | 
  
 | 
  
 | 
public class AssetCopyTask : LaunchTask 
 | 
{ 
 | 
    int completedCount = 0; 
 | 
    int totalCount = -1; 
 | 
    List<FileInfo> copyTasks = new List<FileInfo>(); 
 | 
  
 | 
    public override float expectTime 
 | 
    { 
 | 
        get { return LocalSave.GetFloat("AssetCopyTask_ExpectTime", 70f); } 
 | 
        protected set { LocalSave.SetFloat("AssetCopyTask_ExpectTime", value); } 
 | 
    } 
 | 
  
 | 
    public override void Begin() 
 | 
    { 
 | 
        LaunchInHot.m_CurrentStage = LaunchStage.AssetCopy; 
 | 
        duration = Mathf.Max(0.5f, expectTime); 
 | 
        outTime = 50f; 
 | 
  
 | 
        if (Application.isEditor) 
 | 
        { 
 | 
            done = true; 
 | 
        } 
 | 
        else 
 | 
        { 
 | 
            switch (Application.platform) 
 | 
            { 
 | 
                case RuntimePlatform.Android: 
 | 
                    AndroidCopyAsset(); 
 | 
                    break; 
 | 
                case RuntimePlatform.IPhonePlayer: 
 | 
                    IOSCopyAsset(); 
 | 
                    break; 
 | 
                case RuntimePlatform.WindowsPlayer: 
 | 
                    StandaloneCopyAsset(); 
 | 
                    break; 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    public override void End() 
 | 
    { 
 | 
        expectTime = timer; 
 | 
        Debug.LogFormat("{0}执行时长:{1};", this.GetType().Name, timer); 
 | 
  
 | 
        if (!Application.isEditor) 
 | 
        { 
 | 
            switch (Application.platform) 
 | 
            { 
 | 
                case RuntimePlatform.Android: 
 | 
                    AndroidProcessCopyComplete(); 
 | 
                    break; 
 | 
                case RuntimePlatform.IPhonePlayer: 
 | 
                    IOSProcessCopyComplete(); 
 | 
                    break; 
 | 
            } 
 | 
        } 
 | 
  
 | 
    } 
 | 
  
 | 
    public override void Update() 
 | 
    { 
 | 
        if (done) 
 | 
        { 
 | 
            return; 
 | 
        } 
 | 
  
 | 
        timer += Time.deltaTime; 
 | 
  
 | 
        if (!Application.isEditor) 
 | 
        { 
 | 
            switch (Application.platform) 
 | 
            { 
 | 
                case RuntimePlatform.Android: 
 | 
                    AndroidWaitCopyAssetComplete(); 
 | 
                    break; 
 | 
                case RuntimePlatform.IPhonePlayer: 
 | 
                case RuntimePlatform.WindowsPlayer: 
 | 
                    IOSorStandaloneWaitCopyAssetComplete(); 
 | 
                    break; 
 | 
            } 
 | 
        } 
 | 
  
 | 
        ExceptionReport(); 
 | 
    } 
 | 
  
 | 
    private void AndroidCopyAsset() 
 | 
    { 
 | 
        switch (VersionConfig.Get().assetAccess) 
 | 
        { 
 | 
            case InstalledAsset.FullAsset: 
 | 
            case InstalledAsset.HalfAsset: 
 | 
            case InstalledAsset.IngoreDownLoad: 
 | 
                if (!SDKUtils.Instance.AssetCopyFinished) 
 | 
                { 
 | 
                    SDKUtils.Instance.CopyAsset(); 
 | 
                    done = false; 
 | 
                    progress = 0f; 
 | 
                } 
 | 
                else 
 | 
                { 
 | 
                    done = true; 
 | 
                } 
 | 
                break; 
 | 
            case InstalledAsset.NullAsset: 
 | 
                done = true; 
 | 
                break; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    private void IOSCopyAsset() 
 | 
    { 
 | 
        if (VersionUtility.Instance.versionInfo != null && VersionUtility.Instance.versionInfo.downAsset == 1) 
 | 
        { 
 | 
            switch (VersionConfig.Get().assetAccess) 
 | 
            { 
 | 
                case InstalledAsset.FullAsset: 
 | 
                case InstalledAsset.HalfAsset: 
 | 
                case InstalledAsset.IngoreDownLoad: 
 | 
                    if (!SDKUtils.Instance.AssetCopyFinished) 
 | 
                    { 
 | 
                        copyTasks = new List<FileInfo>(); 
 | 
                        FileExtersion.GetAllDirectoryFileInfos(ResourcesPath.Instance.StreamingAssetPath, copyTasks); 
 | 
  
 | 
                        for (var i = copyTasks.Count - 1; i >= 0; i--) 
 | 
                        { 
 | 
                            var fileInfo = copyTasks[i]; 
 | 
                            var destPath = fileInfo.FullName.Replace(ResourcesPath.Instance.StreamingAssetPath, ResourcesPath.Instance.ExternalStorePath); 
 | 
                            if (File.Exists(destPath)) 
 | 
                            { 
 | 
                                copyTasks.RemoveAt(i); 
 | 
                            } 
 | 
                        } 
 | 
  
 | 
                        completedCount = 0; 
 | 
                        totalCount = copyTasks.Count; 
 | 
                    } 
 | 
  
 | 
                    if (totalCount > 0) 
 | 
                    { 
 | 
                        done = false; 
 | 
                        progress = 0f; 
 | 
                    } 
 | 
                    else 
 | 
                    { 
 | 
                        done = true; 
 | 
                    } 
 | 
                    break; 
 | 
                case InstalledAsset.NullAsset: 
 | 
                    done = true; 
 | 
                    break; 
 | 
            } 
 | 
        } 
 | 
        else 
 | 
        { 
 | 
            done = true; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    private void StandaloneCopyAsset() 
 | 
    { 
 | 
        if (VersionUtility.Instance.versionInfo != null && VersionUtility.Instance.versionInfo.downAsset == 1) 
 | 
        { 
 | 
            switch (VersionConfig.Get().assetAccess) 
 | 
            { 
 | 
                case InstalledAsset.FullAsset: 
 | 
                case InstalledAsset.HalfAsset: 
 | 
                case InstalledAsset.IngoreDownLoad: 
 | 
                    copyTasks = new List<FileInfo>(); 
 | 
                    FileExtersion.GetAllDirectoryFileInfos(ResourcesPath.Instance.StreamingAssetPath, copyTasks); 
 | 
  
 | 
                    for (var i = copyTasks.Count - 1; i >= 0; i--) 
 | 
                    { 
 | 
                        var fileInfo = copyTasks[i]; 
 | 
                        var destPath = fileInfo.FullName.Replace(ResourcesPath.Instance.StreamingAssetPath, ResourcesPath.Instance.ExternalStorePath); 
 | 
                        if (File.Exists(destPath)) 
 | 
                        { 
 | 
                            copyTasks.RemoveAt(i); 
 | 
                        } 
 | 
                    } 
 | 
  
 | 
                    completedCount = 0; 
 | 
                    totalCount = copyTasks.Count; 
 | 
  
 | 
                    if (totalCount > 0) 
 | 
                    { 
 | 
                        done = false; 
 | 
                        progress = 0f; 
 | 
                    } 
 | 
                    else 
 | 
                    { 
 | 
                        done = true; 
 | 
                    } 
 | 
                    break; 
 | 
                case InstalledAsset.NullAsset: 
 | 
                    done = true; 
 | 
                    break; 
 | 
            } 
 | 
        } 
 | 
        else 
 | 
        { 
 | 
            done = true; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    private void AndroidWaitCopyAssetComplete() 
 | 
    { 
 | 
        if (!SDKUtils.Instance.AssetCopyFinished) 
 | 
        { 
 | 
            done = false; 
 | 
            progress = timer / duration; 
 | 
        } 
 | 
        else 
 | 
        { 
 | 
            done = true; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    private void IOSorStandaloneWaitCopyAssetComplete() 
 | 
    { 
 | 
        if (totalCount > 0) 
 | 
        { 
 | 
            if (completedCount < totalCount) 
 | 
            { 
 | 
                var fileInfo = copyTasks[0]; 
 | 
                var destPath = fileInfo.FullName.Replace(ResourcesPath.Instance.StreamingAssetPath, ResourcesPath.Instance.ExternalStorePath); 
 | 
                var destDirectoryName = Path.GetDirectoryName(destPath); 
 | 
                if (!Directory.Exists(destDirectoryName)) 
 | 
                { 
 | 
                    Directory.CreateDirectory(destDirectoryName); 
 | 
                } 
 | 
  
 | 
                Debug.LogFormat("拷贝文件:{0}", fileInfo.Name); 
 | 
                File.Copy(fileInfo.FullName, destPath, true); 
 | 
                copyTasks.RemoveAt(0); 
 | 
                completedCount++; 
 | 
  
 | 
                done = false; 
 | 
                progress = (float)completedCount / totalCount; 
 | 
            } 
 | 
            else 
 | 
            { 
 | 
                done = true; 
 | 
            } 
 | 
        } 
 | 
        else 
 | 
        { 
 | 
            done = true; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    private void AndroidProcessCopyComplete() 
 | 
    { 
 | 
    } 
 | 
  
 | 
    private void IOSProcessCopyComplete() 
 | 
    { 
 | 
        LocalSave.SetString("AssetCopyCompleted_IOSorStandalone", VersionConfig.Get().version); 
 | 
    } 
 | 
  
 | 
} 
 |