From c65340782293c181c5bcb56f88bb52a6ef1d5d06 Mon Sep 17 00:00:00 2001 From: Ryan Reed Date: Wed, 5 Mar 2025 22:12:09 -0500 Subject: [PATCH] Adding a simple options menu --- autoloads/global.gd | 4 +++ autoloads/global.gd.uid | 1 + project.godot | 1 + scenes/blocks/block.gd | 2 ++ scenes/ui/options_menu.tscn | 60 +++++++++++++++++++++++++++++++++++++ scenes/ui/ui.gd | 38 +++++++++++++++++++++++ scenes/ui/ui.gd.uid | 1 + scenes/ui/ui.tscn | 15 +++++++++- scenes/ui/waila.gd | 2 ++ 9 files changed, 123 insertions(+), 1 deletion(-) create mode 100644 autoloads/global.gd create mode 100644 autoloads/global.gd.uid create mode 100644 scenes/ui/options_menu.tscn create mode 100644 scenes/ui/ui.gd create mode 100644 scenes/ui/ui.gd.uid diff --git a/autoloads/global.gd b/autoloads/global.gd new file mode 100644 index 0000000..70a1e29 --- /dev/null +++ b/autoloads/global.gd @@ -0,0 +1,4 @@ +extends Node + +var enable_waila: bool = true ## Enable `What Am I Looking At` UI +var enable_block_highlight: bool = true diff --git a/autoloads/global.gd.uid b/autoloads/global.gd.uid new file mode 100644 index 0000000..032305e --- /dev/null +++ b/autoloads/global.gd.uid @@ -0,0 +1 @@ +uid://cp6sum1t6el0a diff --git a/project.godot b/project.godot index 24ee801..44faefa 100644 --- a/project.godot +++ b/project.godot @@ -17,6 +17,7 @@ config/icon="res://icon.svg" [autoload] +Global="*res://autoloads/global.gd" EntityManager="*res://autoloads/entity_manager.gd" [debug] diff --git a/scenes/blocks/block.gd b/scenes/blocks/block.gd index 7d9c77e..c0fadfb 100644 --- a/scenes/blocks/block.gd +++ b/scenes/blocks/block.gd @@ -27,6 +27,8 @@ func get_id() -> String: return id func hook() -> void: + if not Global.enable_block_highlight: return + highlight_mesh.visible = true # TODO: Rename to something else (maybe remove()) diff --git a/scenes/ui/options_menu.tscn b/scenes/ui/options_menu.tscn new file mode 100644 index 0000000..0f0a976 --- /dev/null +++ b/scenes/ui/options_menu.tscn @@ -0,0 +1,60 @@ +[gd_scene format=3 uid="uid://w6wtjosjn1qu"] + +[node name="OptionsMenu" type="MarginContainer"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="PanelContainer" type="PanelContainer" parent="."] +layout_mode = 2 + +[node name="MarginContainer" type="MarginContainer" parent="PanelContainer"] +layout_mode = 2 +theme_override_constants/margin_left = 20 +theme_override_constants/margin_top = 20 +theme_override_constants/margin_right = 20 +theme_override_constants/margin_bottom = 20 + +[node name="VBoxContainer" type="VBoxContainer" parent="PanelContainer/MarginContainer"] +layout_mode = 2 + +[node name="Label" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer"] +layout_mode = 2 +theme_type_variation = &"HeaderMedium" +text = "Options Menu" +horizontal_alignment = 1 + +[node name="Waila" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer"] +layout_mode = 2 + +[node name="CheckButton" type="CheckButton" parent="PanelContainer/MarginContainer/VBoxContainer/Waila"] +layout_mode = 2 +button_pressed = true +text = "Enable Waila" + +[node name="BlockHighlights" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer"] +layout_mode = 2 + +[node name="CheckButton" type="CheckButton" parent="PanelContainer/MarginContainer/VBoxContainer/BlockHighlights"] +layout_mode = 2 +button_pressed = true +text = "Enable Block Highlighting" + +[node name="CenterContainer" type="CenterContainer" parent="PanelContainer/MarginContainer"] +layout_mode = 2 +size_flags_vertical = 8 + +[node name="HBoxContainer" type="HBoxContainer" parent="PanelContainer/MarginContainer/CenterContainer"] +layout_mode = 2 + +[node name="CloseButton" type="Button" parent="PanelContainer/MarginContainer/CenterContainer/HBoxContainer"] +layout_mode = 2 +theme_override_font_sizes/font_size = 20 +text = "Close Menu" + +[node name="ExitButton" type="Button" parent="PanelContainer/MarginContainer/CenterContainer/HBoxContainer"] +layout_mode = 2 +theme_override_font_sizes/font_size = 20 +text = "Exit Game" diff --git a/scenes/ui/ui.gd b/scenes/ui/ui.gd new file mode 100644 index 0000000..d213111 --- /dev/null +++ b/scenes/ui/ui.gd @@ -0,0 +1,38 @@ +class_name UI +extends CanvasLayer + + +@onready var crosshair: CenterContainer = $Crosshair +@onready var options_menu: MarginContainer = $OptionsMenu +@onready var waila: Waila = $Waila + + +func _process(_delta: float) -> void: + if Input.is_action_just_pressed("ui_cancel"): + toggle_options_menu() + + +func toggle_options_menu() -> void: + crosshair.visible = !options_menu.visible + options_menu.visible = !options_menu.visible + if options_menu.visible: + waila.visible = false + Input.mouse_mode = Input.MOUSE_MODE_VISIBLE + else: + Input.mouse_mode = Input.MOUSE_MODE_CAPTURED + + +# Options +func _on_block_highlights_toggled(toggled_on: bool) -> void: + Global.enable_block_highlight = toggled_on + +func _on_waila_toggled(toggled_on: bool) -> void: + Global.enable_waila = toggled_on + + +# Signals +func _on_close_button_pressed() -> void: + toggle_options_menu() + +func _on_exit_button_pressed() -> void: + get_tree().quit() diff --git a/scenes/ui/ui.gd.uid b/scenes/ui/ui.gd.uid new file mode 100644 index 0000000..04e64b7 --- /dev/null +++ b/scenes/ui/ui.gd.uid @@ -0,0 +1 @@ +uid://bslimr2y4lnvq diff --git a/scenes/ui/ui.tscn b/scenes/ui/ui.tscn index 62c0fe2..5874af3 100644 --- a/scenes/ui/ui.tscn +++ b/scenes/ui/ui.tscn @@ -1,8 +1,11 @@ -[gd_scene load_steps=2 format=3 uid="uid://c7fj7wla8bd70"] +[gd_scene load_steps=4 format=3 uid="uid://c7fj7wla8bd70"] +[ext_resource type="Script" uid="uid://bslimr2y4lnvq" path="res://scenes/ui/ui.gd" id="1_aac20"] [ext_resource type="PackedScene" uid="uid://dvogu3djluqsn" path="res://scenes/ui/waila.tscn" id="1_u7n8c"] +[ext_resource type="PackedScene" uid="uid://w6wtjosjn1qu" path="res://scenes/ui/options_menu.tscn" id="2_f5cxw"] [node name="UI" type="CanvasLayer"] +script = ExtResource("1_aac20") [node name="Crosshair" type="CenterContainer" parent="."] anchors_preset = 15 @@ -22,3 +25,13 @@ layout_mode = 2 mouse_filter = 2 [node name="Waila" parent="." instance=ExtResource("1_u7n8c")] + +[node name="OptionsMenu" parent="." instance=ExtResource("2_f5cxw")] +visible = false + +[connection signal="toggled" from="OptionsMenu/PanelContainer/MarginContainer/VBoxContainer/Waila/CheckButton" to="." method="_on_waila_toggled"] +[connection signal="toggled" from="OptionsMenu/PanelContainer/MarginContainer/VBoxContainer/BlockHighlights/CheckButton" to="." method="_on_block_highlights_toggled"] +[connection signal="pressed" from="OptionsMenu/PanelContainer/MarginContainer/CenterContainer/HBoxContainer/CloseButton" to="." method="_on_close_button_pressed"] +[connection signal="pressed" from="OptionsMenu/PanelContainer/MarginContainer/CenterContainer/HBoxContainer/ExitButton" to="." method="_on_exit_button_pressed"] + +[editable path="OptionsMenu"] diff --git a/scenes/ui/waila.gd b/scenes/ui/waila.gd index e85dfb8..24fa58b 100644 --- a/scenes/ui/waila.gd +++ b/scenes/ui/waila.gd @@ -28,6 +28,8 @@ func get_target() -> Block: return _target func hook_target(id: String) -> void: + if not Global.enable_waila: return + var item: ItemResource = DBItems.ref.data[id] name_label.text = item.name + " (" + id + ")" description_label.text = item.description