Focus.gd 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. class_name Focus
  2. extends Camera2D
  3. # Transition to next slide and focus current slide
  4. signal ended
  5. @export_group("Tween caracteristics", "tween_")
  6. @export var tween_is_parallel: bool = false
  7. @export_group("Move", "move_")
  8. @export var move_duration: float = 1.0
  9. @export var move_trans: Tween.TransitionType = Tween.TRANS_SINE
  10. @export var move_ease: Tween.EaseType = Tween.EASE_IN_OUT
  11. @export_group("Zoom", "zoom_")
  12. @export var zoom_duration: float = 1.0
  13. @export var zoom_trans: Tween.TransitionType = Tween.TRANS_SINE
  14. @export var zoom_closer_ease: Tween.EaseType = Tween.EASE_IN
  15. @export var zoom_wider_ease: Tween.EaseType = Tween.EASE_OUT
  16. var tween: Tween
  17. func focus_on(pos: Vector2, scope: float) -> void:
  18. if tween:
  19. tween.kill()
  20. var target_zoom = Vector2.ONE / scope
  21. var is_wider = target_zoom.x < get_zoom().x
  22. var min_zoom = target_zoom if is_wider else get_zoom()
  23. var zoom_ease = zoom_wider_ease if is_wider else zoom_closer_ease
  24. tween = create_tween().set_parallel(tween_is_parallel)
  25. tween.tween_property(self, "position", pos, move_duration).set_trans(move_trans).set_ease(move_ease)
  26. tween.tween_property(self, "zoom", target_zoom, zoom_duration).set_trans(zoom_trans).set_ease(zoom_ease)
  27. tween.tween_callback(end)
  28. func end():
  29. ended.emit()
  30. func _on_show_new_focus(pos: Vector2, scope: float) -> void:
  31. focus_on(pos, scope)