RapidGameFramework
Reusable Godot managers for data-driven small games
Loading...
Searching...
No Matches
settings_panel_controller.gd
Go to the documentation of this file.
1extends RefCounted
2
3
10
11const SettingsManagerScript = preload("res://scripts/systems/settingsManager/settings_manager.gd")
12
13var controls := {}
14var settings_manager_fallback
15
16
17
22func bind(bound_controls:Dictionary) -> void:
23 controls = bound_controls
24 var settings_manager = _settings_manager()
25 sync_values()
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))
40
41
42
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
49 var 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
54 index += 1
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
60 var 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
65 theme_index += 1
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
71 var 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
76 text_index += 1
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"])
87
88
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)
92
93
94func _on_theme_selected(index:int) -> void:
95 var label = controls["theme"].get_item_text(index)
96 _settings_manager().set_theme_by_label(label)
97
98
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)
102
103
104func _settings_manager():
105 var manager = _get_autoload("SettingsManager")
106 if manager != null:
107 return manager
108 if settings_manager_fallback == null:
109 settings_manager_fallback = SettingsManagerScript.new()
110 return settings_manager_fallback
111
112
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)
117 return null