Focus.gd 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  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("Step backward", "back_")
  8. @export var back_zoom_multiplier: float = 0.8
  9. @export var back_duration: float = 1.0
  10. @export_group("Move focus", "move_")
  11. @export var move_duration: float = 1.0
  12. @export_group("Step inward", "in_")
  13. @export var in_duration: float = 1.0
  14. var tween: Tween
  15. func focus_on(pos: Vector2, scope: float) -> void:
  16. if tween:
  17. tween.kill()
  18. var target_zoom = Vector2.ONE / scope
  19. var min_zoom = target_zoom if target_zoom.x < get_zoom().x else get_zoom()
  20. tween = create_tween().set_parallel(tween_is_parallel)
  21. tween.tween_property(self, "zoom", min_zoom * back_zoom_multiplier, back_duration)
  22. tween.tween_property(self, "position", pos, move_duration)
  23. tween.tween_property(self, "zoom", target_zoom, in_duration)
  24. tween.tween_callback(end)
  25. func end():
  26. ended.emit()
  27. func _on_show_new_focus(pos: Vector2, scope: float) -> void:
  28. focus_on(pos, scope)