global_input.gd 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. extends Node
  2. const FULL_SCREEN_MODES: Array[DisplayServer.WindowMode] = [
  3. DisplayServer.WINDOW_MODE_EXCLUSIVE_FULLSCREEN,
  4. DisplayServer.WINDOW_MODE_FULLSCREEN,
  5. ]
  6. var dragged_object: Node2D = null
  7. var drop_spot: Node2D = null
  8. var original_z: int = 0
  9. func is_dragging() -> bool:
  10. return dragged_object != null
  11. func start_dragging(object: Node2D):
  12. assert(object != null)
  13. stop_dragging()
  14. dragged_object = object
  15. original_z = dragged_object.z_index
  16. dragged_object.z_index = 1000
  17. func stop_dragging():
  18. if dragged_object != null:
  19. if drop_spot != null:
  20. drop_spot.drop(dragged_object)
  21. dragged_object.position = Vector2.ZERO
  22. dragged_object.z_index = original_z
  23. dragged_object = null
  24. func set_drop_spot(spot: Node2D):
  25. assert(spot == null || spot.has_method("drop"))
  26. drop_spot = spot
  27. func toggle_fullscreen():
  28. var current_mode = DisplayServer.window_get_mode()
  29. if current_mode in FULL_SCREEN_MODES:
  30. DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED)
  31. else:
  32. DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_FULLSCREEN)
  33. func _input(event: InputEvent):
  34. if event.is_action_pressed("toggle_fullscreen"):
  35. toggle_fullscreen()
  36. elif event is InputEventMouseMotion && is_dragging():
  37. dragged_object.global_position = event.global_position