From 3798205c740e7e2faf2594866cb497260012508c Mon Sep 17 00:00:00 2001 From: Spartan322 Date: Fri, 10 Feb 2023 04:18:46 -0500 Subject: Implement a usable settings UI, should fulfill: SS-58, SS-61, SS-6, SS-9, SS-10, SS-11, SS-13 UI-11, UI-12, UI-19, UI-44, UI-47, UI-22 --- game/src/OptionMenu/OptionsMenu.gd | 72 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 game/src/OptionMenu/OptionsMenu.gd (limited to 'game/src/OptionMenu/OptionsMenu.gd') diff --git a/game/src/OptionMenu/OptionsMenu.gd b/game/src/OptionMenu/OptionsMenu.gd new file mode 100644 index 0000000..e3c8433 --- /dev/null +++ b/game/src/OptionMenu/OptionsMenu.gd @@ -0,0 +1,72 @@ +extends Control + +@export +var user_settings_file_path : String = "settings.cfg" + +signal back_button_pressed + +signal save_settings(save_file: ConfigFile) +signal load_settings(load_file: ConfigFile) +signal reset_settings() + +@onready +var _settings_file_path := "user://" + user_settings_file_path +var _settings_file := ConfigFile.new() + +func _ready(): + # Prepare options menu before loading user settings + + print("TODO: Load user settings!") + + if FileAccess.file_exists(_settings_file_path): + _settings_file.load(_settings_file_path) + load_settings.emit(_settings_file) + + var tab_bar : TabBar = $Margin/Tab.get_child(0, true) + + # This ends up easier to manage then trying to manually recreate the TabContainer's behavior + # These buttons can be accessed regardless of the tab + var button_list := HBoxContainer.new() + button_list.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT) + button_list.alignment = BoxContainer.ALIGNMENT_END + tab_bar.add_child(button_list) + + var reset_button := Button.new() + reset_button.text = "R" + reset_button.pressed.connect(func(): reset_settings.emit()) + button_list.add_child(reset_button) + + var back_button := Button.new() + back_button.text = "X" + back_button.pressed.connect(_on_back_button_pressed) + button_list.add_child(back_button) + + get_viewport().get_window().close_requested.connect(_on_window_close_requested) + +func _notification(what): + match what: + NOTIFICATION_CRASH: + _on_window_close_requested() + +# Could pass the LocaleButton between the MainMenu and OptionsMenu +# but that seems a bit excessive +func toggle_locale_button_visibility(locale_visible : bool): + print("Toggling locale button: %s" % locale_visible) + $LocaleVBox/LocaleHBox/LocaleButton.visible = locale_visible + +func _on_ear_exploder_toggled(button_pressed): + print("KABOOM!!!" if button_pressed else "DEFUSED!!!") + + +func _on_back_button_pressed(): + save_settings.emit(_settings_file) + _settings_file.save(_settings_file_path) + back_button_pressed.emit() + + +func _on_spin_box_value_changed(value): + print("Spinbox: %d" % value) + +func _on_window_close_requested() -> void: + if visible: + _on_back_button_pressed() -- cgit v1.2.3-56-ga3b1