ported from perforce
This commit is contained in:
117
DonkeysAndDroids.Godot/SettingsManager.cs
Normal file
117
DonkeysAndDroids.Godot/SettingsManager.cs
Normal file
@@ -0,0 +1,117 @@
|
||||
using Godot;
|
||||
|
||||
public partial class SettingsManager : Node
|
||||
{
|
||||
public override void _EnterTree()
|
||||
{
|
||||
if (Instance != null && Instance != this)
|
||||
{
|
||||
QueueFree();
|
||||
return;
|
||||
}
|
||||
|
||||
Instance = this;
|
||||
}
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
LoadSettings();
|
||||
ApplyVolumes();
|
||||
}
|
||||
|
||||
private void LoadSettings()
|
||||
{
|
||||
var config = new ConfigFile();
|
||||
var err = config.Load(c_ConfigPath);
|
||||
|
||||
if (err == Error.Ok)
|
||||
{
|
||||
MasterVolumeDb = (float)config.GetValue(c_SectionAudio, "master_db", c_DefaultMasterVolume);
|
||||
MusicVolumeDb = (float)config.GetValue(c_SectionAudio, "music_db", c_DefaultMusicVolume);
|
||||
SfxVolumeDb = (float)config.GetValue(c_SectionAudio, "sfx_db", c_DefaultSfxVolume);
|
||||
GameSpeed = (float)config.GetValue(c_SectionGame, "speed", c_DefaultGameSpeed);
|
||||
}
|
||||
else
|
||||
{
|
||||
MasterVolumeDb = c_DefaultMasterVolume;
|
||||
MusicVolumeDb = c_DefaultMusicVolume;
|
||||
SfxVolumeDb = c_DefaultSfxVolume;
|
||||
GameSpeed = c_DefaultGameSpeed;
|
||||
SaveSettings();
|
||||
}
|
||||
}
|
||||
|
||||
private void SaveSettings()
|
||||
{
|
||||
var config = new ConfigFile();
|
||||
|
||||
config.SetValue(c_SectionAudio, "master_db", MasterVolumeDb);
|
||||
config.SetValue(c_SectionAudio, "music_db", MusicVolumeDb);
|
||||
config.SetValue(c_SectionAudio, "sfx_db", SfxVolumeDb);
|
||||
config.SetValue(c_SectionGame, "speed", GameSpeed);
|
||||
|
||||
config.Save(c_ConfigPath);
|
||||
}
|
||||
|
||||
public void SetMasterVolume(float db)
|
||||
{
|
||||
MasterVolumeDb = db;
|
||||
ApplyVolumes();
|
||||
SaveSettings();
|
||||
}
|
||||
|
||||
public void SetMusicVolume(float db)
|
||||
{
|
||||
MusicVolumeDb = db;
|
||||
ApplyVolumes();
|
||||
SaveSettings();
|
||||
}
|
||||
|
||||
public void SetSfxVolume(float db)
|
||||
{
|
||||
SfxVolumeDb = db;
|
||||
ApplyVolumes();
|
||||
SaveSettings();
|
||||
}
|
||||
|
||||
public void SetGameSpeed(float gameSpeed)
|
||||
{
|
||||
GameSpeed = gameSpeed;
|
||||
SaveSettings();
|
||||
}
|
||||
|
||||
private void ApplyVolumes()
|
||||
{
|
||||
var masterBus = AudioServer.GetBusIndex("Master");
|
||||
var musicBus = AudioServer.GetBusIndex("Music");
|
||||
var sfxBus = AudioServer.GetBusIndex("Sfx");
|
||||
|
||||
if (masterBus != -1)
|
||||
AudioServer.SetBusVolumeDb(masterBus, MasterVolumeDb);
|
||||
|
||||
if (musicBus != -1)
|
||||
AudioServer.SetBusVolumeDb(musicBus, MusicVolumeDb);
|
||||
|
||||
if (sfxBus != -1)
|
||||
AudioServer.SetBusVolumeDb(sfxBus, SfxVolumeDb);
|
||||
}
|
||||
|
||||
public static SettingsManager Instance { get; private set; }
|
||||
|
||||
public float MasterVolumeDb { get; private set; }
|
||||
|
||||
public float MusicVolumeDb { get; private set; }
|
||||
|
||||
public float SfxVolumeDb { get; private set; }
|
||||
|
||||
public float GameSpeed { get; private set; }
|
||||
|
||||
private const float c_DefaultMusicVolume = -16.0f;
|
||||
private const float c_DefaultSfxVolume = 0.0f;
|
||||
private const float c_DefaultMasterVolume = 0.0f;
|
||||
private const float c_DefaultGameSpeed = 1.0f;
|
||||
|
||||
private const string c_ConfigPath = "user://settings.cfg";
|
||||
private const string c_SectionAudio = "audio";
|
||||
private const string c_SectionGame = "game";
|
||||
}
|
||||
Reference in New Issue
Block a user