|
|
@@ -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
|
},
|