com.alicizax.unity.tuyoogam.../Runtime/ResourcePackage/Operation/ClearCacheFilesOperation.cs

106 lines
3.3 KiB
C#
Raw Normal View History

2025-02-28 16:11:01 +08:00
using System.Collections.Generic;
using System.Linq;
2025-01-09 11:31:04 +08:00
namespace YooAsset
{
2025-02-28 16:11:01 +08:00
public sealed class ClearCacheFilesOperation : AsyncOperationBase
2025-01-09 11:31:04 +08:00
{
private enum ESteps
{
None,
2025-02-28 16:11:01 +08:00
Prepare,
ClearCacheFiles,
CheckClearResult,
2025-01-09 11:31:04 +08:00
Done,
}
2025-02-28 16:11:01 +08:00
private readonly PlayModeImpl _impl;
2025-05-13 10:40:30 +08:00
private readonly ClearCacheFilesOptions _options;
2025-02-28 16:11:01 +08:00
private List<IFileSystem> _cloneList;
private FSClearCacheFilesOperation _clearCacheFilesOp;
2025-01-09 11:31:04 +08:00
private ESteps _steps = ESteps.None;
2025-02-28 16:11:01 +08:00
2025-05-13 10:40:30 +08:00
internal ClearCacheFilesOperation(PlayModeImpl impl, ClearCacheFilesOptions options)
2025-01-09 11:31:04 +08:00
{
_impl = impl;
2025-05-13 10:40:30 +08:00
_options = options;
2025-01-09 11:31:04 +08:00
}
2025-02-28 16:11:01 +08:00
internal override void InternalStart()
2025-01-09 11:31:04 +08:00
{
2025-02-28 16:11:01 +08:00
_steps = ESteps.Prepare;
2025-01-09 11:31:04 +08:00
}
2025-02-28 16:11:01 +08:00
internal override void InternalUpdate()
2025-01-09 11:31:04 +08:00
{
if (_steps == ESteps.None || _steps == ESteps.Done)
return;
2025-02-28 16:11:01 +08:00
if (_steps == ESteps.Prepare)
2025-01-09 11:31:04 +08:00
{
2025-02-28 16:11:01 +08:00
var fileSytems = _impl.FileSystems;
if (fileSytems == null || fileSytems.Count == 0)
2025-01-09 11:31:04 +08:00
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
2025-02-28 16:11:01 +08:00
Error = "The file system is empty !";
2025-01-09 11:31:04 +08:00
return;
}
2025-02-28 16:11:01 +08:00
foreach (var fileSystem in fileSytems)
2025-01-09 11:31:04 +08:00
{
2025-02-28 16:11:01 +08:00
if (fileSystem == null)
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
Error = "An empty object exists in the list!";
return;
}
2025-01-09 11:31:04 +08:00
}
2025-02-28 16:11:01 +08:00
_cloneList = fileSytems.ToList();
_steps = ESteps.ClearCacheFiles;
2025-01-09 11:31:04 +08:00
}
2025-02-28 16:11:01 +08:00
if (_steps == ESteps.ClearCacheFiles)
2025-01-09 11:31:04 +08:00
{
2025-02-28 16:11:01 +08:00
if (_cloneList.Count == 0)
2025-01-09 11:31:04 +08:00
{
_steps = ESteps.Done;
Status = EOperationStatus.Succeed;
}
2025-02-28 16:11:01 +08:00
else
{
var fileSystem = _cloneList[0];
_cloneList.RemoveAt(0);
2025-01-09 11:31:04 +08:00
2025-05-13 10:40:30 +08:00
_clearCacheFilesOp = fileSystem.ClearCacheFilesAsync(_impl.ActiveManifest, _options);
2025-02-28 16:11:01 +08:00
_clearCacheFilesOp.StartOperation();
AddChildOperation(_clearCacheFilesOp);
_steps = ESteps.CheckClearResult;
}
}
2025-01-09 11:31:04 +08:00
2025-02-28 16:11:01 +08:00
if (_steps == ESteps.CheckClearResult)
{
_clearCacheFilesOp.UpdateOperation();
Progress = _clearCacheFilesOp.Progress;
if (_clearCacheFilesOp.IsDone == false)
2025-01-09 11:31:04 +08:00
return;
2025-02-28 16:11:01 +08:00
if (_clearCacheFilesOp.Status == EOperationStatus.Succeed)
2025-01-09 11:31:04 +08:00
{
2025-02-28 16:11:01 +08:00
_steps = ESteps.ClearCacheFiles;
2025-01-09 11:31:04 +08:00
}
else
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
2025-02-28 16:11:01 +08:00
Error = _clearCacheFilesOp.Error;
2025-01-09 11:31:04 +08:00
}
}
}
2025-04-01 21:12:28 +08:00
internal override string InternalGetDesc()
{
2025-05-13 10:40:30 +08:00
return $"ClearMode : {_options.ClearMode}";
2025-04-01 21:12:28 +08:00
}
2025-01-09 11:31:04 +08:00
}
}