From 9531cd0883e1d5871b7f0f261f81ad21e62545e1 Mon Sep 17 00:00:00 2001 From: GeWuYou <95328647+GeWuYou@users.noreply.github.com> Date: Tue, 27 Jan 2026 22:57:03 +0800 Subject: [PATCH] =?UTF-8?q?refactor(setting):=20=E9=87=8D=E6=9E=84?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E6=A8=A1=E5=9D=97=E7=BB=93=E6=9E=84=E5=B9=B6?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=89=88=E6=9C=AC=E6=8E=A7=E5=88=B6=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将AudioSettings和GraphicsSettings移至data子目录 - 为AudioSettings和GraphicsSettings实现IVersioned接口 - 新增LocalizationSettings类管理本地化配置 - 重命名AudioBusMapSettings为AudioBusMap并移至data目录 - 新增LocalizationMap类定义语言映射关系 - 更新GodotAudioSettings依赖注入参数名称 - 修复GodotAudioSettings重置方法逻辑 - 新增GodotLocalizationSettings类应用本地化配置到Godot引擎 - 添加必要的using语句和版权注释 --- .../setting/{ => data}/AudioSettings.cs | 7 ++- .../setting/{ => data}/GraphicsSettings.cs | 6 ++- .../setting/data/LocalizationSettings.cs | 44 ++++++++++++++++++ .../setting/GodotAudioSettings.cs | 12 ++--- .../setting/GodotLocalizationSettings.cs | 46 +++++++++++++++++++ .../AudioBusMap.cs} | 4 +- .../setting/data/LocalizationMap.cs | 29 ++++++++++++ 7 files changed, 137 insertions(+), 11 deletions(-) rename GFramework.Game.Abstractions/setting/{ => data}/AudioSettings.cs (80%) rename GFramework.Game.Abstractions/setting/{ => data}/GraphicsSettings.cs (83%) create mode 100644 GFramework.Game.Abstractions/setting/data/LocalizationSettings.cs create mode 100644 GFramework.Godot/setting/GodotLocalizationSettings.cs rename GFramework.Godot/setting/{AudioBusMapSettings.cs => data/AudioBusMap.cs} (89%) create mode 100644 GFramework.Godot/setting/data/LocalizationMap.cs diff --git a/GFramework.Game.Abstractions/setting/AudioSettings.cs b/GFramework.Game.Abstractions/setting/data/AudioSettings.cs similarity index 80% rename from GFramework.Game.Abstractions/setting/AudioSettings.cs rename to GFramework.Game.Abstractions/setting/data/AudioSettings.cs index a70dce8..8af355a 100644 --- a/GFramework.Game.Abstractions/setting/AudioSettings.cs +++ b/GFramework.Game.Abstractions/setting/data/AudioSettings.cs @@ -1,9 +1,11 @@ +using GFramework.Core.Abstractions.versioning; + namespace GFramework.Game.Abstractions.setting; /// /// 音频设置类,用于管理游戏中的音频配置 /// -public class AudioSettings : ISettingsData +public class AudioSettings : ISettingsData, IVersioned { /// /// 获取或设置主音量,控制所有音频的总体音量 @@ -25,8 +27,11 @@ public class AudioSettings : ISettingsData /// public void Reset() { + // 重置所有音量设置为默认值 MasterVolume = 1.0f; BgmVolume = 0.8f; SfxVolume = 0.8f; } + + public int Version { get; set; } = 1; } \ No newline at end of file diff --git a/GFramework.Game.Abstractions/setting/GraphicsSettings.cs b/GFramework.Game.Abstractions/setting/data/GraphicsSettings.cs similarity index 83% rename from GFramework.Game.Abstractions/setting/GraphicsSettings.cs rename to GFramework.Game.Abstractions/setting/data/GraphicsSettings.cs index ed1af12..ad826a6 100644 --- a/GFramework.Game.Abstractions/setting/GraphicsSettings.cs +++ b/GFramework.Game.Abstractions/setting/data/GraphicsSettings.cs @@ -1,9 +1,11 @@ +using GFramework.Core.Abstractions.versioning; + namespace GFramework.Game.Abstractions.setting; /// /// 图形设置类,用于管理游戏的图形相关配置 /// -public class GraphicsSettings : ISettingsData +public class GraphicsSettings : ISettingsData, IVersioned { /// /// 获取或设置是否启用全屏模式 @@ -29,4 +31,6 @@ public class GraphicsSettings : ISettingsData ResolutionWidth = 1920; ResolutionHeight = 1080; } + + public int Version { get; set; } = 1; } \ No newline at end of file diff --git a/GFramework.Game.Abstractions/setting/data/LocalizationSettings.cs b/GFramework.Game.Abstractions/setting/data/LocalizationSettings.cs new file mode 100644 index 0000000..a998047 --- /dev/null +++ b/GFramework.Game.Abstractions/setting/data/LocalizationSettings.cs @@ -0,0 +1,44 @@ +// Copyright (c) 2026 GeWuYou +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using GFramework.Core.Abstractions.versioning; + +namespace GFramework.Game.Abstractions.setting.data; + +/// +/// 本地化设置类,用于管理游戏的语言本地化配置 +/// 实现了ISettingsData接口提供设置数据功能,实现IVersioned接口提供版本控制功能 +/// +public class LocalizationSettings : ISettingsData, IVersioned +{ + /// + /// 获取或设置当前使用的语言 + /// + /// 默认值为"简体中文" + public string Language { get; set; } = "简体中文"; + + /// + /// 重置本地化设置到默认状态 + /// 将Language属性恢复为默认的"简体中文"值 + /// + public void Reset() + { + Language = "简体中文"; + } + + /// + /// 获取或设置设置数据的版本号 + /// + /// 默认版本号为1 + public int Version { get; set; } = 1; +} \ No newline at end of file diff --git a/GFramework.Godot/setting/GodotAudioSettings.cs b/GFramework.Godot/setting/GodotAudioSettings.cs index 7c1bbef..24a524d 100644 --- a/GFramework.Godot/setting/GodotAudioSettings.cs +++ b/GFramework.Godot/setting/GodotAudioSettings.cs @@ -7,8 +7,8 @@ namespace GFramework.Godot.setting; /// Godot音频设置实现类,用于应用音频配置到Godot音频系统 /// /// 音频设置对象,包含主音量、背景音乐音量和音效音量 -/// 音频总线映射对象,定义了不同音频类型的总线名称 -public class GodotAudioSettings(AudioSettings settings, AudioBusMapSettings audioBusMapSettings) +/// 音频总线映射对象,定义了不同音频类型的总线名称 +public class GodotAudioSettings(AudioSettings settings, AudioBusMap audioBusMap) : IPersistentApplyAbleSettings { /// @@ -17,15 +17,15 @@ public class GodotAudioSettings(AudioSettings settings, AudioBusMapSettings audi /// 表示异步操作的任务 public Task Apply() { - SetBus(audioBusMapSettings.Master, settings.MasterVolume); - SetBus(audioBusMapSettings.Bgm, settings.BgmVolume); - SetBus(audioBusMapSettings.Sfx, settings.SfxVolume); + SetBus(audioBusMap.Master, settings.MasterVolume); + SetBus(audioBusMap.Bgm, settings.BgmVolume); + SetBus(audioBusMap.Sfx, settings.SfxVolume); return Task.CompletedTask; } public void Reset() { - audioBusMapSettings.Reset(); + settings.Reset(); } /// diff --git a/GFramework.Godot/setting/GodotLocalizationSettings.cs b/GFramework.Godot/setting/GodotLocalizationSettings.cs new file mode 100644 index 0000000..6f2b48a --- /dev/null +++ b/GFramework.Godot/setting/GodotLocalizationSettings.cs @@ -0,0 +1,46 @@ +// Copyright (c) 2026 GeWuYou +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using GFramework.Game.Abstractions.setting; +using GFramework.Game.Abstractions.setting.data; +using GFramework.Godot.setting.data; +using Godot; + +namespace GFramework.Godot.setting; + +/// +/// Godot本地化设置类,负责应用本地化配置到Godot引擎 +/// +/// 本地化设置对象 +/// 本地化映射表 +public class GodotLocalizationSettings(LocalizationSettings settings, LocalizationMap localizationMap) + : IPersistentApplyAbleSettings +{ + /// + /// 应用本地化设置到Godot引擎 + /// + /// 完成的任务 + public Task Apply() + { + // 尝试从映射表获取 Godot locale + var locale = localizationMap.LanguageMap.GetValueOrDefault(settings.Language, "en"); + // 默认值 + TranslationServer.SetLocale(locale); + return Task.CompletedTask; + } + + /// + /// 重置本地化设置 + /// + public void Reset() => settings.Reset(); +} \ No newline at end of file diff --git a/GFramework.Godot/setting/AudioBusMapSettings.cs b/GFramework.Godot/setting/data/AudioBusMap.cs similarity index 89% rename from GFramework.Godot/setting/AudioBusMapSettings.cs rename to GFramework.Godot/setting/data/AudioBusMap.cs index 6ba4bb2..941c67a 100644 --- a/GFramework.Godot/setting/AudioBusMapSettings.cs +++ b/GFramework.Godot/setting/data/AudioBusMap.cs @@ -1,12 +1,10 @@ -using GFramework.Game.Abstractions.setting; - namespace GFramework.Godot.setting; /// /// 音频总线映射设置 /// 定义了游戏中不同音频类型的总线名称配置 /// -public class AudioBusMapSettings : ISettingsData +public class AudioBusMap { /// /// 主音频总线名称 diff --git a/GFramework.Godot/setting/data/LocalizationMap.cs b/GFramework.Godot/setting/data/LocalizationMap.cs new file mode 100644 index 0000000..3501f5f --- /dev/null +++ b/GFramework.Godot/setting/data/LocalizationMap.cs @@ -0,0 +1,29 @@ +// Copyright (c) 2026 GeWuYou +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +namespace GFramework.Godot.setting.data; + +/// +/// 本地化映射设置 +/// +public class LocalizationMap +{ + /// + /// 用户语言 -> Godot locale 映射表 + /// + public Dictionary LanguageMap { get; set; } = new() + { + { "简体中文", "zh_CN" }, + { "English", "en" } + }; +} \ No newline at end of file