Add fullscreen button in settings

This commit is contained in:
antimundo 2024-02-27 17:27:33 +01:00
parent 5400c49df8
commit 135b35cfac
No known key found for this signature in database
GPG key ID: F83F260F8F88F0BC
5 changed files with 76 additions and 7 deletions

View file

@ -19,6 +19,7 @@ config/icon="res://icon.svg"
Global="*res://scenes/autoload/global.gd"
DataManager="*res://scenes/autoload/data_manager.gd"
DisplayManager="*res://scenes/autoload/display_manager.gd"
[display]

View file

@ -0,0 +1,43 @@
extends Node
signal window_mode_updated(window_mode: DisplayServer.WindowMode)
func _ready():
var category = DataManager.categories.SETTINGS
if DataManager.get_data(category, "window_mode"):
var selected = DataManager.get_data(category, "window_mode")
set_window_mode(get_window_mode_from_string(selected))
func _input(event):
if event.is_action_pressed("fullscreen"):
if DisplayServer.window_get_mode() == DisplayServer.WINDOW_MODE_EXCLUSIVE_FULLSCREEN:
set_window_mode(DisplayServer.WINDOW_MODE_MAXIMIZED)
else:
set_window_mode(DisplayServer.WINDOW_MODE_EXCLUSIVE_FULLSCREEN)
func set_window_mode_from_string(window_mode: String):
set_window_mode(get_window_mode_from_string(window_mode))
func get_window_mode_from_string(window_mode: String):
match window_mode:
"fullscreen":
return DisplayServer.WINDOW_MODE_EXCLUSIVE_FULLSCREEN
"windowed":
return DisplayServer.WINDOW_MODE_MAXIMIZED
return null
func get_string_from_window_mode(window_mode: DisplayServer.WindowMode):
match window_mode:
DisplayServer.WINDOW_MODE_EXCLUSIVE_FULLSCREEN:
return "fullscreen"
DisplayServer.WINDOW_MODE_MAXIMIZED:
return "windowed"
return null
func set_window_mode(window_mode: DisplayServer.WindowMode):
window_mode_updated.emit(window_mode)
DisplayServer.window_set_mode(window_mode)
if window_mode == DisplayServer.WINDOW_MODE_EXCLUSIVE_FULLSCREEN:
DataManager.save_data("window_mode", "fullscreen", DataManager.categories.SETTINGS)
elif window_mode == DisplayServer.WINDOW_MODE_MAXIMIZED:
DataManager.save_data("window_mode", "windowed", DataManager.categories.SETTINGS)

View file

@ -68,10 +68,3 @@ func string_to_color(string_vector: String) -> Color:
# Create the Vector3D object
return Color(r, g, b, a)
func _input(event):
if event.is_action_pressed("fullscreen"):
if DisplayServer.window_get_mode() == DisplayServer.WINDOW_MODE_EXCLUSIVE_FULLSCREEN:
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_MAXIMIZED)
else:
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_EXCLUSIVE_FULLSCREEN)

View file

@ -333,6 +333,19 @@ min_value = 45.0
max_value = 130.0
value = 80.0
[node name="WindowModeLabel" type="Label" parent="HBoxContainer/Control2/Video/MarginContainer/VBoxContainer"]
layout_mode = 2
text = "Window mode"
[node name="WindowModeOptions" type="OptionButton" parent="HBoxContainer/Control2/Video/MarginContainer/VBoxContainer"]
layout_mode = 2
item_count = 2
selected = 0
popup/item_0/text = "fullscreen"
popup/item_0/id = 1
popup/item_1/text = "windowed"
popup/item_1/id = 0
[node name="Controls" type="Control" parent="HBoxContainer/Control2"]
visible = false
layout_mode = 1
@ -448,6 +461,7 @@ layout_mode = 2
[connection signal="file_selected" from="HBoxContainer/Control2/Crosshair/MarginContainer/VBoxContainer/ImportFileDialog" to="HBoxContainer/Control2/Crosshair" method="_on_import_file_dialog_file_selected"]
[connection signal="value_changed" from="HBoxContainer/Control2/Video/MarginContainer/VBoxContainer/ResolutionSlider" to="HBoxContainer/Control2/Video" method="_on_resolution_slider_value_changed"]
[connection signal="value_changed" from="HBoxContainer/Control2/Video/MarginContainer/VBoxContainer/FovSlider" to="HBoxContainer/Control2/Video" method="_on_fov_slider_value_changed"]
[connection signal="item_selected" from="HBoxContainer/Control2/Video/MarginContainer/VBoxContainer/WindowModeOptions" to="HBoxContainer/Control2/Video" method="_on_window_mode_options_item_selected"]
[connection signal="item_selected" from="HBoxContainer/Control2/Controls/MarginContainer/VBoxContainer/HBoxContainer2/Game" to="HBoxContainer/Control2/Controls" method="_on_game_item_selected"]
[connection signal="text_changed" from="HBoxContainer/Control2/Controls/MarginContainer/VBoxContainer/HBoxContainer2/Sensitivity" to="HBoxContainer/Control2/Controls" method="_on_sensitivity_text_changed"]
[connection signal="value_changed" from="HBoxContainer/Control2/Audio/MarginContainer/VBoxContainer/VolumeSlider" to="HBoxContainer/Control2/Audio" method="_on_volume_slider_value_changed"]

View file

@ -4,8 +4,10 @@ extends Control
@onready var resolution_slider = $MarginContainer/VBoxContainer/ResolutionSlider
@onready var fov_label = $MarginContainer/VBoxContainer/FovLabel
@onready var fov_slider = $MarginContainer/VBoxContainer/FovSlider
@onready var window_mode_options = $MarginContainer/VBoxContainer/WindowModeOptions
func _ready():
DisplayManager.window_mode_updated.connect(_on_display_manager_window_mode_updated)
update_fov_label()
update_resolution_label()
get_viewport().size_changed.connect(self.update_resolution_label)
@ -15,6 +17,11 @@ func _ready():
resolution_slider.value = DataManager.get_data(category, "resolution")
if DataManager.get_data(category, "camera_fov"):
fov_slider.value = DataManager.get_data(category, "camera_fov")
if DataManager.get_data(category, "window_mode"):
var selected = DataManager.get_data(category, "window_mode")
for i in range(window_mode_options.item_count):
if selected == window_mode_options.get_item_text(i):
window_mode_options.select(i)
func _on_resolution_slider_value_changed(value: float) -> void:
get_viewport().scaling_3d_scale = value
@ -24,6 +31,17 @@ func _on_resolution_slider_value_changed(value: float) -> void:
func _on_fov_slider_value_changed(value):
update_fov_label()
DataManager.save_data("camera_fov", value, DataManager.categories.SETTINGS)
func _on_window_mode_options_item_selected(index):
var option = window_mode_options.get_item_text(index)
DisplayManager.set_window_mode_from_string(option)
DataManager.save_data("window_mode", option, DataManager.categories.SETTINGS)
func _on_display_manager_window_mode_updated(window_mode):
var selected = DisplayManager.get_string_from_window_mode(window_mode)
for i in range(window_mode_options.item_count):
if selected == window_mode_options.get_item_text(i):
window_mode_options.select(i)
func update_resolution_label() -> void:
var viewport_render_size = get_viewport().size * get_viewport().scaling_3d_scale