70 lines
2.4 KiB
GDScript
70 lines
2.4 KiB
GDScript
extends Control
|
|
|
|
var resolutions = [
|
|
Vector2i(640, 360),
|
|
Vector2i(800, 450),
|
|
Vector2i(1152, 648),
|
|
Vector2i(1280, 720),
|
|
Vector2i(1366, 768),
|
|
Vector2i(1600, 900),
|
|
Vector2i(1920, 1080),
|
|
Vector2i(2560, 1440),
|
|
Vector2i(3840, 2160)
|
|
]
|
|
|
|
# Adjust these paths as needed to match your scene
|
|
@onready var resolution_button: OptionButton = $"TabContainer/Screen & Video/VBoxContainer/HBoxContainer/OptionButton"
|
|
@onready var display_mode: OptionButton = $"TabContainer/Screen & Video/VBoxContainer/HBoxContainer2/OptionButton"
|
|
|
|
func _ready():
|
|
# Populate resolution selector
|
|
for res in resolutions:
|
|
resolution_button.add_item("%d x %d" % [res.x, res.y])
|
|
|
|
# Populate display mode selector
|
|
display_mode.clear()
|
|
display_mode.add_item("Windowed")
|
|
display_mode.add_item("Fullscreen")
|
|
display_mode.add_item("Borderless")
|
|
|
|
# Connect signals (editor: also connect in "Node" panel for best reliability)
|
|
resolution_button.connect("item_selected", Callable(self, "_on_resolution_button_item_selected"))
|
|
display_mode.connect("item_selected", Callable(self, "_on_display_mode_selected"))
|
|
|
|
# Set defaults (optional)
|
|
display_mode.select(0)
|
|
resolution_button.select(2)
|
|
resolution_button.disabled = false
|
|
|
|
func _on_display_mode_selected(index):
|
|
var mode_name = display_mode.get_item_text(index)
|
|
match mode_name:
|
|
"Windowed":
|
|
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED)
|
|
resolution_button.disabled = false
|
|
# Reapply current resolution
|
|
_set_screen_size(resolutions[resolution_button.selected])
|
|
"Fullscreen":
|
|
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_FULLSCREEN)
|
|
resolution_button.disabled = true
|
|
"Borderless":
|
|
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_EXCLUSIVE_FULLSCREEN)
|
|
resolution_button.disabled = false
|
|
# Optional: some platforms need actual borderless flag set
|
|
# DisplayServer.window_set_flag(DisplayServer.WINDOW_FLAG_BORDERLESS, true)
|
|
_set_screen_size(resolutions[resolution_button.selected])
|
|
|
|
func _on_resolution_button_item_selected(index):
|
|
# Only acts if mode is not Fullscreen
|
|
if display_mode.get_selected_id() != 1:
|
|
_set_screen_size(resolutions[index])
|
|
|
|
func _set_screen_size(size: Vector2i):
|
|
# Only relevant for windowed/borderless
|
|
if display_mode.get_selected_id() != 1: # 1 is "Fullscreen"
|
|
DisplayServer.window_set_size(size)
|
|
# Optionally center or reposition window if desired
|
|
|
|
func _on_button_pressed() -> void:
|
|
get_tree().change_scene_to_file("res://Game/Menu/main.tscn")
|