diff --git a/scripts/systems/room_navigator.gd b/scripts/systems/room_navigator.gd index 5ee3546..f567ea5 100644 --- a/scripts/systems/room_navigator.gd +++ b/scripts/systems/room_navigator.gd @@ -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: