From 903df578e27e07d692f005e4b5066b84ce236d29 Mon Sep 17 00:00:00 2001 From: Steven Wroblewski Date: Fri, 17 Apr 2026 13:50:00 +0200 Subject: [PATCH] feat(navigation): extend RoomNavigator for horizontal room-within-floor navigation --- scripts/systems/room_navigator.gd | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/scripts/systems/room_navigator.gd b/scripts/systems/room_navigator.gd index a05384b..e5c6d39 100644 --- a/scripts/systems/room_navigator.gd +++ b/scripts/systems/room_navigator.gd @@ -1,12 +1,14 @@ -## RoomNavigator — autoload that moves the Camera2D smoothly between hospital floors. +## RoomNavigator — autoload that moves the Camera2D smoothly between hospital floors and rooms. extends Node -signal room_changed(floor_index: int) +signal room_changed(floor_index: int, room_index: int) const FLOOR_HEIGHT: float = 720.0 +const ROOM_WIDTH: float = 1280.0 const CAMERA_TWEEN_DURATION: float = 0.6 var _current_floor: int = 0 +var _current_room: int = 0 var _camera: Camera2D @@ -15,16 +17,28 @@ func initialize(camera: Camera2D) -> void: func go_to_floor(floor_index: int) -> void: - if _camera == null or floor_index == _current_floor: + go_to_room(floor_index, 0) + + +func go_to_room(floor_index: int, room_index: int) -> void: + if _camera == null: + return + if floor_index == _current_floor and room_index == _current_room: return _current_floor = floor_index + _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:y", target_y, CAMERA_TWEEN_DURATION) - tween.finished.connect(func() -> void: room_changed.emit(floor_index)) + 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)) func get_current_floor() -> int: return _current_floor + + +func get_current_room() -> int: + return _current_room