using System.Collections.Generic; using System.Linq; using UnityEngine; namespace AibisDream.SaveSystem { /// /// 运行时登记全部 。 /// Capture/Restore 时按 迭代; /// 不使用「谁注册了谁才存」的隐式行为,RequiredForCapture 用于显式校验。 /// public static class SnapshotRegistry { private static readonly Dictionary Providers = new(); /// 注册 provider;同 SaveId 后者覆盖前者。 public static void Register(ISnapshotProvider provider) { if (provider == null) return; Providers[provider.SaveId] = provider; } public static void Unregister(string saveId) { Providers.Remove(saveId); } public static bool TryGet(string saveId, out ISnapshotProvider provider) { return Providers.TryGetValue(saveId, out provider); } /// 按 RestoreOrder 升序返回,供还原流水线使用。 public static IReadOnlyList GetOrderedProviders() { return Providers.Values.OrderBy(p => p.RestoreOrder).ToList(); } /// /// 校验 ; /// 缺失时 LogWarning 但不阻断 Capture。 /// public static void ValidateRequiredProviders() { foreach (var saveId in SnapshotProviderIds.RequiredForCapture) { if (!Providers.ContainsKey(saveId)) { Debug.LogWarning($"[SnapshotRegistry] 缺少快照 provider: {saveId}"); } } } } }