- Fix SaveManager reset_game to use DirAccess.remove correctly - Add null check for FileAccess.open in save_game - Fix AudioManager crossfade tween callback chain - Replace fragile absolute HUD path with relative onready - Guard character position save against empty id - Add GameState.has_character_position helper - Emit room_changed signal after tween completes - Add target_floor validation in ElevatorButton - Persist audio settings via GameState - Add class_name to RoomNavigator, AudioManager, HUD Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
31 lines
858 B
GDScript
31 lines
858 B
GDScript
## RoomNavigator — autoload that moves the Camera2D smoothly between hospital floors.
|
|
class_name RoomNavigator extends Node
|
|
|
|
signal room_changed(floor_index: int)
|
|
|
|
const FLOOR_HEIGHT: float = 720.0
|
|
const CAMERA_TWEEN_DURATION: float = 0.6
|
|
|
|
var _current_floor: int = 0
|
|
var _camera: Camera2D
|
|
|
|
|
|
func initialize(camera: Camera2D) -> void:
|
|
_camera = camera
|
|
|
|
|
|
func go_to_floor(floor_index: int) -> void:
|
|
if _camera == null or floor_index == _current_floor:
|
|
return
|
|
_current_floor = floor_index
|
|
var target_y: float = floor_index * -FLOOR_HEIGHT
|
|
var tween: Tween = create_tween()
|
|
tween.set_ease(Tween.EASE_IN_OUT)
|
|
tween.set_trans(Tween.TRANS_SINE)
|
|
tween.tween_property(_camera, "position:y", target_y, CAMERA_TWEEN_DURATION)
|
|
tween.finished.connect(func() -> void: room_changed.emit(floor_index))
|
|
|
|
|
|
func get_current_floor() -> int:
|
|
return _current_floor
|