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