Add cab door-open control and align elevator buttons
This commit is contained in:
@@ -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]
|
||||
|
||||
Reference in New Issue
Block a user