Add cab door-open control and align elevator buttons

This commit is contained in:
sudhir
2026-05-10 02:28:00 +05:30
parent 2480be91b1
commit 263228cbf0
7 changed files with 1051 additions and 351 deletions
@@ -98,6 +98,9 @@ type InteractiveStore = {
/** Queue a request for an elevator to travel to a level. */
requestElevator: (elevatorId: AnyNodeId, levelId: AnyNodeId) => void
/** Open the elevator doors at the current level when the car is not moving. */
openElevatorDoor: (elevatorId: AnyNodeId) => void
/** Merge runtime elevator state. */
setElevatorState: (elevatorId: AnyNodeId, value: Partial<ElevatorInteractiveState>) => void
@@ -274,6 +277,24 @@ export const useInteractive = create<InteractiveStore>((set, get) => ({
})
},
openElevatorDoor: (elevatorId) => {
set((state) => {
const elevator = state.elevators[elevatorId]
if (!elevator?.currentLevelId || elevator.phase === 'moving') return state
return {
elevators: {
...state.elevators,
[elevatorId]: {
...elevator,
phase: 'opening',
phaseStartedAt: null,
},
},
}
})
},
setElevatorState: (elevatorId, value) => {
set((state) => {
const current = state.elevators[elevatorId]