GFramework/GFramework.Godot/setting/GodotAudioSettings.cs
GeWuYou 442e8e7088 refactor(setting): 重构设置系统以支持数据和应用器分离
- 将SettingsModel内部存储分离为_dataSettings和_applicators两个字典
- 添加IDataSettings接口用于标识纯数据设置
- 修改Get方法为GetData以明确区分数据获取
- 添加RegisterApplicator和GetApplicator方法管理可应用设置
- 更新TryGet方法支持从数据和应用器中查找设置
- 扩展SettingsPersistence支持批量保存和加载所有设置数据
- 将AudioBusMap重命名为AudioBusMapSettings并实现ISettingsData接口
- 修改Godot音频和图形设置适配新的接口变更
- [skip ci]
2026-01-16 23:44:28 +08:00

47 lines
1.6 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using GFramework.Game.Abstractions.setting;
using Godot;
namespace GFramework.Godot.setting;
/// <summary>
/// Godot音频设置实现类用于应用音频配置到Godot音频系统
/// </summary>
/// <param name="audioSettings">音频设置对象,包含主音量、背景音乐音量和音效音量</param>
/// <param name="audioBusMapSettings">音频总线映射对象,定义了不同音频类型的总线名称</param>
public class GodotAudioSettings(AudioSettings audioSettings, AudioBusMapSettings audioBusMapSettings)
: IApplyAbleSettings
{
/// <summary>
/// 应用音频设置到Godot音频系统
/// </summary>
/// <returns>表示异步操作的任务</returns>
public Task Apply()
{
SetBus(audioBusMapSettings.Master, audioSettings.MasterVolume);
SetBus(audioBusMapSettings.Bgm, audioSettings.BgmVolume);
SetBus(audioBusMapSettings.Sfx, audioSettings.SfxVolume);
return Task.CompletedTask;
}
/// <summary>
/// 设置指定音频总线的音量
/// </summary>
/// <param name="busName">音频总线名称</param>
/// <param name="linear">线性音量值0-1之间</param>
private static void SetBus(string busName, float linear)
{
// 获取音频总线索引
var idx = AudioServer.GetBusIndex(busName);
if (idx < 0)
{
GD.PushWarning($"Audio bus not found: {busName}");
return;
}
// 将线性音量转换为分贝并设置到音频总线
AudioServer.SetBusVolumeDb(
idx,
Mathf.LinearToDb(Mathf.Clamp(linear, 0.0001f, 1f))
);
}
}