Files

112 lines
4.1 KiB
C#

#nullable enable
using ShrinkEventBus;
#if UNITY_5_3_OR_NEWER
using UnityEngine;
#endif
namespace ShrinkDataSaver.Integration
{
/// <summary>
/// DataSaver 原生事件到 EventBus 的显式桥接器。
/// 生命周期由 ShrinkDataSaverEventBusComponent 管理,不再因程序集存在而全局自动接入。
/// </summary>
public static class DataSaverEventBusBridge
{
private static bool _registered;
public static bool IsRegistered => _registered;
#if UNITY_5_3_OR_NEWER
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
#endif
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 });
}
}