Browse Source

Fix broken elevator 0

master
Ashton Charbonneau 5 years ago
parent
commit
0a817f3f25
1 changed files with 33 additions and 22 deletions
  1. 33
    22
      elevator.js

+ 33
- 22
elevator.js View File

@@ -22,7 +22,7 @@
22 22
 		// Functions
23 23
 		// ----
24 24
 
25
-		function getClosestFloor(currentFloor, floorList, direction = IDLE, ignoredFloors = new Set()){
25
+		function getClosestFloor(currentFloor, floorList, ignoredFloors = new Set(), direction = IDLE){
26 26
 			let closestFloor = currentFloor;
27 27
 			let distance     = floorCount;
28 28
 			let newDistance  = distance;
@@ -49,18 +49,27 @@
49 49
 			}
50 50
 		}
51 51
 
52
-		function sendToNext(elevator, destinations, requests, restFloors) {
53
-			if (elevator.loadFactor() < 1) {
52
+		function sendToNext(elevators, elevatorIndex, destinations, requests, restFloors) {
53
+			elevator = elevators[elevatorIndex]
54
+			if (elevator.loadFactor() < 0.8) {
54 55
 				if (requests[UP].size > 0 || requests[DOWN].size > 0 || destinations.size > 0) {
55 56
 					let allStops = new Set([...destinations, ...requests[UP], ...requests[DOWN]]);
56 57
 					try {
57
-						elevator.goToFloor(getClosestFloor(elevator.currentFloor(), allStops));
58
+						floorNum = getClosestFloor(elevator.currentFloor(), allStops)
59
+						console.log("> Sending elevator[" + elevatorIndex + "] to floor[" + floorNum + "]");
60
+						elevator.goToFloor(floorNum);
58 61
 					} catch (e) {
62
+						console.log("> No closest floor. Sending elevator[" + elevatorIndex + "] to rest floor[" + restFloors[1] + "]");
59 63
 						elevator.goToFloor(restFloors[1]);
60 64
 					}
65
+				} else {
66
+					console.log("> Sending elevator[" + elevatorIndex + "] to rest floor[" + restFloors[1] + "]");
67
+					elevator.goToFloor(restFloors[1]);
61 68
 				}
62 69
 			} else {
63
-				elevator.goToFloor(getClosestFloor(elevator.currentFloor(), destinations));
70
+				floorNum = getClosestFloor(elevator.currentFloor(), destinations)
71
+				console.log("> Sending elevator[" + elevatorIndex + "] to destination floor[" + floorNum + "]");
72
+				elevator.goToFloor(floorNum);
64 73
 			}
65 74
 		}
66 75
 
@@ -69,14 +78,15 @@
69 78
 			let distance        = floorCount;
70 79
 			let newDistance     = distance;
71 80
 
72
-			elevators.forEach(function (elevator) {
81
+			elevators.forEach(function (elevator, elevatorIndex) {
73 82
 				newDistance = Math.abs(elevator.currentFloor() - floorNum);
74 83
 				if (newDistance < distance) {
75 84
 					distance = newDistance;
76
-					closestElevator = elevators.indexOf(elevator);
85
+					closestElevator = elevatorIndex;
77 86
 				}
78 87
 			});
79 88
 
89
+			//console.log("Closest is elevator[" + closestElevator + "]")
80 90
 			elevators[closestElevator].goToFloor(floorNum);
81 91
 		}
82 92
 
@@ -102,14 +112,14 @@
102 112
 
103 113
 		floors.forEach(function (floor) {
104 114
 			floor.on("up_button_pressed", function() {
105
-				console.log("> Up request on floor[" + floor.level + "]");
106
-				requests[UP].add(floor.floorNum);
107
-				bringClosestElevator(floor.floorNum);
115
+				//console.log("> Up request on floor[" + floor.level + "]");
116
+				requests[UP].add(floor.level);
117
+				//bringClosestElevator(floor.level);
108 118
 			});
109 119
 			floor.on("down_button_pressed", function() {
110
-				console.log("> Down request on floor[" + floor.level + "]");
111
-				requests[DOWN].add(floor.floorNum);
112
-				bringClosestElevator(floor.floorNum);
120
+				//console.log("> Down request on floor[" + floor.level + "]");
121
+				requests[DOWN].add(floor.level);
122
+				//bringClosestElevator(floor.level);
113 123
 			});
114 124
 		});
115 125
 
@@ -117,28 +127,29 @@
117 127
 		// Elevators
118 128
 		// ----
119 129
 
120
-		elevators.forEach(function (elevator) {
130
+		elevators.forEach(function (elevator, elevatorIndex) {
121 131
 
122 132
 			// Basic elevator info
123
-			const elevatorIndex = elevators.indexOf(elevator);
124 133
 			const restFloors = [
125
-				(elevatorIndex + 0) * Math.floor(floorCount / (elevatorCount + 1)),
134
+				elevatorIndex * Math.floor(floorCount / (elevatorCount + 1)),
126 135
 				(elevatorIndex + 1) * Math.floor(floorCount / (elevatorCount + 1)),
127 136
 				(elevatorIndex + 2) * Math.floor(floorCount / (elevatorCount + 1))
128 137
 			]
129 138
 
139
+			//console.log("Rest floors for elevator[" + elevatorIndex + "]: " + restFloors[0] + ", " + restFloors[1] + ", and " + restFloors[2])
140
+
130 141
 			elevator.on("floor_button_pressed", function(floorNum) {
131
-				console.log("> Pressed floor[" + floorNum + "] on elevator[" + elevatorIndex + "]");
142
+				//console.log("> Pressed floor[" + floorNum + "] on elevator[" + elevatorIndex + "]");
132 143
 				destinations.add(floorNum);
133
-				sendToNext(elevator, destinations, requests, restFloors);
134 144
 			});
135 145
 
136 146
 			// Elevator variables
137 147
 			let destinations = new Set();
138 148
 
139 149
 			// Start
140
-			setDirection(elevator, UP); // Starts on the ground floor
150
+			setDirection(elevator, IDLE); // Starts on the ground floor
141 151
 			console.log("> Sending elevator[" + elevatorIndex + "] to floor[" + restFloors[0] + "]");
152
+
142 153
 			elevator.goToFloor(restFloors[0]); // Closest rest floor
143 154
 
144 155
 			// Idle
@@ -148,7 +159,7 @@
148 159
 				if (requests[UP].size == 0 && requests[DOWN].size == 0 && destinations.size == 0) {
149 160
 					elevator.goToFloor(restFloors[1]);
150 161
 				} else {
151
-					sendToNext(elevator, destinations, requests, restFloors);
162
+					sendToNext(elevators, elevatorIndex, destinations, requests, restFloors);
152 163
 				}
153 164
 			});
154 165
 
@@ -165,12 +176,12 @@
165 176
 
166 177
 			// Stopped
167 178
 			elevator.on("stopped_at_floor", function(floorNum) {
168
-				console.log("> elevator[" + elevatorIndex + "] stopped at floor[" + floorNum + "]");
179
+				//console.log("> elevator[" + elevatorIndex + "] stopped at floor[" + floorNum + "]");
169 180
 				destinations.delete(floorNum);
170 181
 				requests[UP].delete(floorNum);
171 182
 				requests[DOWN].delete(floorNum);
172 183
 
173
-				sendToNext(elevator, destinations, requests, restFloors);
184
+				sendToNext(elevators, elevatorIndex, destinations, requests, restFloors);
174 185
 			});
175 186
 		});
176 187
 	},

Loading…
Cancel
Save