| 
				
			 | 
			
			
				
				@@ -56,24 +56,29 @@ 
			 | 
		
		
	
		
			
			| 
				56
			 | 
			
				56
			 | 
			
			
				
				 					let allStops = new Set([...destinations, ...requests[UP], ...requests[DOWN]]); 
			 | 
		
		
	
		
			
			| 
				57
			 | 
			
				57
			 | 
			
			
				
				 					try { 
			 | 
		
		
	
		
			
			| 
				58
			 | 
			
				58
			 | 
			
			
				
				 						floorNum = getClosestFloor(elevator.currentFloor(), allStops) 
			 | 
		
		
	
		
			
			| 
				59
			 | 
			
				
			 | 
			
			
				
				-						console.log("> Sending elevator[" + elevatorIndex + "] to floor[" + floorNum + "]"); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				59
			 | 
			
			
				
				+						//console.log("> Sending elevator[" + elevatorIndex + "] to floor[" + floorNum + "]"); 
			 | 
		
		
	
		
			
			| 
				60
			 | 
			
				60
			 | 
			
			
				
				 						elevator.goToFloor(floorNum); 
			 | 
		
		
	
		
			
			| 
				61
			 | 
			
				61
			 | 
			
			
				
				 					} catch (e) { 
			 | 
		
		
	
		
			
			| 
				62
			 | 
			
				
			 | 
			
			
				
				-						console.log("> No closest floor. Sending elevator[" + elevatorIndex + "] to rest floor[" + restFloors[1] + "]"); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				62
			 | 
			
			
				
				+						//console.log("> No closest floor. Sending elevator[" + elevatorIndex + "] to rest floor[" + restFloors[1] + "]"); 
			 | 
		
		
	
		
			
			| 
				63
			 | 
			
				63
			 | 
			
			
				
				 						elevator.goToFloor(restFloors[1]); 
			 | 
		
		
	
		
			
			| 
				64
			 | 
			
				64
			 | 
			
			
				
				 					} 
			 | 
		
		
	
		
			
			| 
				65
			 | 
			
				65
			 | 
			
			
				
				 				} else { 
			 | 
		
		
	
		
			
			| 
				66
			 | 
			
				
			 | 
			
			
				
				-					console.log("> Sending elevator[" + elevatorIndex + "] to rest floor[" + restFloors[1] + "]"); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				66
			 | 
			
			
				
				+					//console.log("> Sending elevator[" + elevatorIndex + "] to rest floor[" + restFloors[1] + "]"); 
			 | 
		
		
	
		
			
			| 
				67
			 | 
			
				67
			 | 
			
			
				
				 					elevator.goToFloor(restFloors[1]); 
			 | 
		
		
	
		
			
			| 
				68
			 | 
			
				68
			 | 
			
			
				
				 				} 
			 | 
		
		
	
		
			
			| 
				69
			 | 
			
				69
			 | 
			
			
				
				 			} else { 
			 | 
		
		
	
		
			
			| 
				70
			 | 
			
				
			 | 
			
			
				
				-				floorNum = getClosestFloor(elevator.currentFloor(), destinations) 
			 | 
		
		
	
		
			
			| 
				71
			 | 
			
				
			 | 
			
			
				
				-				console.log("> Sending elevator[" + elevatorIndex + "] to destination floor[" + floorNum + "]"); 
			 | 
		
		
	
		
			
			| 
				72
			 | 
			
				
			 | 
			
			
				
				-				elevator.goToFloor(floorNum); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				70
			 | 
			
			
				
				+				try { 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				71
			 | 
			
			
				
				+					floorNum = getClosestFloor(elevator.currentFloor(), destinations) 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				72
			 | 
			
			
				
				+					console.log("> Sending elevator[" + elevatorIndex + "] to destination floor[" + floorNum + "]"); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				73
			 | 
			
			
				
				+					elevator.goToFloor(floorNum); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				74
			 | 
			
			
				
				+				} catch (e) { 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				75
			 | 
			
			
				
				+					//console.log("> No closest floor. Sending elevator[" + elevatorIndex + "] to rest floor[" + restFloors[1] + "]"); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				76
			 | 
			
			
				
				+					elevator.goToFloor(restFloors[1]); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				77
			 | 
			
			
				
				+				} 
			 | 
		
		
	
		
			
			| 
				73
			 | 
			
				78
			 | 
			
			
				
				 			} 
			 | 
		
		
	
		
			
			| 
				74
			 | 
			
				79
			 | 
			
			
				
				 		} 
			 | 
		
		
	
		
			
			| 
				75
			 | 
			
				80
			 | 
			
			
				
				  
			 | 
		
		
	
		
			
			| 
				76
			 | 
			
				
			 | 
			
			
				
				-		function bringClosestElevator(floorNum) { 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				81
			 | 
			
			
				
				+		function getClosestElevator(floorNum) { 
			 | 
		
		
	
		
			
			| 
				77
			 | 
			
				82
			 | 
			
			
				
				 			let closestElevator = 0; 
			 | 
		
		
	
		
			
			| 
				78
			 | 
			
				83
			 | 
			
			
				
				 			let distance        = floorCount; 
			 | 
		
		
	
		
			
			| 
				79
			 | 
			
				84
			 | 
			
			
				
				 			let newDistance     = distance; 
			 | 
		
		
	
	
		
			
			| 
				
			 | 
			
			
				
				@@ -87,7 +92,7 @@ 
			 | 
		
		
	
		
			
			| 
				87
			 | 
			
				92
			 | 
			
			
				
				 			}); 
			 | 
		
		
	
		
			
			| 
				88
			 | 
			
				93
			 | 
			
			
				
				  
			 | 
		
		
	
		
			
			| 
				89
			 | 
			
				94
			 | 
			
			
				
				 			//console.log("Closest is elevator[" + closestElevator + "]") 
			 | 
		
		
	
		
			
			| 
				90
			 | 
			
				
			 | 
			
			
				
				-			elevators[closestElevator].goToFloor(floorNum); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				95
			 | 
			
			
				
				+			return closestElevator; 
			 | 
		
		
	
		
			
			| 
				91
			 | 
			
				96
			 | 
			
			
				
				 		} 
			 | 
		
		
	
		
			
			| 
				92
			 | 
			
				97
			 | 
			
			
				
				  
			 | 
		
		
	
		
			
			| 
				93
			 | 
			
				98
			 | 
			
			
				
				 		function setDirection(elevator, direction){ 
			 | 
		
		
	
	
		
			
			| 
				
			 | 
			
			
				
				@@ -114,12 +119,10 @@ 
			 | 
		
		
	
		
			
			| 
				114
			 | 
			
				119
			 | 
			
			
				
				 			floor.on("up_button_pressed", function() { 
			 | 
		
		
	
		
			
			| 
				115
			 | 
			
				120
			 | 
			
			
				
				 				//console.log("> Up request on floor[" + floor.level + "]"); 
			 | 
		
		
	
		
			
			| 
				116
			 | 
			
				121
			 | 
			
			
				
				 				requests[UP].add(floor.level); 
			 | 
		
		
	
		
			
			| 
				117
			 | 
			
				
			 | 
			
			
				
				-				//bringClosestElevator(floor.level); 
			 | 
		
		
	
		
			
			| 
				118
			 | 
			
				122
			 | 
			
			
				
				 			}); 
			 | 
		
		
	
		
			
			| 
				119
			 | 
			
				123
			 | 
			
			
				
				 			floor.on("down_button_pressed", function() { 
			 | 
		
		
	
		
			
			| 
				120
			 | 
			
				124
			 | 
			
			
				
				 				//console.log("> Down request on floor[" + floor.level + "]"); 
			 | 
		
		
	
		
			
			| 
				121
			 | 
			
				125
			 | 
			
			
				
				 				requests[DOWN].add(floor.level); 
			 | 
		
		
	
		
			
			| 
				122
			 | 
			
				
			 | 
			
			
				
				-				//bringClosestElevator(floor.level); 
			 | 
		
		
	
		
			
			| 
				123
			 | 
			
				126
			 | 
			
			
				
				 			}); 
			 | 
		
		
	
		
			
			| 
				124
			 | 
			
				127
			 | 
			
			
				
				 		}); 
			 | 
		
		
	
		
			
			| 
				125
			 | 
			
				128
			 | 
			
			
				
				  
			 | 
		
		
	
	
		
			
			| 
				
			 | 
			
			
				
				@@ -129,32 +132,22 @@ 
			 | 
		
		
	
		
			
			| 
				129
			 | 
			
				132
			 | 
			
			
				
				  
			 | 
		
		
	
		
			
			| 
				130
			 | 
			
				133
			 | 
			
			
				
				 		elevators.forEach(function (elevator, elevatorIndex) { 
			 | 
		
		
	
		
			
			| 
				131
			 | 
			
				134
			 | 
			
			
				
				  
			 | 
		
		
	
		
			
			| 
				132
			 | 
			
				
			 | 
			
			
				
				-			// Basic elevator info 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				135
			 | 
			
			
				
				+			// Elevator info and variables 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				136
			 | 
			
			
				
				+			let destinations = new Set(); 
			 | 
		
		
	
		
			
			| 
				133
			 | 
			
				137
			 | 
			
			
				
				 			const restFloors = [ 
			 | 
		
		
	
		
			
			| 
				134
			 | 
			
				138
			 | 
			
			
				
				 				elevatorIndex * Math.floor(floorCount / (elevatorCount + 1)), 
			 | 
		
		
	
		
			
			| 
				135
			 | 
			
				139
			 | 
			
			
				
				 				(elevatorIndex + 1) * Math.floor(floorCount / (elevatorCount + 1)), 
			 | 
		
		
	
		
			
			| 
				136
			 | 
			
				140
			 | 
			
			
				
				 				(elevatorIndex + 2) * Math.floor(floorCount / (elevatorCount + 1)) 
			 | 
		
		
	
		
			
			| 
				137
			 | 
			
				141
			 | 
			
			
				
				 			] 
			 | 
		
		
	
		
			
			| 
				138
			 | 
			
				142
			 | 
			
			
				
				  
			 | 
		
		
	
		
			
			| 
				139
			 | 
			
				
			 | 
			
			
				
				-			//console.log("Rest floors for elevator[" + elevatorIndex + "]: " + restFloors[0] + ", " + restFloors[1] + ", and " + restFloors[2]) 
			 | 
		
		
	
		
			
			| 
				140
			 | 
			
				
			 | 
			
			
				
				- 
			 | 
		
		
	
		
			
			| 
				141
			 | 
			
				
			 | 
			
			
				
				-			elevator.on("floor_button_pressed", function(floorNum) { 
			 | 
		
		
	
		
			
			| 
				142
			 | 
			
				
			 | 
			
			
				
				-				//console.log("> Pressed floor[" + floorNum + "] on elevator[" + elevatorIndex + "]"); 
			 | 
		
		
	
		
			
			| 
				143
			 | 
			
				
			 | 
			
			
				
				-				destinations.add(floorNum); 
			 | 
		
		
	
		
			
			| 
				144
			 | 
			
				
			 | 
			
			
				
				-			}); 
			 | 
		
		
	
		
			
			| 
				145
			 | 
			
				
			 | 
			
			
				
				- 
			 | 
		
		
	
		
			
			| 
				146
			 | 
			
				
			 | 
			
			
				
				-			// Elevator variables 
			 | 
		
		
	
		
			
			| 
				147
			 | 
			
				
			 | 
			
			
				
				-			let destinations = new Set(); 
			 | 
		
		
	
		
			
			| 
				148
			 | 
			
				
			 | 
			
			
				
				- 
			 | 
		
		
	
		
			
			| 
				149
			 | 
			
				143
			 | 
			
			
				
				 			// Start 
			 | 
		
		
	
		
			
			| 
				150
			 | 
			
				
			 | 
			
			
				
				-			setDirection(elevator, IDLE); // Starts on the ground floor 
			 | 
		
		
	
		
			
			| 
				151
			 | 
			
				
			 | 
			
			
				
				-			console.log("> Sending elevator[" + elevatorIndex + "] to floor[" + restFloors[0] + "]"); 
			 | 
		
		
	
		
			
			| 
				152
			 | 
			
				
			 | 
			
			
				
				- 
			 | 
		
		
	
		
			
			| 
				153
			 | 
			
				
			 | 
			
			
				
				-			elevator.goToFloor(restFloors[0]); // Closest rest floor 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				144
			 | 
			
			
				
				+			setDirection(elevator, UP); // Starts on the ground floor 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				145
			 | 
			
			
				
				+			console.log("> Elevator[" + elevatorIndex + "] rest floors are " + restFloors[0] + ", " + restFloors[1] + ", and " + restFloors[2] + ". Starting at " + restFloors[0] + ".") 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				146
			 | 
			
			
				
				+			elevator.goToFloor(restFloors[0]); // Nearest rest floor 
			 | 
		
		
	
		
			
			| 
				154
			 | 
			
				147
			 | 
			
			
				
				  
			 | 
		
		
	
		
			
			| 
				155
			 | 
			
				148
			 | 
			
			
				
				 			// Idle 
			 | 
		
		
	
		
			
			| 
				156
			 | 
			
				149
			 | 
			
			
				
				 			elevator.on("idle", function() { 
			 | 
		
		
	
		
			
			| 
				157
			 | 
			
				
			 | 
			
			
				
				-				console.log("> Elevator[" + elevatorIndex + "] is idle") 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				150
			 | 
			
			
				
				+				//console.log("> Elevator[" + elevatorIndex + "] is idle") 
			 | 
		
		
	
		
			
			| 
				158
			 | 
			
				151
			 | 
			
			
				
				 				setDirection(elevator, IDLE); 
			 | 
		
		
	
		
			
			| 
				159
			 | 
			
				152
			 | 
			
			
				
				 				if (requests[UP].size == 0 && requests[DOWN].size == 0 && destinations.size == 0) { 
			 | 
		
		
	
		
			
			| 
				160
			 | 
			
				153
			 | 
			
			
				
				 					elevator.goToFloor(restFloors[1]); 
			 | 
		
		
	
	
		
			
			| 
				
			 | 
			
			
				
				@@ -165,23 +158,23 @@ 
			 | 
		
		
	
		
			
			| 
				165
			 | 
			
				158
			 | 
			
			
				
				  
			 | 
		
		
	
		
			
			| 
				166
			 | 
			
				159
			 | 
			
			
				
				 			// Passing 
			 | 
		
		
	
		
			
			| 
				167
			 | 
			
				160
			 | 
			
			
				
				 			elevator.on("passing_floor", function(floorNum, direction) { 
			 | 
		
		
	
		
			
			| 
				168
			 | 
			
				
			 | 
			
			
				
				-				if (elevator.loadFactor() < 1) { 
			 | 
		
		
	
		
			
			| 
				169
			 | 
			
				
			 | 
			
			
				
				-					if (requests[UP].has(floorNum) || requests[DOWN].has(floorNum) || destinations.has(floorNum)) { 
			 | 
		
		
	
		
			
			| 
				170
			 | 
			
				
			 | 
			
			
				
				-						elevator.goToFloor(floorNum, true); 
			 | 
		
		
	
		
			
			| 
				171
			 | 
			
				
			 | 
			
			
				
				-					} 
			 | 
		
		
	
		
			
			| 
				172
			 | 
			
				
			 | 
			
			
				
				-				} else if (destinations.has(floorNum)) { 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				161
			 | 
			
			
				
				+				if (elevator.loadFactor() < 1 && (requests[UP].has(floorNum) || requests[DOWN].has(floorNum))) { 
			 | 
		
		
	
		
			
			| 
				173
			 | 
			
				162
			 | 
			
			
				
				 					elevator.goToFloor(floorNum, true); 
			 | 
		
		
	
		
			
			| 
				174
			 | 
			
				163
			 | 
			
			
				
				 				} 
			 | 
		
		
	
		
			
			| 
				175
			 | 
			
				164
			 | 
			
			
				
				 			}); 
			 | 
		
		
	
		
			
			| 
				176
			 | 
			
				165
			 | 
			
			
				
				  
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				166
			 | 
			
			
				
				+			// Buttons 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				167
			 | 
			
			
				
				+			elevator.on("floor_button_pressed", function(floorNum) { 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				168
			 | 
			
			
				
				+				//console.log("> Pressed floor[" + floorNum + "] on elevator[" + elevatorIndex + "]"); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				169
			 | 
			
			
				
				+				destinations.add(floorNum); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				170
			 | 
			
			
				
				+			}); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				171
			 | 
			
			
				
				+ 
			 | 
		
		
	
		
			
			| 
				177
			 | 
			
				172
			 | 
			
			
				
				 			// Stopped 
			 | 
		
		
	
		
			
			| 
				178
			 | 
			
				173
			 | 
			
			
				
				 			elevator.on("stopped_at_floor", function(floorNum) { 
			 | 
		
		
	
		
			
			| 
				179
			 | 
			
				174
			 | 
			
			
				
				 				//console.log("> elevator[" + elevatorIndex + "] stopped at floor[" + floorNum + "]"); 
			 | 
		
		
	
		
			
			| 
				180
			 | 
			
				175
			 | 
			
			
				
				 				destinations.delete(floorNum); 
			 | 
		
		
	
		
			
			| 
				181
			 | 
			
				176
			 | 
			
			
				
				 				requests[UP].delete(floorNum); 
			 | 
		
		
	
		
			
			| 
				182
			 | 
			
				177
			 | 
			
			
				
				 				requests[DOWN].delete(floorNum); 
			 | 
		
		
	
		
			
			| 
				183
			 | 
			
				
			 | 
			
			
				
				- 
			 | 
		
		
	
		
			
			| 
				184
			 | 
			
				
			 | 
			
			
				
				-				sendToNext(elevators, elevatorIndex, destinations, requests, restFloors); 
			 | 
		
		
	
		
			
			| 
				185
			 | 
			
				178
			 | 
			
			
				
				 			}); 
			 | 
		
		
	
		
			
			| 
				186
			 | 
			
				179
			 | 
			
			
				
				 		}); 
			 | 
		
		
	
		
			
			| 
				187
			 | 
			
				180
			 | 
			
			
				
				 	}, 
			 |