Code de gestion des ascenseurs pour le projet elevato.rs d'@oncletom.
Réalisé au cours d'un atelier à Paris Web 2014 par @Nazcange, @Nico3333fr et @nhoizey.
Code de gestion des ascenseurs pour le projet elevato.rs d'@oncletom.
Réalisé au cours d'un atelier à Paris Web 2014 par @Nazcange, @Nico3333fr et @nhoizey.
| function sameDirection(floorNumber, elevator) { | |
| var tmp = (floorNumber - elevator.nextFloor) * (elevator.nextFloor - elevator.previousFloor); | |
| return tmp > 0; | |
| } | |
| // called each time someone requests an elevator | |
| function onFloorRequest(floorNumber, elevators) { | |
| var found = false; | |
| for (var id = 0; id < elevators.length; id++) { | |
| if (found) { | |
| return; | |
| } | |
| console.log('Elevator #' + id); | |
| if (typeof elevators[id].isIddle === 'undefined') { | |
| elevators[id].isIddle = true; | |
| } | |
| console.log(' Iddle? ' + elevators[id].isIddle); | |
| if (elevators[id].isIddle) { | |
| elevators[id].moveTo(floorNumber); | |
| elevators[id].isIddle = false; | |
| found = true; | |
| } | |
| } | |
| if (!found) { | |
| var minReq = elevators[0].requestedAt.length, | |
| minReqId = 0, | |
| minDistId = -1, | |
| id = 0; | |
| while (id < elevators.length) { | |
| if (sameDirection(floorNumber, elevators[id])) { | |
| minDistId = id; | |
| } | |
| if (elevators[id].requestedAt.length < minReq) { | |
| minReq = elevators[id].requestedAt.length; | |
| minReqId = id; | |
| } | |
| id++; | |
| } | |
| if (minDistId != -1) { | |
| elevators[minDistId].moveTo(floorNumber); | |
| elevators[minDistId].isIddle = false; | |
| } else { | |
| elevators[minReqId].moveTo(floorNumber); | |
| elevators[minReqId].isIddle = false; | |
| } | |
| } | |
| } | |
| // called each time an elevator becomes idle | |
| function onElevatorIdle(elevator, elevators) { | |
| if (elevator.requestedAt.length){ | |
| console.log('elevators['+elevator.id+'] still have to go to', elevator.requestedAt); | |
| } | |
| else{ | |
| console.log('elevators['+elevator.id+'] is now idle'); | |
| elevators[elevator.id].isIddle = true; | |
| } | |
| } |