Files
przygody-pana-cegly/scripts/UI/AudioSettings.cs
Gabriel Kaszewski d786ef4c22 Complete C# rewrite with working game in Editor (#6)
* Refactor collectable components to C# and update resource scripts for consistency

* Update resource paths and refactor properties for consistency

* Refactor UI components to inherit from Control and update node paths for consistency

* Update node paths and group assignments for consistency across scenes

* Refactor GameManager and PlayerDeathComponent for improved state management and logging; update scene connections for player death handling

* Add PhantomCamera components and UI elements for improved scene management; refactor existing components for better integration

* Refactor skill components and update resource paths for consistency; enhance skill management in scenes

* Add new UID files and update scene configurations for dialogue components; refactor skill management and input handling

* Add next level command and refactor player retrieval in GameManager; update scene files for consistency

* Add skill upgrade system and refactor skill components for enhanced functionality; update resource paths and configurations

* Enhance ChargeProgressBar and Marketplace functionality; add owner exit handling and update skill button states

* Refactor ChargeProgressBar and SkillManager; update skill handling and improve component interactions

* Refactor player and level configurations; streamline FlipPlayerComponent and reposition Spaceship Enter
2025-08-27 01:12:26 +02:00

109 lines
4.1 KiB
C#

using Godot;
using Mr.BrickAdventures.Autoloads;
namespace Mr.BrickAdventures.scripts.UI;
public partial class AudioSettings : Control
{
[Export] public Slider MasterVolumeSlider { get; set; }
[Export] public Slider MusicVolumeSlider { get; set; }
[Export] public Slider SfxVolumeSlider { get; set; }
[Export] public Control AudioSettingsControl { get; set; }
[Export] public float MuteThreshold { get; set; } = -20f;
private UIManager _uiManager;
private ConfigFileHandler _configFileHandler;
public override void _Ready()
{
_uiManager = GetNode<UIManager>("/root/UIManager");
_configFileHandler = GetNode<ConfigFileHandler>("/root/ConfigFileHandler");
Initialize();
MasterVolumeSlider.ValueChanged += OnMasterVolumeChanged;
MusicVolumeSlider.ValueChanged += OnMusicVolumeChanged;
SfxVolumeSlider.ValueChanged += OnSfxVolumeChanged;
LoadSettings();
}
public override void _ExitTree()
{
SaveSettings();
}
public override void _UnhandledInput(InputEvent @event)
{
if (!@event.IsActionReleased("ui_cancel")) return;
if (!_uiManager.IsScreenOnTop(AudioSettingsControl)) return;
SaveSettings();
_uiManager.PopScreen();
}
private void OnSfxVolumeChanged(double value)
{
AudioServer.SetBusVolumeDb(AudioServer.GetBusIndex("sfx"), (float)value);
HandleMute(AudioServer.GetBusIndex("sfx"), (float)value);
}
private void OnMusicVolumeChanged(double value)
{
AudioServer.SetBusVolumeDb(AudioServer.GetBusIndex("music"), (float)value);
HandleMute(AudioServer.GetBusIndex("music"), (float)value);
}
private void OnMasterVolumeChanged(double value)
{
AudioServer.SetBusVolumeDb(AudioServer.GetBusIndex("Master"), (float)value);
HandleMute(AudioServer.GetBusIndex("Master"), (float)value);
}
private void Initialize()
{
var volumeDb = AudioServer.GetBusVolumeDb(AudioServer.GetBusIndex("Master"));
MasterVolumeSlider.Value = volumeDb;
MasterVolumeSlider.MinValue = MuteThreshold;
MasterVolumeSlider.MaxValue = 0f;
var musicVolumeDb = AudioServer.GetBusVolumeDb(AudioServer.GetBusIndex("music"));
MusicVolumeSlider.Value = musicVolumeDb;
MusicVolumeSlider.MinValue = MuteThreshold;
MusicVolumeSlider.MaxValue = 0f;
var sfxVolumeDb = AudioServer.GetBusVolumeDb(AudioServer.GetBusIndex("sfx"));
SfxVolumeSlider.Value = sfxVolumeDb;
SfxVolumeSlider.MinValue = MuteThreshold;
SfxVolumeSlider.MaxValue = 0f;
}
private void HandleMute(int busIndex, float value)
{
AudioServer.SetBusMute(busIndex, value <= MuteThreshold);
}
private void SaveSettings()
{
var settingsConfig = _configFileHandler.SettingsConfig;
settingsConfig.SetValue("audio_settings", "master_volume", MasterVolumeSlider.Value);
settingsConfig.SetValue("audio_settings", "music_volume", MusicVolumeSlider.Value);
settingsConfig.SetValue("audio_settings", "sfx_volume", SfxVolumeSlider.Value);
settingsConfig.SetValue("audio_settings", "mute_threshold", MuteThreshold);
settingsConfig.Save(ConfigFileHandler.SettingsPath);
}
private void LoadSettings()
{
var settingsConfig = _configFileHandler.SettingsConfig;
if (!settingsConfig.HasSection("audio_settings")) return;
var masterVolume = (float)settingsConfig.GetValue("audio_settings", "master_volume", MasterVolumeSlider.Value);
var musicVolume = (float)settingsConfig.GetValue("audio_settings", "music_volume", MusicVolumeSlider.Value);
var sfxVolume = (float)settingsConfig.GetValue("audio_settings", "sfx_volume", SfxVolumeSlider.Value);
var muteThreshold = (float)settingsConfig.GetValue("audio_settings", "mute_threshold", MuteThreshold);
MasterVolumeSlider.Value = masterVolume;
MusicVolumeSlider.Value = musicVolume;
SfxVolumeSlider.Value = sfxVolume;
MuteThreshold = muteThreshold;
}
}