Skip to content

Instantly share code, notes, and snippets.

@JacobAMason
Last active May 8, 2017 00:40
Show Gist options
  • Select an option

  • Save JacobAMason/9057fdaf814a14806e7cfd7828aa3c50 to your computer and use it in GitHub Desktop.

Select an option

Save JacobAMason/9057fdaf814a14806e7cfd7828aa3c50 to your computer and use it in GitHub Desktop.
{
init: function(elevators, floors) {
const TOP_FLOOR = floors.length-1;
var downFloors = [];
var upFloors = [];
function add_to_queue_sorted(elevator, floorNum) {
elevator.destinationQueue.push(floorNum);
elevator.destinationQueue = $.unique(elevator.destinationQueue);
elevator.destinationQueue.sort((a, b) => a - b);
if (elevator.goingDownIndicator()) {
elevator.destinationQueue.reverse();
}
elevator.checkDestinationQueue();
}
function get_highest_waiting_floor() {
var floorNum;
if (upFloors.length > 0 && downFloors.length > 0) {
if (upFloors[upFloors.length - 1] > downFloors[0]) {
floorNum = upFloors.pop();
} else {
floorNum = downFloors.shift();
}
} else if (upFloors.length > 0 && downFloors.length === 0) {
floorNum = upFloors.pop();
} else if (upFloors.length === 0 && downFloors.length > 0) {
floorNum = downFloors.shift();
} else {
floorNum = 0;
}
return floorNum;
}
function get_lowest_waiting_floor() {
var floorNum;
if (upFloors.length > 0 && downFloors.length > 0) {
if (upFloors[0] < downFloors[downFloors.length - 1]) {
floorNum = upFloors.shift();
} else {
floorNum = downFloors.pop();
}
} else if (upFloors.length > 0 && downFloors.length === 0) {
floorNum = upFloors.shift();
} else if (upFloors.length === 0 && downFloors.length > 0) {
floorNum = downFloors.pop();
} else {
floorNum = 0;
}
return floorNum;
}
floors.forEach(function(floor) {
floor.on("up_button_pressed", function() {
upFloors.push(floor.floorNum());
upFloors = $.unique(upFloors);
upFloors.sort();
});
floor.on("down_button_pressed", function() {
downFloors.push(floor.floorNum());
downFloors = $.unique(downFloors);
downFloors.sort();
downFloors.reverse();
});
});
elevators.forEach( function(elevator) {
elevator.on("passing_floor", function(floorNum) {
if (elevator.loadFactor === 1) {
return;
}
if (elevator.goingUpIndicator() && upFloors.includes(floorNum)) {
upFloors.splice(upFloors.indexOf(floorNum), 1);
add_to_queue_sorted(elevator, floorNum);
}
if (elevator.goingDownIndicator() && downFloors.includes(floorNum)) {
downFloors.splice(downFloors.indexOf(floorNum), 1);
add_to_queue_sorted(elevator, floorNum);
}
});
elevator.on("floor_button_pressed", function(floorNum) {
add_to_queue_sorted(elevator, floorNum);
});
elevator.on("stopped_at_floor", function(floorNum) {
if (floorNum === 0) {
elevator.goingUpIndicator(true);
elevator.goingDownIndicator(false);
add_to_queue_sorted(elevator, TOP_FLOOR);
}
if (floorNum === TOP_FLOOR) {
elevator.goingUpIndicator(false);
elevator.goingDownIndicator(true);
add_to_queue_sorted(elevator, 0);
}
});
elevator.goingUpIndicator(true);
elevator.goingDownIndicator(false);
});
elevators.slice(-1).forEach((e) => e.goToFloor(TOP_FLOOR));
},
update: function(dt, elevators, floors) {
// We normally don't need to do anything here
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment