using GFramework.Core.extensions; using GFramework.Core.system; using GFramework.Game.Abstractions.setting; using GFramework.Game.setting.events; namespace GFramework.Game.setting; /// /// 设置系统,负责管理和应用各种设置配置 /// public class SettingsSystem : AbstractSystem, ISettingsSystem { private ISettingsModel _model = null!; /// /// 应用所有设置配置 /// /// 完成的任务 public async Task ApplyAll() { foreach (var applicator in _model.AllApplicators()) { await TryApplyAsync(applicator); } } /// /// 应用指定类型的设置配置 /// /// 设置配置类型,必须是类且实现ISettingsSection接口 /// 完成的任务 public Task Apply() where T : class, IApplyAbleSettings { var applicator = _model.GetApplicator(); return applicator != null ? TryApplyAsync(applicator) : Task.CompletedTask; } /// /// 初始化设置系统,获取设置模型实例 /// protected override void OnInit() { _model = this.GetModel()!; } /// /// 尝试应用可应用的设置配置 /// /// 设置配置对象 private async Task TryApplyAsync(ISettingsSection section) { if (section is not IApplyAbleSettings applyAbleSettings) return; this.SendEvent(new SettingsApplyingEvent(section)); try { await applyAbleSettings.Apply(); this.SendEvent(new SettingsAppliedEvent(section, true)); } catch (Exception ex) { this.SendEvent(new SettingsAppliedEvent(section, false, ex)); } } }