From 23b303822f2d85ad157c67e1c2174069cfcfc5ff Mon Sep 17 00:00:00 2001 From: Ryan Reed Date: Tue, 1 Apr 2025 20:07:57 -0400 Subject: [PATCH] Replacing Fullscreen with Window Mode --- autoloads/game_settings_manager.gd | 17 +++++------- .../graphics_settings_resource.gd | 5 ++-- scenes/ui/pause_menu/settings_menu.gd | 17 +++++++----- scenes/ui/pause_menu/settings_menu.tscn | 26 +++++++++++++------ 4 files changed, 38 insertions(+), 27 deletions(-) diff --git a/autoloads/game_settings_manager.gd b/autoloads/game_settings_manager.gd index 01e294b..ca951b3 100644 --- a/autoloads/game_settings_manager.gd +++ b/autoloads/game_settings_manager.gd @@ -12,10 +12,10 @@ signal game_options_waila_changed(waila_enabled: bool) #region Graphics Settings Signals signal apply_graphics_settings +signal graphics_fov_changed(fov: int) signal graphics_resolution_changed(resolution: Vector2i, id: int) -signal graphics_fullscreen_changed(fullscreen_enabled: bool) signal graphics_vsync_changed(vsync_enabled: bool) -signal graphics_fov_changed(fov: int) +signal graphics_window_mode_changed(mode_id: int) #endregion signal load_game_settings @@ -43,8 +43,8 @@ func _init() -> void: game_options_waila_changed.connect(_on_game_options_waila_changed) graphics_fov_changed.connect(_on_graphics_fov_changed) - graphics_fullscreen_changed.connect(_on_graphics_fullscreen_changed) graphics_resolution_changed.connect(_on_graphics_resolution_changed) + graphics_window_mode_changed.connect(_on_graphics_window_mode_changed) graphics_vsync_changed.connect(_on_graphics_vsync_changed) apply_graphics_settings.connect(_on_apply_graphics_settings) @@ -80,10 +80,7 @@ func _on_game_options_waila_changed(waila_enabled: bool) -> void: #region Graphics Settings func _on_apply_graphics_settings() -> void: - if settings.graphics.fullscreen: - DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_FULLSCREEN) - else: - DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED) + DisplayServer.window_set_mode(settings.graphics.window_mode) get_window().size = settings.graphics.resolution @@ -97,15 +94,15 @@ func _on_apply_graphics_settings() -> void: func _on_graphics_fov_changed(fov: int) -> void: settings.graphics.fov = fov -func _on_graphics_fullscreen_changed(fullscreen_enabled: bool) -> void: - settings.graphics.fullscreen = fullscreen_enabled - func _on_graphics_resolution_changed(resolution: Vector2i, id: int) -> void: settings.graphics.resolution = resolution settings.graphics.resolution_id = id func _on_graphics_vsync_changed(vsync_enabled: bool) -> void: settings.graphics.vsync = vsync_enabled + +func _on_graphics_window_mode_changed(id: int) -> void: + settings.graphics.window_mode = id as DisplayServer.WindowMode #endregion diff --git a/resources/game_settings/graphics_settings_resource.gd b/resources/game_settings/graphics_settings_resource.gd index 3152aac..05526c1 100644 --- a/resources/game_settings/graphics_settings_resource.gd +++ b/resources/game_settings/graphics_settings_resource.gd @@ -3,8 +3,9 @@ class_name GraphicsSettingsResource extends Resource + +@export var fov: int = 75 @export var resolution: Vector2i = Vector2i(1280, 720) ## Width, Height @export var resolution_id: int = 0 ## The ID of the item in the OptionsButton list element -@export var fullscreen: bool = false @export var vsync: bool = false -@export var fov: int = 75 +@export var window_mode: DisplayServer.WindowMode = DisplayServer.WINDOW_MODE_WINDOWED diff --git a/scenes/ui/pause_menu/settings_menu.gd b/scenes/ui/pause_menu/settings_menu.gd index d275a63..dbbcf41 100644 --- a/scenes/ui/pause_menu/settings_menu.gd +++ b/scenes/ui/pause_menu/settings_menu.gd @@ -11,11 +11,11 @@ extends BaseMenu @export var waila_input: CheckButton @export_group("Graphics Settings Nodes") -@export var resolution_input: OptionButton -@export var fullscreen_input: CheckBox -@export var vsync_input: CheckBox @export var fov_slider: HSlider @export var fov_value_label: Label +@export var resolution_input: OptionButton +@export var vsync_input: CheckBox +@export var window_mode_input: OptionButton func init() -> void: @@ -38,9 +38,11 @@ func apply_default_values() -> void: #region Graphics Settings # Changing the FOV value should trigger the value_changed signal which should update the camera and label automatically fov_slider.value = GameSettingsManager.settings.graphics.fov - fullscreen_input.set_pressed_no_signal(GameSettingsManager.settings.graphics.fullscreen) vsync_input.set_pressed_no_signal(GameSettingsManager.settings.graphics.vsync) + var current_mode_index: int = window_mode_input.get_item_index(GameSettingsManager.settings.graphics.window_mode) + window_mode_input.select(current_mode_index) + var current_resolution_index: int = resolution_input.get_item_index(GameSettingsManager.settings.graphics.resolution_id) resolution_input.select(current_resolution_index) #endregion @@ -79,10 +81,11 @@ func _on_fov_slider_changed(value: float) -> void: func _on_graphics_apply_button_pressed() -> void: var values: Array = resolution_input.text.split_floats("x") - var id: int = resolution_input.get_selected_id() + var resolution_id: int = resolution_input.get_selected_id() + var window_mode_id: int = window_mode_input.get_selected_id() - GameSettingsManager.graphics_resolution_changed.emit(Vector2i(values[0], values[1]), id) - GameSettingsManager.graphics_fullscreen_changed.emit(fullscreen_input.button_pressed) + GameSettingsManager.graphics_resolution_changed.emit(Vector2i(values[0], values[1]), resolution_id) + GameSettingsManager.graphics_window_mode_changed.emit(window_mode_id) GameSettingsManager.graphics_vsync_changed.emit(vsync_input.button_pressed) GameSettingsManager.apply_graphics_settings.emit() #endregion diff --git a/scenes/ui/pause_menu/settings_menu.tscn b/scenes/ui/pause_menu/settings_menu.tscn index e962f0a..5b85866 100644 --- a/scenes/ui/pause_menu/settings_menu.tscn +++ b/scenes/ui/pause_menu/settings_menu.tscn @@ -14,7 +14,8 @@ corner_radius_top_right = 2 corner_radius_bottom_right = 2 corner_radius_bottom_left = 2 -[node name="SettingsMenu" node_paths=PackedStringArray("autosaves_input", "block_highlight_input", "held_block_ui_input", "quick_slots_ui_input", "screenshot_icon_input", "waila_input", "resolution_input", "fullscreen_input", "vsync_input", "fov_slider", "fov_value_label") instance=ExtResource("1_oec81")] +[node name="SettingsMenu" node_paths=PackedStringArray("autosaves_input", "block_highlight_input", "held_block_ui_input", "quick_slots_ui_input", "screenshot_icon_input", "waila_input", "fov_slider", "fov_value_label", "resolution_input", "vsync_input", "window_mode_input") instance=ExtResource("1_oec81")] +visible = false script = ExtResource("1_govsn") autosaves_input = NodePath("MainContent/MenuContainer/TabContainer/Game/Autosaves/CheckButton") block_highlight_input = NodePath("MainContent/MenuContainer/TabContainer/Game/BlockHighlight/CheckButton") @@ -22,11 +23,11 @@ held_block_ui_input = NodePath("MainContent/MenuContainer/TabContainer/Game/Held quick_slots_ui_input = NodePath("MainContent/MenuContainer/TabContainer/Game/QuickslotsUI/CheckButton") screenshot_icon_input = NodePath("MainContent/MenuContainer/TabContainer/Game/ScreenshotIcon/CheckButton") waila_input = NodePath("MainContent/MenuContainer/TabContainer/Game/Waila/CheckButton") -resolution_input = NodePath("MainContent/MenuContainer/TabContainer/Graphics/Resolution/OptionButton") -fullscreen_input = NodePath("MainContent/MenuContainer/TabContainer/Graphics/Fullscreen/CheckBox") -vsync_input = NodePath("MainContent/MenuContainer/TabContainer/Graphics/VSync/CheckBox") fov_slider = NodePath("MainContent/MenuContainer/TabContainer/Graphics/FOV/HSlider") fov_value_label = NodePath("MainContent/MenuContainer/TabContainer/Graphics/FOV/Value") +resolution_input = NodePath("MainContent/MenuContainer/TabContainer/Graphics/Resolution/OptionButton") +vsync_input = NodePath("MainContent/MenuContainer/TabContainer/Graphics/VSync/CheckBox") +window_mode_input = NodePath("MainContent/MenuContainer/TabContainer/Graphics/WindowMode/OptionButton") [node name="Title" parent="MainContent/MenuContainer" index="0"] text = "Settings" @@ -150,16 +151,25 @@ popup/item_4/id = 3 popup/item_5/text = "3840 x 2160" popup/item_5/id = 5 -[node name="Fullscreen" type="HBoxContainer" parent="MainContent/MenuContainer/TabContainer/Graphics" index="1"] +[node name="WindowMode" type="HBoxContainer" parent="MainContent/MenuContainer/TabContainer/Graphics" index="1"] layout_mode = 2 -[node name="Label" type="Label" parent="MainContent/MenuContainer/TabContainer/Graphics/Fullscreen" index="0"] +[node name="Label" type="Label" parent="MainContent/MenuContainer/TabContainer/Graphics/WindowMode" index="0"] layout_mode = 2 size_flags_horizontal = 3 -text = "Fullscreen" +text = "Display Mode" -[node name="CheckBox" type="CheckBox" parent="MainContent/MenuContainer/TabContainer/Graphics/Fullscreen" index="1"] +[node name="OptionButton" type="OptionButton" parent="MainContent/MenuContainer/TabContainer/Graphics/WindowMode" index="1"] layout_mode = 2 +item_count = 4 +popup/item_0/text = "Window" +popup/item_0/id = 0 +popup/item_1/text = "Maximized" +popup/item_1/id = 2 +popup/item_2/text = "Fullscreen" +popup/item_2/id = 3 +popup/item_3/text = "Exclusive Fullscreen" +popup/item_3/id = 4 [node name="VSync" type="HBoxContainer" parent="MainContent/MenuContainer/TabContainer/Graphics" index="2"] layout_mode = 2