Explorar o código

:sparkles: added initial settings menu

Felix Bytow hai 10 meses
pai
achega
3313047bed

+ 13 - 0
assets/scripts/config.gd

@@ -0,0 +1,13 @@
+class_name Config
+
+const FILE_NAME = "user://config.ini"
+
+static var content = ConfigFile.new()
+
+static func _static_init():
+	if content.load(FILE_NAME) != OK:
+		content.set_value("GENERAL", "SHOW_TUTORIAL", true)
+		content.save(FILE_NAME)
+
+static func save_changes():
+	content.save(FILE_NAME)

+ 4 - 0
screens/main_menu.gd

@@ -8,3 +8,7 @@ func _on_new_game_pressed():
 
 func _on_quit_pressed():
 	get_tree().quit()
+
+
+func _on_settings_pressed():
+	get_tree().change_scene_to_file("res://screens/settings_menu.tscn")

+ 1 - 1
screens/main_menu.tscn

@@ -55,7 +55,6 @@ text = "LEADERBOARD"
 
 [node name="Settings" type="Button" parent="Buttons"]
 layout_mode = 2
-disabled = true
 text = "SETTINGS"
 
 [node name="Credits" type="Button" parent="Buttons"]
@@ -67,4 +66,5 @@ layout_mode = 2
 text = "QUIT"
 
 [connection signal="pressed" from="Buttons/NewGame" to="." method="_on_new_game_pressed"]
+[connection signal="pressed" from="Buttons/Settings" to="." method="_on_settings_pressed"]
 [connection signal="pressed" from="Buttons/Quit" to="." method="_on_quit_pressed"]

+ 31 - 0
screens/settings_menu.gd

@@ -0,0 +1,31 @@
+extends PanelContainer
+
+const GENERAL = "GENERAL"
+const SHOW_TUTORIAL = "SHOW_TUTORIAL"
+
+var original_state = {}
+
+@onready var show_tutorial = $MarginContainer/VBoxContainer/Tabs/General/GridContainer/TutorialCheckBox
+@onready var discard_button = $MarginContainer/VBoxContainer/Buttons/Discard
+
+func _ready():
+	discard_button.text = "BACK"
+	original_state[SHOW_TUTORIAL] = Config.content.get_value("GENERAL", SHOW_TUTORIAL)
+	show_tutorial.button_pressed = original_state[SHOW_TUTORIAL]
+	
+func _process(_delta):
+	if Input.is_action_just_pressed("ui_cancel"):
+		self._on_discard_pressed()
+
+func _on_discard_pressed():
+	get_tree().change_scene_to_file("res://screens/main_menu.tscn")
+	
+func _on_save_pressed():
+	Config.content.set_value(GENERAL, SHOW_TUTORIAL, show_tutorial.button_pressed)
+	Config.save_changes()
+	get_tree().change_scene_to_file("res://screens/main_menu.tscn")
+	
+func update_discard_button():
+	var dirty = \
+		original_state[SHOW_TUTORIAL] != show_tutorial.button_pressed
+	discard_button.text = "DISCARD" if dirty else "BACK"

+ 56 - 0
screens/settings_menu.tscn

@@ -0,0 +1,56 @@
+[gd_scene load_steps=2 format=3 uid="uid://de23203c43bkk"]
+
+[ext_resource type="Script" path="res://screens/settings_menu.gd" id="1_iarqn"]
+
+[node name="SettingsMenu" type="PanelContainer"]
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+script = ExtResource("1_iarqn")
+
+[node name="MarginContainer" type="MarginContainer" parent="."]
+layout_mode = 2
+theme_override_constants/margin_left = 10
+theme_override_constants/margin_top = 10
+theme_override_constants/margin_right = 10
+theme_override_constants/margin_bottom = 10
+
+[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer"]
+layout_mode = 2
+theme_override_constants/separation = 10
+
+[node name="Tabs" type="TabContainer" parent="MarginContainer/VBoxContainer"]
+layout_mode = 2
+size_flags_vertical = 3
+theme_override_constants/side_margin = 5
+
+[node name="General" type="ScrollContainer" parent="MarginContainer/VBoxContainer/Tabs"]
+layout_mode = 2
+
+[node name="GridContainer" type="GridContainer" parent="MarginContainer/VBoxContainer/Tabs/General"]
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 3
+columns = 2
+
+[node name="TutorialCheckBox" type="CheckBox" parent="MarginContainer/VBoxContainer/Tabs/General/GridContainer"]
+layout_mode = 2
+text = "Show tutorial"
+
+[node name="Buttons" type="HBoxContainer" parent="MarginContainer/VBoxContainer"]
+layout_mode = 2
+alignment = 2
+
+[node name="Discard" type="Button" parent="MarginContainer/VBoxContainer/Buttons"]
+layout_mode = 2
+text = "DISCARD"
+
+[node name="Save" type="Button" parent="MarginContainer/VBoxContainer/Buttons"]
+layout_mode = 2
+text = "SAVE"
+
+[connection signal="pressed" from="MarginContainer/VBoxContainer/Tabs/General/GridContainer/TutorialCheckBox" to="." method="update_discard_button"]
+[connection signal="pressed" from="MarginContainer/VBoxContainer/Buttons/Discard" to="." method="_on_discard_pressed"]
+[connection signal="pressed" from="MarginContainer/VBoxContainer/Buttons/Save" to="." method="_on_save_pressed"]