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; | |
} | |
} |