extends Control
class_name SettingsSaver
# utility
const UTIL = "utility"
var countdown_step_length: float = 1.0
# graphical
const GRAPHIC = "graphics"
var viewport_scale: float = 100.0
var camera_fov: float = 75.0
# trying the [ConfigFile] class out instead of the usual var2str/str2var with dict
var cfg := ConfigFile.new()
@onready var nodes := {
"countdown_step_length" = %countdown_step,
"camera_fov" = %camera_fov,
"viewport_scale" = %viewport_scale
}
func _load():
var err := cfg.load(Globals.SETTINGS)
if err != OK: # no file
_save() # make it
return
getv(UTIL, "countdown_step_length", 0.05, 30)
getv(GRAPHIC, "camera_fov", 1, 179)
getv(GRAPHIC, "viewport_scale", 1, 100)
func getv(section: String, variable: String, p_min: float, p_max: float):
if cfg.has_section_key(section, variable):
# i can use self[variable] but i think set() and get() is more readable
var value := clampf(cfg.get_value(section, variable, get(variable)), p_min, p_max)
set(variable, value)
if nodes[variable] is SpinBox:
nodes[variable].value = value
else:
cfg.set_value(section, variable, get(variable))
func setv(section: String, variable: String):
cfg.set_value(section, variable, get(variable))
func _save():
setv(UTIL, "countdown_step_length")
setv(GRAPHIC, "camera_fov")
setv(GRAPHIC, "viewport_scale")
cfg.save(Globals.SETTINGS)
func _connect():
for variable in nodes:
(nodes[variable] as SpinBox).value_changed.connect(_spinner_change.bind(variable))
func _ready() -> void:
_load()
_connect()
Globals.cfg = cfg
func _spinner_change(value: float, variable: String) -> void:
set(variable, value)
_save()