mirror of
https://github.com/godotengine/godot-demo-projects.git
synced 2026-01-06 16:00:08 +01:00
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).
204 lines
8.0 KiB
GDScript
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
|