56 lines
1.4 KiB
GDScript
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)
|