Files
project-thought-experiment/scripts/autoloads/window_manager.gd
2024-01-26 18:28:18 +01:00

53 lines
1.5 KiB
GDScript

extends Node
var close_request_window: CanvasLayer
var pause_menu: PauseMenu
var fullscreen: bool
func _ready() -> void:
process_mode = Node.PROCESS_MODE_ALWAYS
close_request_window = preload("res://scenes/gui/menus/close_game_confirmation.tscn").instantiate()
add_child(close_request_window)
pause_menu = preload("res://scenes/gui/menus/pause_menu.tscn").instantiate()
add_child(pause_menu)
fullscreen = DisplayServer.window_get_mode() == 4
func _process(_delta: float) -> void:
if Input.is_action_just_released("fullscreen"):
fullscreen = !fullscreen
toggle_fullscreen()
func _notification(what: int) -> void:
if what == NOTIFICATION_WM_CLOSE_REQUEST:
if get_tree().current_scene is MainMenu :
get_tree().quit()
else:
popup_close_dialog()
if what == NOTIFICATION_APPLICATION_FOCUS_OUT:
if !get_tree().current_scene is MainMenu :
show_pause_menu()
func popup_close_dialog() -> void:
uncapture_mouse()
close_request_window.show()
func show_pause_menu() -> void:
uncapture_mouse()
get_tree().paused = true
pause_menu.show()
func uncapture_mouse() -> void:
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
func _input(event: InputEvent) -> void:
if event.is_action_pressed("pause") && !get_tree().current_scene is MainMenu:
show_pause_menu()
func toggle_fullscreen() -> void:
if fullscreen:
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_EXCLUSIVE_FULLSCREEN)
else:
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED)