11const SettingsManagerScript = preload(
"res://scripts/systems/settingsManager/settings_manager.gd")
14var settings_manager_fallback
22func bind(bound_controls:Dictionary) -> void:
23 controls = bound_controls
24 var settings_manager = _settings_manager()
26 controls[
"window_size"].item_selected.connect(_on_window_size_selected)
27 if controls.has(
"theme"):
28 controls[
"theme"].item_selected.connect(_on_theme_selected)
29 if controls.has(
"text_size"):
30 controls[
"text_size"].item_selected.connect(_on_text_size_selected)
31 controls[
"fullscreen"].toggled.connect(settings_manager.set_fullscreen)
32 if controls.has(
"low_power_mode"):
33 controls[
"low_power_mode"].toggled.connect(settings_manager.set_low_power_mode)
34 controls[
"master_slider"].value_changed.connect(func(value): _settings_manager().set_audio_value(
"master_volume", value / 100.0))
35 controls[
"music_slider"].value_changed.connect(func(value): _settings_manager().set_audio_value(
"music_volume", value / 100.0))
36 controls[
"sfx_slider"].value_changed.connect(func(value): _settings_manager().set_audio_value(
"sfx_volume", value / 100.0))
37 controls[
"master_mute"].toggled.connect(func(value): _settings_manager().set_audio_value(
"master_muted", value))
38 controls[
"music_mute"].toggled.connect(func(value): _settings_manager().set_audio_value(
"music_muted", value))
39 controls[
"sfx_mute"].toggled.connect(func(value): _settings_manager().set_audio_value(
"sfx_muted", value))
43func sync_values() -> void:
44 var settings_manager = _settings_manager()
45 var settings = settings_manager.get_settings()
46 var window_size_options = settings_manager.get_window_size_options()
47 controls[
"window_size"].clear()
48 var selected_index = 0
50 for label
in window_size_options.keys():
51 controls[
"window_size"].add_item(label)
52 if window_size_options[label] == settings[
"window_size"]:
53 selected_index = index
55 controls[
"window_size"].select(selected_index)
56 if controls.has(
"theme"):
57 controls[
"theme"].clear()
58 var theme_options = settings_manager.get_theme_options()
59 var selected_theme_index = 0
61 for label
in theme_options.keys():
62 controls[
"theme"].add_item(label)
63 if theme_options[label] == settings[
"theme"]:
64 selected_theme_index = theme_index
66 controls[
"theme"].select(selected_theme_index)
67 if controls.has(
"text_size"):
68 controls[
"text_size"].clear()
69 var text_size_options = settings_manager.get_text_size_options()
70 var selected_text_index = 0
72 for label
in text_size_options.keys():
73 controls[
"text_size"].add_item(label)
74 if text_size_options[label] == settings[
"text_size"]:
75 selected_text_index = text_index
77 controls[
"text_size"].select(selected_text_index)
78 controls[
"fullscreen"].button_pressed = bool(settings[
"fullscreen"])
79 if controls.has(
"low_power_mode"):
80 controls[
"low_power_mode"].button_pressed = bool(settings.get(
"low_power_mode", false))
81 controls[
"master_slider"].value = float(settings[
"master_volume"]) * 100.0
82 controls[
"music_slider"].value = float(settings[
"music_volume"]) * 100.0
83 controls[
"sfx_slider"].value = float(settings[
"sfx_volume"]) * 100.0
84 controls[
"master_mute"].button_pressed = bool(settings[
"master_muted"])
85 controls[
"music_mute"].button_pressed = bool(settings[
"music_muted"])
86 controls[
"sfx_mute"].button_pressed = bool(settings[
"sfx_muted"])
89func _on_window_size_selected(index:int) -> void:
90 var label = controls[
"window_size"].get_item_text(index)
91 _settings_manager().set_window_size_by_label(label)
94func _on_theme_selected(index:int) -> void:
95 var label = controls[
"theme"].get_item_text(index)
96 _settings_manager().set_theme_by_label(label)
99func _on_text_size_selected(index:int) -> void:
100 var label = controls[
"text_size"].get_item_text(index)
101 _settings_manager().set_text_size_by_label(label)
104func _settings_manager():
105 var manager = _get_autoload(
"SettingsManager")
108 if settings_manager_fallback == null:
109 settings_manager_fallback = SettingsManagerScript.new()
110 return settings_manager_fallback
113func _get_autoload(name:String):
114 var loop = Engine.get_main_loop()
115 if loop
is SceneTree:
116 return loop.root.get_node_or_null(name)