Tales-of-PKMN/game/core/settings.gd
2026-10-13 10:12:12 +02:00

56 lines
1.4 KiB
GDScript

extends Node
signal changed(key: StringName)
const SAVE_PATH := "user://settings.cfg"
const SECTION := "settings"
const DEFAULTS := {
&"master_volume": 1.0,
&"music_volume": 1.0,
&"sfx_volume": 1.0,
&"fullscreen": false,
}
# clé de réglage -> bus audio
const VOLUME_BUSES := {
&"master_volume": &"Master",
&"music_volume": &"Music",
&"sfx_volume": &"SFX",
}
var _values : Dictionary = DEFAULTS.duplicate()
func _ready() -> void:
load_settings()
for key in _values: _apply(key)
func get_value(key : StringName) -> Variant:
return _values[key]
func set_value(key : StringName, value : Variant) -> void:
if _values[key] == value: return
_values[key] = value
_apply(key)
changed.emit(key)
func load_settings() -> void:
var cfg := ConfigFile.new()
cfg.load(SAVE_PATH) # si le fichier n'existe pas, get_value renvoie la valeur par défaut
for key in DEFAULTS:
_values[key] = cfg.get_value(SECTION, key, DEFAULTS[key])
func save() -> void:
var cfg := ConfigFile.new()
for key in _values: cfg.set_value(SECTION, key, _values[key])
cfg.save(SAVE_PATH)
func _apply(key : StringName) -> void:
var value : Variant = _values[key]
if VOLUME_BUSES.has(key):
var bus := AudioServer.get_bus_index(VOLUME_BUSES[key])
if bus != -1: AudioServer.set_bus_volume_db(bus, linear_to_db(value))
elif key == &"fullscreen":
DisplayServer.window_set_mode(
DisplayServer.WINDOW_MODE_FULLSCREEN if value else DisplayServer.WINDOW_MODE_WINDOWED)