fix(navigator): kill active tween before starting new navigation to prevent camera jitter
This commit is contained in:
@@ -15,6 +15,7 @@ var _current_floor: int = 0
|
||||
var _current_room: int = 0
|
||||
var _is_at_home: bool = false
|
||||
var _camera: Camera2D
|
||||
var _active_tween: Tween
|
||||
|
||||
|
||||
func initialize(camera: Camera2D) -> void:
|
||||
@@ -35,11 +36,13 @@ func go_to_room(floor_index: int, room_index: int) -> void:
|
||||
_current_room = room_index
|
||||
var target_x: float = room_index * ROOM_WIDTH + ROOM_WIDTH * 0.5
|
||||
var target_y: float = floor_index * -FLOOR_HEIGHT + FLOOR_HEIGHT * 0.5
|
||||
var tween: Tween = create_tween()
|
||||
tween.set_ease(Tween.EASE_IN_OUT)
|
||||
tween.set_trans(Tween.TRANS_SINE)
|
||||
tween.tween_property(_camera, "position", Vector2(target_x, target_y), CAMERA_TWEEN_DURATION)
|
||||
tween.finished.connect(func() -> void: room_changed.emit(floor_index, room_index))
|
||||
if _active_tween != null:
|
||||
_active_tween.kill()
|
||||
_active_tween = create_tween()
|
||||
_active_tween.set_ease(Tween.EASE_IN_OUT)
|
||||
_active_tween.set_trans(Tween.TRANS_SINE)
|
||||
_active_tween.tween_property(_camera, "position", Vector2(target_x, target_y), CAMERA_TWEEN_DURATION)
|
||||
_active_tween.finished.connect(func() -> void: room_changed.emit(floor_index, room_index))
|
||||
|
||||
|
||||
func go_to_home() -> void:
|
||||
@@ -48,11 +51,13 @@ func go_to_home() -> void:
|
||||
if _is_at_home:
|
||||
return
|
||||
_is_at_home = true
|
||||
var tween: Tween = create_tween()
|
||||
tween.set_ease(Tween.EASE_IN_OUT)
|
||||
tween.set_trans(Tween.TRANS_SINE)
|
||||
tween.tween_property(_camera, "position", Vector2(HOME_CAMERA_X, HOME_CAMERA_Y), CAMERA_TWEEN_DURATION)
|
||||
tween.finished.connect(func() -> void: home_entered.emit())
|
||||
if _active_tween != null:
|
||||
_active_tween.kill()
|
||||
_active_tween = create_tween()
|
||||
_active_tween.set_ease(Tween.EASE_IN_OUT)
|
||||
_active_tween.set_trans(Tween.TRANS_SINE)
|
||||
_active_tween.tween_property(_camera, "position", Vector2(HOME_CAMERA_X, HOME_CAMERA_Y), CAMERA_TWEEN_DURATION)
|
||||
_active_tween.finished.connect(func() -> void: home_entered.emit())
|
||||
|
||||
|
||||
func go_to_hospital() -> void:
|
||||
@@ -63,11 +68,13 @@ func go_to_hospital() -> void:
|
||||
_is_at_home = false
|
||||
var target_x: float = _current_room * ROOM_WIDTH + ROOM_WIDTH * 0.5
|
||||
var target_y: float = _current_floor * -FLOOR_HEIGHT + FLOOR_HEIGHT * 0.5
|
||||
var tween: Tween = create_tween()
|
||||
tween.set_ease(Tween.EASE_IN_OUT)
|
||||
tween.set_trans(Tween.TRANS_SINE)
|
||||
tween.tween_property(_camera, "position", Vector2(target_x, target_y), CAMERA_TWEEN_DURATION)
|
||||
tween.finished.connect(func() -> void: hospital_entered.emit())
|
||||
if _active_tween != null:
|
||||
_active_tween.kill()
|
||||
_active_tween = create_tween()
|
||||
_active_tween.set_ease(Tween.EASE_IN_OUT)
|
||||
_active_tween.set_trans(Tween.TRANS_SINE)
|
||||
_active_tween.tween_property(_camera, "position", Vector2(target_x, target_y), CAMERA_TWEEN_DURATION)
|
||||
_active_tween.finished.connect(func() -> void: hospital_entered.emit())
|
||||
|
||||
|
||||
func get_current_floor() -> int:
|
||||
|
||||
Reference in New Issue
Block a user