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