Slide.gd 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. class_name Slide
  2. extends Node2D
  3. # Display slide content
  4. signal finished
  5. @export var always_visible: bool = false
  6. @export_group("Processing management", "processing_")
  7. @export var processing_start_when_enabled := true ## Start processing when focused
  8. @export var processing_keep_when_disabled := false ## Enable to process at startup and keep processing after transitioning to another slide
  9. var action_finish := "ui_accept"
  10. var center_offset: Vector2
  11. func _ready() -> void:
  12. center_offset = _compute_center_offset()
  13. disable()
  14. func disable() -> void:
  15. set_process_unhandled_key_input(false)
  16. if processing_keep_when_disabled:
  17. return
  18. set_process(false)
  19. func enable() -> void:
  20. set_visible(true)
  21. set_process_unhandled_key_input(true)
  22. if processing_start_when_enabled:
  23. set_process(true)
  24. func get_center() -> Vector2:
  25. return get_position() + center_offset
  26. func gently_hide() -> void:
  27. if always_visible:
  28. return
  29. set_visible(false)
  30. func set_action_finish(action_name: String) -> void:
  31. action_finish = action_name
  32. func _unhandled_key_input(event: InputEvent) -> void:
  33. if event.is_action(action_finish) and event.is_pressed():
  34. finished.emit()
  35. get_viewport().set_input_as_handled()
  36. func _compute_center_offset() -> Vector2:
  37. var w: float = ProjectSettings.get("display/window/size/viewport_width")
  38. var h: float = ProjectSettings.get("display/window/size/viewport_height")
  39. return Vector2(w * scale.x / 2, h * scale.y / 2)