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.

Revisions

  1. JacobAMason revised this gist May 8, 2017. 1 changed file with 48 additions and 8 deletions.
    56 changes: 48 additions & 8 deletions elevatorsaga.js
    Original file line number Diff line number Diff line change
    @@ -7,13 +7,51 @@

    function add_to_queue_sorted(elevator, floorNum) {
    elevator.destinationQueue.push(floorNum);
    elevator.destinationQueue.sort();
    elevator.destinationQueue = $.unique(elevator.destinationQueue);
    elevator.destinationQueue.sort((a, b) => a - b);
    if (elevator.goingDownIndicator()) {
    elevator.destinationQueue.reverse();
    }
    elevator.destinationQueue = $.unique(elevator.destinationQueue);
    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() {
    @@ -35,10 +73,6 @@
    if (elevator.loadFactor === 1) {
    return;
    }

    if (elevator.getPressedFloors().includes(floorNum)) {
    add_to_queue_sorted(elevator, floorNum);
    }

    if (elevator.goingUpIndicator() && upFloors.includes(floorNum)) {
    upFloors.splice(upFloors.indexOf(floorNum), 1);
    @@ -50,7 +84,12 @@
    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);
    @@ -64,11 +103,12 @@
    add_to_queue_sorted(elevator, 0);
    }
    });

    elevator.goingUpIndicator(true);
    elevator.goingDownIndicator(false);
    elevator.goToFloor(TOP_FLOOR);
    });

    elevators.slice(-1).forEach((e) => e.goToFloor(TOP_FLOOR));
    },
    update: function(dt, elevators, floors) {
    // We normally don't need to do anything here
  2. JacobAMason renamed this gist May 7, 2017. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  3. JacobAMason created this gist May 7, 2017.
    76 changes: 76 additions & 0 deletions elevatorsaga
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,76 @@
    {
    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.sort();
    if (elevator.goingDownIndicator()) {
    elevator.destinationQueue.reverse();
    }
    elevator.destinationQueue = $.unique(elevator.destinationQueue);
    elevator.checkDestinationQueue();
    }

    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.getPressedFloors().includes(floorNum)) {
    add_to_queue_sorted(elevator, floorNum);
    }

    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("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);
    elevator.goToFloor(TOP_FLOOR);
    });
    },
    update: function(dt, elevators, floors) {
    // We normally don't need to do anything here
    }
    }