extends Node const FULL_SCREEN_MODES: Array[DisplayServer.WindowMode] = [ DisplayServer.WINDOW_MODE_EXCLUSIVE_FULLSCREEN, DisplayServer.WINDOW_MODE_FULLSCREEN, ] var dragged_object: Node2D = null var drop_spot: Node2D = null func is_dragging() -> bool: return dragged_object != null func start_dragging(object: Node2D): assert(object != null) stop_dragging() dragged_object = object func stop_dragging(): if dragged_object != null: if drop_spot != null: drop_spot.drop(dragged_object) dragged_object.position = Vector2.ZERO dragged_object = null func set_drop_spot(spot: Node2D): assert(spot == null || spot.has_method("drop")) drop_spot = spot func toggle_fullscreen(): var current_mode = DisplayServer.window_get_mode() if current_mode in FULL_SCREEN_MODES: DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED) else: DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_FULLSCREEN) func _input(event: InputEvent): if event.is_action_pressed("toggle_fullscreen"): toggle_fullscreen() elif event is InputEventMouseMotion && is_dragging(): dragged_object.global_position = event.global_position