Files
SVSimServer/SVSim.BattleEngine/Engine/Wizard.QuestSpecialResult/QuestAssetManager.cs
gamer147 0d9d8acae0 feat(battle-engine): M1 auto-copy closure (782 battle-logic files)
Compile-driven bulk-copy loop (tools/engine-port/m1_copy_loop.py) pulled the precise reference closure of the battle-core roots, stopping at the classify god-object/View-VFX-UI boundary. 782 files; no re-explosion (M0 had estimated ~order 1000). Residual frontier = 52 shim-classified + 80 external (Unity/BCL) types to author next.
2026-06-05 16:57:20 -04:00

152 lines
3.7 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using Cute;
using UnityEngine;
namespace Wizard.QuestSpecialResult;
public class QuestAssetManager
{
public enum AssetId
{
Max
}
private enum AssetType
{
Effect,
Se,
Other,
Max
}
private class AssetInfo
{
public AssetType AssetType { get; }
public ResourcesManager.AssetLoadPathType? LoadPathType { get; }
public string AssetName { get; }
public string LoadPath { get; }
public string FetchPath { get; }
public AssetInfo(AssetType assetType, ResourcesManager.AssetLoadPathType? loadPathType, string assetName)
{
AssetType = assetType;
LoadPathType = loadPathType;
AssetName = assetName;
LoadPath = (loadPathType.HasValue ? Toolbox.ResourcesManager.GetAssetTypePath(assetName, loadPathType.Value) : string.Empty);
FetchPath = (loadPathType.HasValue ? Toolbox.ResourcesManager.GetAssetTypePath(assetName, loadPathType.Value, isfetch: true) : string.Empty);
}
}
private readonly AssetInfo[] _assetInfoTable;
private readonly Func<AssetInfo, List<string>, IEnumerator>[] _loadCoroutineTable;
private readonly List<string> _loadedAssets = new List<string>();
public bool IsLoaded { get; private set; }
public QuestAssetManager()
{
_assetInfoTable = CreateAssetInfoTable();
_loadCoroutineTable = CreateLoadCoroutineTable();
}
private AssetInfo[] CreateAssetInfoTable()
{
return new AssetInfo[0];
}
private Func<AssetInfo, List<string>, IEnumerator>[] CreateLoadCoroutineTable()
{
return new Func<AssetInfo, List<string>, IEnumerator>[3] { LoadEffectCoroutine, LoadSeCoroutine, LoadOtherAssetCoroutine };
}
public IEnumerator LoadAllCoroutine()
{
if (!IsLoaded)
{
AssetInfo[] assetInfoTable = _assetInfoTable;
foreach (AssetInfo assetInfo in assetInfoTable)
{
yield return _loadCoroutineTable[(int)assetInfo.AssetType](assetInfo, _loadedAssets);
}
IsLoaded = true;
}
}
private IEnumerator LoadEffectCoroutine(AssetInfo info, List<string> loadedAssets)
{
List<string> assets = new List<string> { info.LoadPath };
yield return Toolbox.ResourcesManager.LoadAssetGroupSync(assets, null);
loadedAssets.AddRange(assets);
yield return LoadEffectShaderCoroutine(info, loadedAssets);
}
private IEnumerator LoadEffectShaderCoroutine(AssetInfo info, List<string> loadedAssets)
{
bool isLoading = true;
GameObject effectObj = Toolbox.ResourcesManager.LoadObject<GameObject>(info.FetchPath);
List<string> assets = GameMgr.GetIns().GetEffectMgr().SetUIParticleShader(effectObj, delegate
{
isLoading = false;
});
while (isLoading)
{
yield return null;
}
loadedAssets.AddRange(assets);
}
private IEnumerator LoadSeCoroutine(AssetInfo info, List<string> loadedAssets)
{
bool isLoading = true;
string asset = GameMgr.GetIns().GetSoundMgr().LoadSe(info.AssetName, delegate
{
isLoading = false;
});
while (isLoading)
{
yield return null;
}
loadedAssets.Add(asset);
}
private IEnumerator LoadOtherAssetCoroutine(AssetInfo info, List<string> loadedAssets)
{
List<string> assets = new List<string> { info.LoadPath };
yield return Toolbox.ResourcesManager.LoadAssetGroupSync(assets, null);
loadedAssets.AddRange(assets);
}
public void UnloadAll()
{
if (IsLoaded)
{
Toolbox.ResourcesManager.RemoveAssetGroup(_loadedAssets);
_loadedAssets.Clear();
IsLoaded = false;
}
}
private AssetInfo GetAssetInfo(AssetId id)
{
return _assetInfoTable[(int)id];
}
public string GetAssetName(AssetId id)
{
return GetAssetInfo(id).AssetName;
}
public string GetFetchPath(AssetId id)
{
return GetAssetInfo(id).FetchPath;
}
}