GFramework/GFramework.Game/setting/commands/ResetSettingsCommand.cs
GeWuYou a45bf27c8b refactor(setting): 重构设置重置功能实现
- 移除 SettingsResetEvent 中的旧设置属性,改为仅保存新设置
- 删除 SettingsPersistence 中的重置方法,统一通过命令模式处理
- 在 SettingsSystem 中添加 ResetAsync 方法并集成命令模式
- 为 AudioSettings 和 GraphicsSettings 添加 Reset 方法实现
- 扩展 ISettingsData 接口添加 Reset 方法定义
- 从接口中移除重置相关方法定义
- 在 ISettingsSystem 中添加重置相关的异步方法声明
- 为 AudioBusMapSettings 添加 Reset 方法实现
- 新增 ResetSettingsCommand 和 ResetSettingsInput 实现命令模式
- 添加 SettingsData 抽象基类提供默认的 Reset 实现
- [skip ci]
2026-01-17 16:07:37 +08:00

54 lines
1.6 KiB
C#

using GFramework.Core.command;
using GFramework.Game.Abstractions.setting;
using GFramework.Game.setting.events;
namespace GFramework.Game.setting.commands;
public sealed class ResetSettingsCommand : AbstractAsyncCommand<ResetSettingsInput>
{
private ISettingsModel _model = null!;
private ISettingsPersistence _persistence = null!;
protected override void OnContextReady()
{
base.OnContextReady();
_model = this.GetModel<ISettingsModel>()!;
_persistence = this.GetUtility<ISettingsPersistence>()!;
}
protected override async Task OnExecuteAsync(ResetSettingsInput input)
{
if (input.SettingsType == null)
await ResetAll();
else
await ResetSingle(input.SettingsType);
}
private async Task ResetSingle(Type settingsType)
{
if (!_model.TryGet(settingsType, out var section))
throw new InvalidOperationException($"Settings {settingsType.Name} not found");
if (section is not ISettingsData settingsData)
throw new InvalidOperationException($"Settings {settingsType.Name} is not ISettingsData");
settingsData.Reset();
await _persistence.SaveAsync(settingsData);
this.SendEvent(new SettingsResetEvent<ISettingsSection>(settingsData));
}
private async Task ResetAll()
{
var allSettings = _model.All()
.OfType<ISettingsData>()
.ToList();
foreach (var settings in allSettings)
{
settings.Reset();
await _persistence.SaveAsync(settings);
}
this.SendEvent(new SettingsResetAllEvent(allSettings));
}
}