From 0a9b3f96d116412e69dcda469ad35370cf3badd1 Mon Sep 17 00:00:00 2001 From: Jan Heemstra Date: Wed, 2 Jun 2021 17:00:28 +0200 Subject: [PATCH] Rework GUI system --- Game/ControlsMenu.tscn | 29 +++++++++++++++++++++++++++++ Game/GUI.gd | 22 ++++++++++++++++++++-- Game/GUI.tscn | 24 +++++++++++++----------- Game/GraphicsMenu.tscn | 16 +++++++++------- Game/MenuButton.gd | 4 ++++ Game/MenuButton.tscn | 11 +++++++++++ Game/MenuCheckButton.gd | 7 +++++++ Game/MenuCheckButton.tscn | 13 +++++++++++++ Game/MenuData.gd | 15 +++++++++++++++ Game/MenuData.tscn | 7 +++++++ Game/MenuItem.gd | 15 +++++++++++++++ Game/MenuItem.tscn | 11 +++++++++++ Game/OptionsMenu.tscn | 26 ++++++++++++++++---------- 13 files changed, 170 insertions(+), 30 deletions(-) create mode 100644 Game/ControlsMenu.tscn create mode 100644 Game/MenuButton.gd create mode 100644 Game/MenuButton.tscn create mode 100644 Game/MenuCheckButton.gd create mode 100644 Game/MenuCheckButton.tscn create mode 100644 Game/MenuData.gd create mode 100644 Game/MenuData.tscn create mode 100644 Game/MenuItem.gd create mode 100644 Game/MenuItem.tscn diff --git a/Game/ControlsMenu.tscn b/Game/ControlsMenu.tscn new file mode 100644 index 0000000..8a28063 --- /dev/null +++ b/Game/ControlsMenu.tscn @@ -0,0 +1,29 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://Menu.tscn" type="PackedScene" id=1] + +[node name="ControlsMenu" instance=ExtResource( 1 )] + +[node name="MouseSensitivity" type="HBoxContainer" parent="." index="0"] +offset_right = 337.0 +offset_bottom = 26.0 +script = null + +[node name="Label" type="Label" parent="MouseSensitivity" index="0"] +offset_right = 133.0 +offset_bottom = 26.0 +text = "Mouse sensitivity" +structured_text_bidi_override_options = [ ] +script = null + +[node name="Slider" type="HSlider" parent="MouseSensitivity" index="1"] +offset_left = 137.0 +offset_right = 337.0 +offset_bottom = 16.0 +rect_min_size = Vector2( 200, 0 ) +script = null + +[node name="Back" parent="." index="1"] +offset_top = 30.0 +offset_right = 337.0 +offset_bottom = 59.0 diff --git a/Game/GUI.gd b/Game/GUI.gd index a8de6c1..cbe19a2 100644 --- a/Game/GUI.gd +++ b/Game/GUI.gd @@ -1,8 +1,26 @@ extends Control -# Called when the node enters the scene tree for the first time. +@export var filename = "user://settings.save" +var settings = {} + func _ready(): - pass # Replace with function body. + if has_settings(): + load_settings() + +func has_settings(): + return false + +func save_settings(): + var file = File.new() + file.open(filename, File.WRITE) + file.store_var(settings) + file.close() + +func load_settings(): + var file = File.new() + file.open(filename, File.READ) + settings = file.get_var() + file.close() func quit_game(): get_tree().quit() diff --git a/Game/GUI.tscn b/Game/GUI.tscn index 324efc3..c3a55cb 100644 --- a/Game/GUI.tscn +++ b/Game/GUI.tscn @@ -1,35 +1,37 @@ -[gd_scene load_steps=3 format=2] +[gd_scene load_steps=4 format=2] [ext_resource path="res://GUI.gd" type="Script" id=1] [ext_resource path="res://Menu.tscn" type="PackedScene" id=2] +[ext_resource path="res://MenuButton.tscn" type="PackedScene" id=3] [node name="GUI" type="CenterContainer"] anchor_right = 1.0 anchor_bottom = 1.0 script = ExtResource( 1 ) -__meta__ = { -"_edit_use_anchors_": false -} -[node name="MainMenu" parent="." instance=ExtResource( 2 )] +[node name="Menu" parent="." instance=ExtResource( 2 )] offset_left = 477.0 offset_top = 252.0 offset_right = 547.0 offset_bottom = 347.0 -[node name="Options" type="Button" parent="MainMenu"] +[node name="Options" parent="Menu" instance=ExtResource( 3 )] +anchor_right = 0.0 +anchor_bottom = 0.0 offset_top = 33.0 offset_right = 70.0 offset_bottom = 62.0 text = "options" -script = null +label = "options" -[node name="Quit" type="Button" parent="MainMenu"] +[node name="Quit" parent="Menu" instance=ExtResource( 3 )] +anchor_right = 0.0 +anchor_bottom = 0.0 offset_top = 66.0 offset_right = 70.0 offset_bottom = 95.0 text = "quit" -script = null +label = "quit" -[connection signal="pressed" from="MainMenu/Options" to="MainMenu" method="open_menu" binds= [ "res://OptionsMenu.tscn" ]] -[connection signal="pressed" from="MainMenu/Quit" to="." method="quit_game"] +[connection signal="pressed" from="Menu/Options" to="Menu" method="open_menu" binds= [ "res://OptionsMenu.tscn" ]] +[connection signal="pressed" from="Menu/Quit" to="." method="quit_game"] diff --git a/Game/GraphicsMenu.tscn b/Game/GraphicsMenu.tscn index 06d6697..7b00039 100644 --- a/Game/GraphicsMenu.tscn +++ b/Game/GraphicsMenu.tscn @@ -1,20 +1,22 @@ -[gd_scene load_steps=3 format=2] +[gd_scene load_steps=4 format=2] [ext_resource path="res://Menu.tscn" type="PackedScene" id=1] [ext_resource path="res://GraphicsMenu.gd" type="Script" id=2] +[ext_resource path="res://MenuCheckButton.tscn" type="PackedScene" id=3] [node name="GraphicsMenu" instance=ExtResource( 1 )] script = ExtResource( 2 ) -[node name="Fullscreen" type="CheckButton" parent="." index="0"] -offset_right = 158.0 +[node name="Fullscreen" parent="." index="0" instance=ExtResource( 3 )] +anchor_right = 0.0 +anchor_bottom = 0.0 +offset_right = 76.0 offset_bottom = 40.0 -text = "Fullscreen" -script = null +label = "Fullscreen" [node name="Back" parent="." index="1"] offset_top = 44.0 -offset_right = 158.0 +offset_right = 76.0 offset_bottom = 73.0 -[connection signal="toggled" from="Fullscreen" to="." method="toggle_fullscreen"] +[connection signal="data_changed" from="Fullscreen" to="." method="toggle_fullscreen"] diff --git a/Game/MenuButton.gd b/Game/MenuButton.gd new file mode 100644 index 0000000..4642fad --- /dev/null +++ b/Game/MenuButton.gd @@ -0,0 +1,4 @@ +extends "res://MenuItem.gd" + +func on_label_changed(): + self.text = label diff --git a/Game/MenuButton.tscn b/Game/MenuButton.tscn new file mode 100644 index 0000000..0845bec --- /dev/null +++ b/Game/MenuButton.tscn @@ -0,0 +1,11 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://MenuButton.gd" type="Script" id=1] + +[node name="MenuButton" type="Button"] +anchor_right = 1.0 +anchor_bottom = 1.0 +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} diff --git a/Game/MenuCheckButton.gd b/Game/MenuCheckButton.gd new file mode 100644 index 0000000..e3b8f80 --- /dev/null +++ b/Game/MenuCheckButton.gd @@ -0,0 +1,7 @@ +extends "res://MenuData.gd" + +func on_label_changed(): + self.text = label + +func on_toggle(button_pressed): + data = button_pressed diff --git a/Game/MenuCheckButton.tscn b/Game/MenuCheckButton.tscn new file mode 100644 index 0000000..53daede --- /dev/null +++ b/Game/MenuCheckButton.tscn @@ -0,0 +1,13 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://MenuCheckButton.gd" type="Script" id=1] + +[node name="MenuCheckButton" type="CheckButton"] +anchor_right = 1.0 +anchor_bottom = 1.0 +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[connection signal="toggled" from="." to="." method="on_toggle"] diff --git a/Game/MenuData.gd b/Game/MenuData.gd new file mode 100644 index 0000000..55ea763 --- /dev/null +++ b/Game/MenuData.gd @@ -0,0 +1,15 @@ +extends "res://MenuItem.gd" + +signal data_changed(data) + +var data = null: + set(_data): + emit_signal("data_changed", _data) + data = _data + save_data() + +func save_data(): + var GUI = get_parent().get_parent() + + GUI.settings[label] = data + GUI.save_settings() diff --git a/Game/MenuData.tscn b/Game/MenuData.tscn new file mode 100644 index 0000000..a1b53b0 --- /dev/null +++ b/Game/MenuData.tscn @@ -0,0 +1,7 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://MenuItem.tscn" type="PackedScene" id=1] +[ext_resource path="res://MenuData.gd" type="Script" id=2] + +[node name="MenuData" instance=ExtResource( 1 )] +script = ExtResource( 2 ) diff --git a/Game/MenuItem.gd b/Game/MenuItem.gd new file mode 100644 index 0000000..0c07a30 --- /dev/null +++ b/Game/MenuItem.gd @@ -0,0 +1,15 @@ +extends Control + +@export var label = "": + set(_label): + label = _label + on_label_changed() + get: + return label + +func on_label_changed(): + pass + +# Called when the node enters the scene tree for the first time. +func _ready(): + pass diff --git a/Game/MenuItem.tscn b/Game/MenuItem.tscn new file mode 100644 index 0000000..63ad0a0 --- /dev/null +++ b/Game/MenuItem.tscn @@ -0,0 +1,11 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://MenuItem.gd" type="Script" id=1] + +[node name="MenuItem" type="Control"] +anchor_right = 1.0 +anchor_bottom = 1.0 +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} diff --git a/Game/OptionsMenu.tscn b/Game/OptionsMenu.tscn index ba8b68e..931097f 100644 --- a/Game/OptionsMenu.tscn +++ b/Game/OptionsMenu.tscn @@ -1,25 +1,31 @@ -[gd_scene load_steps=2 format=2] +[gd_scene load_steps=3 format=2] [ext_resource path="res://Menu.tscn" type="PackedScene" id=1] +[ext_resource path="res://MenuButton.tscn" type="PackedScene" id=2] [node name="OptionsMenu" instance=ExtResource( 1 )] -[node name="Graphics" type="Button" parent="." index="0"] -offset_right = 80.0 +[node name="Graphics" parent="." index="0" instance=ExtResource( 2 )] +anchor_right = 0.0 +anchor_bottom = 0.0 +offset_right = 77.0 offset_bottom = 29.0 -text = "Graphics" -script = null +text = "graphics" +label = "graphics" -[node name="Controls" type="Button" parent="." index="1"] +[node name="Controls" parent="." index="1" instance=ExtResource( 2 )] +anchor_right = 0.0 +anchor_bottom = 0.0 offset_top = 33.0 -offset_right = 80.0 +offset_right = 77.0 offset_bottom = 62.0 -text = "Controls" -script = null +text = "controls" +label = "controls" [node name="Back" parent="." index="2"] offset_top = 66.0 -offset_right = 80.0 +offset_right = 77.0 offset_bottom = 95.0 [connection signal="pressed" from="Graphics" to="." method="open_menu" binds= [ "res://GraphicsMenu.tscn" ]] +[connection signal="pressed" from="Controls" to="." method="open_menu" binds= [ "res://ControlsMenu.tscn" ]]