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 if controls.has(
"input_mode"):
32 controls[
"input_mode"].item_selected.connect(_on_input_mode_selected)
33 controls[
"fullscreen"].toggled.connect(settings_manager.set_fullscreen)
34 if controls.has(
"low_power_mode"):
35 controls[
"low_power_mode"].toggled.connect(settings_manager.set_low_power_mode)
36 controls[
"master_slider"].value_changed.connect(func(value): _settings_manager().set_audio_value(
"master_volume", value / 100.0))
37 controls[
"music_slider"].value_changed.connect(func(value): _settings_manager().set_audio_value(
"music_volume", value / 100.0))
38 controls[
"sfx_slider"].value_changed.connect(func(value): _settings_manager().set_audio_value(
"sfx_volume", value / 100.0))
39 controls[
"master_mute"].toggled.connect(func(value): _settings_manager().set_audio_value(
"master_muted", value))
40 controls[
"music_mute"].toggled.connect(func(value): _settings_manager().set_audio_value(
"music_muted", value))
41 controls[
"sfx_mute"].toggled.connect(func(value): _settings_manager().set_audio_value(
"sfx_muted", value))
45func sync_values() -> void:
46 var settings_manager = _settings_manager()
47 var settings = settings_manager.get_settings()
48 var window_size_options = settings_manager.get_window_size_options()
49 controls[
"window_size"].clear()
50 var selected_index = 0
52 for label
in window_size_options.keys():
53 controls[
"window_size"].add_item(label)
54 if window_size_options[label] == settings[
"window_size"]:
55 selected_index = index
57 controls[
"window_size"].select(selected_index)
58 if controls.has(
"theme"):
59 controls[
"theme"].clear()
60 var theme_options = settings_manager.get_theme_options()
61 var selected_theme_index = 0
63 for label
in theme_options.keys():
64 controls[
"theme"].add_item(label)
65 if theme_options[label] == settings[
"theme"]:
66 selected_theme_index = theme_index
68 controls[
"theme"].select(selected_theme_index)
69 if controls.has(
"text_size"):
70 controls[
"text_size"].clear()
71 var text_size_options = settings_manager.get_text_size_options()
72 var selected_text_index = 0
74 for label
in text_size_options.keys():
75 controls[
"text_size"].add_item(label)
76 if text_size_options[label] == settings[
"text_size"]:
77 selected_text_index = text_index
79 controls[
"text_size"].select(selected_text_index)
80 if controls.has(
"input_mode"):
81 controls[
"input_mode"].clear()
82 var input_mode_options = settings_manager.get_input_mode_options()
83 var selected_input_index := 0
85 for label
in input_mode_options.keys():
86 controls[
"input_mode"].add_item(label)
87 if input_mode_options[label] == settings.get(
"input_mode",
"touch"):
88 selected_input_index = input_index
90 controls[
"input_mode"].select(selected_input_index)
91 controls[
"fullscreen"].button_pressed = bool(settings[
"fullscreen"])
92 if controls.has(
"low_power_mode"):
93 controls[
"low_power_mode"].button_pressed = bool(settings.get(
"low_power_mode", false))
94 controls[
"master_slider"].value = float(settings[
"master_volume"]) * 100.0
95 controls[
"music_slider"].value = float(settings[
"music_volume"]) * 100.0
96 controls[
"sfx_slider"].value = float(settings[
"sfx_volume"]) * 100.0
97 controls[
"master_mute"].button_pressed = bool(settings[
"master_muted"])
98 controls[
"music_mute"].button_pressed = bool(settings[
"music_muted"])
99 controls[
"sfx_mute"].button_pressed = bool(settings[
"sfx_muted"])
102func _on_window_size_selected(index:int) -> void:
103 var label = controls[
"window_size"].get_item_text(index)
104 _settings_manager().set_window_size_by_label(label)
107func _on_theme_selected(index:int) -> void:
108 var label = controls[
"theme"].get_item_text(index)
109 _settings_manager().set_theme_by_label(label)
112func _on_text_size_selected(index:int) -> void:
113 var label = controls[
"text_size"].get_item_text(index)
114 _settings_manager().set_text_size_by_label(label)
117func _on_input_mode_selected(index:int) -> void:
118 var label = controls[
"input_mode"].get_item_text(index)
119 var options = _settings_manager().get_input_mode_options()
120 _settings_manager().set_input_mode(str(options.get(label,
"touch")))
123func _settings_manager():
124 var manager = _get_autoload(
"SettingsManager")
127 if settings_manager_fallback == null:
128 settings_manager_fallback = SettingsManagerScript.new()
129 return settings_manager_fallback
132func _get_autoload(name:String):
133 var loop = Engine.get_main_loop()
134 if loop
is SceneTree:
135 return loop.root.get_node_or_null(name)