Skip to content

Instantly share code, notes, and snippets.

@echojc
Created December 2, 2018 03:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save echojc/949e83953900b9ec06596a97f52fc8ab to your computer and use it in GitHub Desktop.
Save echojc/949e83953900b9ec06596a97f52fc8ab to your computer and use it in GitHub Desktop.
{
init: function (elevators, floors) {
const floor_up_pressed = {};
const floor_down_pressed = {};
floors.forEach(floor => {
const f = floor;
f.on('up_button_pressed', () => {
floor_up_pressed[f.floorNum()] = true;
});
f.on('down_button_pressed', () => {
floor_down_pressed[f.floorNum()] = true;
});
});
elevators.forEach((elevator, id) => {
const e = elevator;
e.restFloor = Math.floor(floors.length / elevators.length * id);
e.dir = 1;
e.floor_pressed = {};
e.on('floor_button_pressed', fn => {
e.floor_pressed[fn] = true;
});
e.on('idle', () => {
if (e.currentFloor() === floors.length - 1) {
e.dir = -1;
} else if (e.currentFloor() === 0) {
e.dir = 1;
}
let targetFloor = null;
if (e.dir < 0) {
for (let i = e.currentFloor() - 1; i >= 0; i--) {
if (floor_down_pressed[i] || e.floor_pressed[i]) {
targetFloor = i;
break;
}
}
if (targetFloor == null) {
for (let i = 0; i < floors.length; i++) {
if (floor_up_pressed[i]) {
targetFloor = i;
e.dir = 1;
break;
}
}
}
} else if (e.dir > 0) {
for (let i = e.currentFloor() + 1; i < floors.length; i++) {
if (floor_up_pressed[i] || e.floor_pressed[i]) {
targetFloor = i;
break;
}
}
if (targetFloor == null) {
for (let i = floors.length - 1; i >= 0; i--) {
if (floor_down_pressed[i]) {
targetFloor = i;
e.dir = -1;
break;
}
}
}
}
if (targetFloor == null) {
targetFloor = e.restFloor;
}
floor_down_pressed[targetFloor] = false;
floor_up_pressed[targetFloor] = false;
e.floor_pressed[targetFloor] = false;
e.goToFloor(targetFloor);
});
});
},
update: function (dt, elevators, floors) {},
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment