Files
godot-demo-projects/misc/window_management/control.gd
Hugo Locurcio bac1e69164 Use static typing in all demos (#1063)
This leads to code that is easier to understand and runs
faster thanks to GDScript's typed instructions.

The untyped declaration warning is now enabled on all projects
where type hints were added. All projects currently run without
any untyped declration warnings.

Dodge the Creeps and Squash the Creeps demos intentionally don't
use type hints to match the documentation, where type hints haven't
been adopted yet (given its beginner focus).
2024-06-01 12:12:18 +02:00

204 lines
8.0 KiB
GDScript

extends Control
var mouse_position := Vector2()
@onready var observer: CharacterBody3D = $"../Observer"
func _ready() -> void:
if not check_wm_api():
set_physics_process(false)
set_process_input(false)
# See godotengine/godot#73563, fetching the refresh rate on every frame may be slow on some platforms.
$Labels/Label_Screen0_RefreshRate.text = "Screen0 Refresh Rate: %.2f Hz" % DisplayServer.screen_get_refresh_rate()
if DisplayServer.get_screen_count() > 1:
$Labels/Label_Screen1_RefreshRate.text = "Screen1 Refresh Rate: %.2f Hz" % DisplayServer.screen_get_refresh_rate(1)
func _physics_process(_delta: float) -> void:
var modetext := "Mode: "
if DisplayServer.window_get_mode() == DisplayServer.WINDOW_MODE_FULLSCREEN:
modetext += "Fullscreen\n"
else:
modetext += "Windowed\n"
if DisplayServer.window_get_flag(DisplayServer.WINDOW_FLAG_RESIZE_DISABLED):
modetext += "Fixed Size\n"
if DisplayServer.window_get_mode() == DisplayServer.WINDOW_MODE_MINIMIZED:
modetext += "Minimized\n"
if DisplayServer.window_get_mode() == DisplayServer.WINDOW_MODE_MAXIMIZED:
modetext += "Maximized\n"
if Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED:
modetext += "Mouse Captured\n"
$Buttons/Label_MouseModeCaptured_KeyInfo.show()
else:
$Buttons/Label_MouseModeCaptured_KeyInfo.hide()
$Labels/Label_Mode.text = modetext
$Labels/Label_Position.text = str("Position: ", DisplayServer.window_get_position())
$Labels/Label_Size.text = str("Size: ", DisplayServer.window_get_size())
$Labels/Label_MousePosition.text = str("Mouse Position: ", mouse_position)
$Labels/Label_Screen_Count.text = str("Screen_Count: ", DisplayServer.get_screen_count())
$Labels/Label_Screen_Current.text = str("Screen: ", DisplayServer.window_get_current_screen())
$Labels/Label_Screen0_Resolution.text = str("Screen0 Resolution:\n", DisplayServer.screen_get_size())
$Labels/Label_Screen0_Position.text = str("Screen0 Position:\n", DisplayServer.screen_get_position())
$Labels/Label_Screen0_DPI.text = str("Screen0 DPI: ", DisplayServer.screen_get_dpi())
if DisplayServer.get_screen_count() > 1:
$Buttons/Button_Screen0.show()
$Buttons/Button_Screen1.show()
$Labels/Label_Screen1_Resolution.show()
$Labels/Label_Screen1_Position.show()
$Labels/Label_Screen1_DPI.show()
$Labels/Label_Screen1_Resolution.text = str("Screen1 Resolution:\n", DisplayServer.screen_get_size(1))
$Labels/Label_Screen1_Position.text = str("Screen1 Position:\n", DisplayServer.screen_get_position(1))
$Labels/Label_Screen1_DPI.text = str("Screen1 DPI: ", DisplayServer.screen_get_dpi(1))
else:
$Buttons/Button_Screen0.hide()
$Buttons/Button_Screen1.hide()
$Labels/Label_Screen1_Resolution.hide()
$Labels/Label_Screen1_Position.hide()
$Labels/Label_Screen1_DPI.hide()
$Labels/Label_Screen1_RefreshRate.hide()
$Buttons/Button_Fullscreen.set_pressed(DisplayServer.window_get_mode() == DisplayServer.WINDOW_MODE_FULLSCREEN)
$Buttons/Button_FixedSize.set_pressed(DisplayServer.window_get_flag(DisplayServer.WINDOW_FLAG_RESIZE_DISABLED))
$Buttons/Button_Minimized.set_pressed(DisplayServer.window_get_mode() == DisplayServer.WINDOW_MODE_MINIMIZED)
$Buttons/Button_Maximized.set_pressed(DisplayServer.window_get_mode() == DisplayServer.WINDOW_MODE_MAXIMIZED)
$Buttons/Button_MouseModeVisible.set_pressed(Input.get_mouse_mode() == Input.MOUSE_MODE_VISIBLE)
$Buttons/Button_MouseModeHidden.set_pressed(Input.get_mouse_mode() == Input.MOUSE_MODE_HIDDEN)
$Buttons/Button_MouseModeCaptured.set_pressed(Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED)
func _input(event: InputEvent) -> void:
if event is InputEventMouseMotion:
mouse_position = event.position
if event is InputEventKey:
if Input.is_action_pressed(&"mouse_mode_visible"):
observer.state = observer.State.MENU
_on_button_mouse_mode_visible_pressed()
if Input.is_action_pressed(&"mouse_mode_hidden"):
observer.state = observer.State.MENU
_on_button_mouse_mode_hidden_pressed()
if Input.is_action_pressed(&"mouse_mode_captured"):
_on_button_mouse_mode_captured_pressed()
if Input.is_action_pressed(&"mouse_mode_confined"):
observer.state = observer.State.MENU
_on_button_mouse_mode_confined_pressed()
if Input.is_action_pressed(&"mouse_mode_confined_hidden"):
observer.state = observer.State.MENU
_on_button_mouse_mode_confined_hidden_pressed()
func check_wm_api() -> bool:
var s := ""
if not DisplayServer.has_method("get_screen_count"):
s += " - get_screen_count()\n"
if not DisplayServer.has_method("window_get_current_screen"):
s += " - window_get_current_screen()\n"
if not DisplayServer.has_method("window_set_current_screen"):
s += " - window_set_current_screen()\n"
if not DisplayServer.has_method("screen_get_position"):
s += " - screen_get_position()\n"
if not DisplayServer.has_method("window_get_size"):
s += " - window_get_size()\n"
if not DisplayServer.has_method("window_get_position"):
s += " - window_get_position()\n"
if not DisplayServer.has_method("window_set_position"):
s += " - window_set_position()\n"
if not DisplayServer.has_method("window_get_size"):
s += " - get_window_size()\n"
if not DisplayServer.has_method("window_set_size"):
s += " - window_set_size()\n"
# These function are no longer and this is set through flags!
# if not DisplayServer.has_method("set_window_fullscreen"):
# s += " - set_window_fullscreen()\n"
# if not DisplayServer.window_get_flag() OS.has_method("is_window_fullscreen"):
# s += " - is_window_fullscreen()\n"
# if not OS.has_method("set_window_resizable"):
# s += " - set_window_resizable()\n"
# if not OS.has_method("is_window_resizable"):
# s += " - is_window_resizable()\n"
# if not OS.has_method("set_window_minimized"):
# s += " - set_window_minimized()\n"
# if not OS.has_method("is_window_minimized"):
# s += " - is_window_minimized()\n"
# if not OS.has_method("set_window_maximized"):
# s += " - set_window_maximized()\n"
# if not OS.has_method("is_window_maximized"):
# s += " - is_window_maximized()\n"
if s.length() == 0:
return true
else:
$"ImplementationDialog/Text".text += s
$ImplementationDialog.show()
return false
func _on_button_move_to_pressed() -> void:
DisplayServer.window_set_position(Vector2(100, 100))
func _on_button_resize_pressed() -> void:
DisplayServer.window_set_size(Vector2(1280, 720))
func _on_button_screen_0_pressed() -> void:
DisplayServer.window_set_current_screen(0)
func _on_button_screen_1_pressed() -> void:
DisplayServer.window_set_current_screen(1)
func _on_button_fullscreen_pressed() -> void:
if DisplayServer.window_get_mode() == DisplayServer.WINDOW_MODE_FULLSCREEN:
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED)
else:
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_FULLSCREEN)
func _on_button_fixed_size_pressed() -> void:
if DisplayServer.window_get_flag(DisplayServer.WINDOW_FLAG_RESIZE_DISABLED):
DisplayServer.window_set_flag(DisplayServer.WINDOW_FLAG_RESIZE_DISABLED, false)
else:
DisplayServer.window_set_flag(DisplayServer.WINDOW_FLAG_RESIZE_DISABLED, true)
func _on_button_minimized_pressed() -> void:
if DisplayServer.window_get_mode() == DisplayServer.WINDOW_MODE_MINIMIZED:
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED)
else:
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_MINIMIZED)
func _on_button_maximized_pressed() -> void:
if DisplayServer.window_get_mode() == DisplayServer.WINDOW_MODE_MAXIMIZED:
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_MINIMIZED)
else:
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_MAXIMIZED)
func _on_button_mouse_mode_visible_pressed() -> void:
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
func _on_button_mouse_mode_hidden_pressed() -> void:
Input.mouse_mode = Input.MOUSE_MODE_HIDDEN
func _on_button_mouse_mode_captured_pressed() -> void:
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
observer.state = observer.State.GRAB
func _on_button_mouse_mode_confined_pressed() -> void:
Input.mouse_mode = Input.MOUSE_MODE_CONFINED
func _on_button_mouse_mode_confined_hidden_pressed() -> void:
Input.mouse_mode = Input.MOUSE_MODE_CONFINED_HIDDEN