Skip to content

Instantly share code, notes, and snippets.

@zhao-ji
Created November 29, 2020 12:32
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 zhao-ji/1adaf996864fe7d8192c631e3186eaf0 to your computer and use it in GitHub Desktop.
Save zhao-ji/1adaf996864fe7d8192c631e3186eaf0 to your computer and use it in GitHub Desktop.
elevator
{
init: function(elevators, floors) {
var elevator = elevators[0]; // Let's use the first elevator
var elevator1 = elevators[1]; // Let's use the first elevator
// Whenever the elevator is idle (has no more queued destinations) ...
elevator.on("idle", function() {
// let's go to all the floors (or did we forget one?)
elevator.goToFloor(0);
});
elevator.goingUpIndicator(true);
elevator.goingDownIndicator(false);
elevator1.on("idle", function() {
// let's go to all the floors (or did we forget one?)
elevator.goToFloor(7);
});
elevator1.goingUpIndicator(false);
elevator1.goingDownIndicator(true);
elevator.on("floor_button_pressed", function(floorNum) {
elevator.goToFloor(floorNum);
const currentFloor = elevator.currentFloor();
const destinationQueue = elevator.destinationQueue;
const floorUpQueue = [];
floors.forEach(floor => {
if (floor.buttonStates.up.length > 0) floorUpQueue.push(floor.level)
})
elevator.destinationQueue = [
...new Set([...destinationQueue, ...floorUpQueue])
].sort((a, b) => Number(a < currentFloor) * 10 + a < Number(b < currentFloor) * 10 + b)
elevator.checkDestinationQueue();
})
elevator1.on("floor_button_pressed", function(floorNum) {
elevator.goToFloor(floorNum);
const currentFloor = elevator.currentFloor();
const destinationQueue = elevator.destinationQueue;
const floorDownQueue = [];
floors.forEach(floor => {
if (floor.buttonStates.down.length > 0) floorDownQueue.push(floor.level)
})
elevator.destinationQueue = [
...new Set([...destinationQueue, ...floorDownQueue])
].sort((a, b) => Number(a < currentFloor) * 10 + a > Number(b < currentFloor) * 10 + b)
elevator.checkDestinationQueue();
})
floors.forEach(function (floor) {
floor.on("up_button_pressed", function() {
elevator.goToFloor(floor.floorNum());
})
floor.on("down_button_pressed", function() {
elevator1.goToFloor(floor.floorNum());
})
})
},
fuck: function (elevator, floors) {
const currentQueue = {};
elevator.destinationQueue.forEach(hi => {
currentQueue[hi] = 1;
});
floors.forEach(floor => {
if (floor.buttonStates.up.length > 0) {
if (Object.keys(currentQueue).indexOf(floor.level) > -1) {
currentQueue[floor.level] += 1
} else {
currentQueue[floor.level] = 1
}
}
if (floor.buttonStates.down.length > 0) {
if (Object.keys(currentQueue).indexOf(floor.level) > -1) {
currentQueue[floor.level] += 1
} else {
currentQueue[floor.level] = 1
}
}
})
elevator.destinationQueue = Object.keys(currentQueue).sort((a, b) => currentQueue[a] >= currentQueue[b]);
console.log(111111111)
console.log({currentQueue})
console.log({floorNum})
console.log(elevator.destinationQueue)
console.log(111111111)
elevator.checkDestinationQueue();
},
update: function(dt, elevators, floors) {
// We normally don't need to do anything here
}
}
{
init: function(elevators, floors) {
var elevator = elevators[0]; // Let's use the first elevator
var elevator1 = elevators[1];
// Whenever the elevator is idle (has no more queued destinations) ...
elevator.on("idle", function() {
// let's go to all the floors (or did we forget one?)
elevator.goToFloor(0);
});
elevator.goingUpIndicator(true);
elevator.goingDownIndicator(false);
elevator1.on("idle", function() {
// let's go to all the floors (or did we forget one?)
elevator1.goToFloor(7);
});
elevator1.goingUpIndicator(false);
elevator1.goingDownIndicator(true);
elevator.on("floor_button_pressed", function(floorNum) {
elevator.goToFloor(floorNum);
const currentFloor = elevator.currentFloor();
const destinationQueue = elevator.destinationQueue;
const floorUpQueue = [];
floors.forEach(floor => {
if (floor.buttonStates.up.length > 0) floorUpQueue.push(floor.level)
})
elevator.destinationQueue = [
...new Set([...destinationQueue, ...floorUpQueue])
].sort((a, b) => (Number(a < currentFloor) * 10 + a) - (Number(b < currentFloor) * 10 + b))
elevator.checkDestinationQueue();
})
elevator1.on("floor_button_pressed", function(floorNum) {
elevator1.goToFloor(floorNum);
const currentFloor = elevator1.currentFloor();
const destinationQueue = elevator1.destinationQueue;
const floorDownQueue = [];
floors.forEach(floor => {
if (floor.buttonStates.down.length > 0) floorDownQueue.push(floor.level)
})
elevator1.destinationQueue = [
...new Set([...destinationQueue, ...floorDownQueue])
].sort((b, a) => (Number(a < currentFloor) * 10 + a) - (Number(b < currentFloor) * 10 + b))
elevator1.checkDestinationQueue();
})
floors.forEach(function (floor) {
floor.on("up_button_pressed", function() {
elevator.goToFloor(floor.floorNum());
})
floor.on("down_button_pressed", function() {
elevator1.goToFloor(floor.floorNum());
})
})
},
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