mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-03-22 19:03:29 +08:00
- 移除 SettingsResetEvent 中的旧设置属性,改为仅保存新设置 - 删除 SettingsPersistence 中的重置方法,统一通过命令模式处理 - 在 SettingsSystem 中添加 ResetAsync 方法并集成命令模式 - 为 AudioSettings 和 GraphicsSettings 添加 Reset 方法实现 - 扩展 ISettingsData 接口添加 Reset 方法定义 - 从接口中移除重置相关方法定义 - 在 ISettingsSystem 中添加重置相关的异步方法声明 - 为 AudioBusMapSettings 添加 Reset 方法实现 - 新增 ResetSettingsCommand 和 ResetSettingsInput 实现命令模式 - 添加 SettingsData 抽象基类提供默认的 Reset 实现 - [skip ci]
54 lines
1.6 KiB
C#
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));
|
|
}
|
|
} |