#nullable enable using ShrinkEventBus; using UnityEngine; namespace ShrinkDataSaver.Integration { /// /// DataSaver 原生事件到 EventBus 的显式桥接器。 /// 生命周期由 ShrinkDataSaverEventBusComponent 管理,不再因程序集存在而全局自动接入。 /// public static class DataSaverEventBusBridge { private static bool _registered; public static bool IsRegistered => _registered; [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void ResetStaticState() { Unregister(); _registered = false; } public static void Register() { if (_registered) return; ShrinkSettings.OnChanged += HandleSettingsChanged; ShrinkSave.OnSaveStarted += HandleSaveStarted; ShrinkSave.OnSaveCompleted += HandleSaveCompleted; ShrinkSave.OnSaveFailed += HandleSaveFailed; ShrinkSave.OnLoadStarted += HandleLoadStarted; ShrinkSave.OnLoadCompleted += HandleLoadCompleted; ShrinkSave.OnLoadFailed += HandleLoadFailed; ShrinkSave.OnMigrationCompleted += HandleMigrationCompleted; ShrinkSave.OnDeleteCompleted += HandleSlotDeleted; _registered = true; } public static void Unregister() { ShrinkSettings.OnChanged -= HandleSettingsChanged; ShrinkSave.OnSaveStarted -= HandleSaveStarted; ShrinkSave.OnSaveCompleted -= HandleSaveCompleted; ShrinkSave.OnSaveFailed -= HandleSaveFailed; ShrinkSave.OnLoadStarted -= HandleLoadStarted; ShrinkSave.OnLoadCompleted -= HandleLoadCompleted; ShrinkSave.OnLoadFailed -= HandleLoadFailed; ShrinkSave.OnMigrationCompleted -= HandleMigrationCompleted; ShrinkSave.OnDeleteCompleted -= HandleSlotDeleted; _registered = false; } private static void HandleSettingsChanged(string key, object value) => EventBus.Post(new SettingsChangedEvent { Key = key, Value = value }); private static void HandleSaveStarted(SaveStartedEventArgs args) => EventBus.Post(new SaveStartedEvent { SlotIndex = args.SlotIndex, Timestamp = args.Timestamp }); private static void HandleSaveCompleted(SaveCompletedEventArgs args) => EventBus.Post(new SaveCompletedEvent { SlotIndex = args.SlotIndex, ModuleNames = args.ModuleNames, Timestamp = args.Timestamp }); private static void HandleSaveFailed(SaveFailedEventArgs args) => EventBus.Post(new SaveFailedEvent { SlotIndex = args.SlotIndex, ErrorMessage = args.ErrorMessage }); private static void HandleLoadStarted(LoadStartedEventArgs args) => EventBus.Post(new LoadStartedEvent { SlotIndex = args.SlotIndex, Timestamp = args.Timestamp }); private static void HandleLoadCompleted(LoadCompletedEventArgs args) => EventBus.Post(new LoadCompletedEvent { SlotIndex = args.SlotIndex, ModuleNames = args.ModuleNames, Version = args.Version, Timestamp = args.Timestamp }); private static void HandleLoadFailed(LoadFailedEventArgs args) => EventBus.Post(new LoadFailedEvent { SlotIndex = args.SlotIndex, ErrorMessage = args.ErrorMessage }); private static void HandleMigrationCompleted(MigrationCompletedEventArgs args) => EventBus.Post(new MigrationCompletedEvent { SlotIndex = args.SlotIndex, FromVersion = args.FromVersion, ToVersion = args.ToVersion }); private static void HandleSlotDeleted(SlotDeletedEventArgs args) => EventBus.Post(new SlotDeletedEvent { SlotIndex = args.SlotIndex }); } }