From 9814dd88a0575cbcc60c8093c3037005272e99b4 Mon Sep 17 00:00:00 2001 From: Ryan Reed Date: Sat, 22 Mar 2025 21:14:03 -0400 Subject: [PATCH] Graphics settings can now be applied --- autoloads/globals.gd | 35 +++++++++++++++++++++++++++++- scenes/player/ray_cast_look.gd | 2 -- scenes/ui/menus/settings_menu.gd | 24 ++++++++++++++++++++ scenes/ui/menus/settings_menu.tscn | 26 +++++++++++++++------- 4 files changed, 76 insertions(+), 11 deletions(-) diff --git a/autoloads/globals.gd b/autoloads/globals.gd index d3c374a..3b540a1 100644 --- a/autoloads/globals.gd +++ b/autoloads/globals.gd @@ -1,6 +1,9 @@ extends Node +signal graphics_settings_changed(resolution: Vector2, fullscreen: bool, vsync: bool) + + const BLOCK_PREFAB: PackedScene = preload("res://scenes/blocks/block.tscn") const DROPPED_BLOCK_PREFAB: PackedScene = preload("res://scenes/blocks/dropped_block.tscn") @@ -8,4 +11,34 @@ const DROPPED_BLOCK_PREFAB: PackedScene = preload("res://scenes/blocks/dropped_b var enable_waila: bool = true ## Enable `What Am I Looking At` UI var enable_block_highlight: bool = true -var is_options_menu_active: bool = false +var graphics_settings: Dictionary[String, Variant] = { + "resolution": Vector2i.ZERO, + "fullscreen": false, + "vsync": false, +} + + +func _init() -> void: + graphics_settings_changed.connect(_on_graphics_settings_changed) + + +func apply_graphics_settings() -> void: + if graphics_settings.fullscreen: + DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_FULLSCREEN) + else: + DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED) + + get_window().size = graphics_settings.resolution + + if graphics_settings.vsync: + DisplayServer.window_set_vsync_mode(DisplayServer.VSYNC_ENABLED) + else: + DisplayServer.window_set_vsync_mode(DisplayServer.VSYNC_DISABLED) + + +func _on_graphics_settings_changed(resolution: Vector2i, fullscreen: bool, vsync: bool) -> void: + graphics_settings.resolution = resolution + graphics_settings.fullscreen = fullscreen + graphics_settings.vsync = vsync + + apply_graphics_settings() diff --git a/scenes/player/ray_cast_look.gd b/scenes/player/ray_cast_look.gd index e90bb34..515c8a1 100644 --- a/scenes/player/ray_cast_look.gd +++ b/scenes/player/ray_cast_look.gd @@ -2,8 +2,6 @@ extends RayCast3D func _process(_delta: float) -> void: - if Globals.is_options_menu_active: return - if is_colliding(): var collider: Object = get_collider() diff --git a/scenes/ui/menus/settings_menu.gd b/scenes/ui/menus/settings_menu.gd index 697b76e..50c5dfa 100644 --- a/scenes/ui/menus/settings_menu.gd +++ b/scenes/ui/menus/settings_menu.gd @@ -2,11 +2,35 @@ class_name SettingsMenu extends Panel +@export_group("Graphics Settings Nodes") +@export var resolution_input: OptionButton +@export var fullscreen_input: CheckBox +@export var vsync_input: CheckBox + + +#region Game Settings func _on_block_highlighting_toggled(toggled_on: bool) -> void: Globals.enable_block_highlight = toggled_on func _on_enable_waila_toggled(toggled_on: bool) -> void: Globals.enable_waila = toggled_on +#endregion + +#region Graphics Settings +func _on_graphics_apply_button_pressed() -> void: + var values: Array = resolution_input.text.split_floats("x") + Globals.graphics_settings_changed.emit( + Vector2(int(values[0]), int(values[1])), + fullscreen_input.button_pressed, + vsync_input.button_pressed + ) +#endregion + +#region Audio Settings +#endregion + +#region Input Settings +#endregion func _on_close_button_pressed() -> void: diff --git a/scenes/ui/menus/settings_menu.tscn b/scenes/ui/menus/settings_menu.tscn index 6049544..aeaf7fa 100644 --- a/scenes/ui/menus/settings_menu.tscn +++ b/scenes/ui/menus/settings_menu.tscn @@ -14,7 +14,7 @@ corner_radius_top_right = 2 corner_radius_bottom_right = 2 corner_radius_bottom_left = 2 -[node name="SettingsMenu" type="Panel"] +[node name="SettingsMenu" type="Panel" node_paths=PackedStringArray("resolution_input", "fullscreen_input", "vsync_input")] process_mode = 3 anchors_preset = 15 anchor_right = 1.0 @@ -22,6 +22,9 @@ anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 script = ExtResource("1_qwcqe") +resolution_input = NodePath("Background/MarginContainer/VBoxContainer/TabContainer/Graphics/Resolution/OptionButton") +fullscreen_input = NodePath("Background/MarginContainer/VBoxContainer/TabContainer/Graphics/Fullscreen/CheckBox") +vsync_input = NodePath("Background/MarginContainer/VBoxContainer/TabContainer/Graphics/VSync/CheckBox") metadata/_edit_vertical_guides_ = [349.0] [node name="Background" type="ColorRect" parent="."] @@ -62,11 +65,10 @@ horizontal_alignment = 1 layout_mode = 2 theme_override_constants/side_margin = 0 theme_override_styles/panel = SubResource("StyleBoxFlat_80b2v") -current_tab = 1 +current_tab = 0 clip_tabs = false [node name="Game" type="VBoxContainer" parent="Background/MarginContainer/VBoxContainer/TabContainer"] -visible = false layout_mode = 2 metadata/_tab_index = 0 @@ -95,6 +97,7 @@ layout_mode = 2 button_pressed = true [node name="Graphics" type="VBoxContainer" parent="Background/MarginContainer/VBoxContainer/TabContainer"] +visible = false layout_mode = 2 metadata/_tab_index = 1 @@ -109,13 +112,19 @@ text = "Resolution" [node name="OptionButton" type="OptionButton" parent="Background/MarginContainer/VBoxContainer/TabContainer/Graphics/Resolution"] layout_mode = 2 selected = 0 -item_count = 3 +item_count = 6 popup/item_0/text = "1280x720" popup/item_0/id = 0 -popup/item_1/text = "1920x1080" -popup/item_1/id = 1 -popup/item_2/text = "2560x1440" -popup/item_2/id = 2 +popup/item_1/text = "1280x800" +popup/item_1/id = 4 +popup/item_2/text = "1920x1080" +popup/item_2/id = 1 +popup/item_3/text = "2560x1440" +popup/item_3/id = 2 +popup/item_4/text = "3440x1440" +popup/item_4/id = 3 +popup/item_5/text = "3840 x 2160" +popup/item_5/id = 5 [node name="Fullscreen" type="HBoxContainer" parent="Background/MarginContainer/VBoxContainer/TabContainer/Graphics"] layout_mode = 2 @@ -182,4 +191,5 @@ text = "Close Settings" [connection signal="toggled" from="Background/MarginContainer/VBoxContainer/TabContainer/Game/BlockHighlight/CheckButton" to="." method="_on_block_highlighting_toggled"] [connection signal="toggled" from="Background/MarginContainer/VBoxContainer/TabContainer/Game/Waila/CheckButton" to="." method="_on_enable_waila_toggled"] +[connection signal="pressed" from="Background/MarginContainer/VBoxContainer/TabContainer/Graphics/CenterContainer/ApplyButton" to="." method="_on_graphics_apply_button_pressed"] [connection signal="pressed" from="Background/BottomRow/CloseButton" to="." method="_on_close_button_pressed"]