-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
143 lines (115 loc) · 4.27 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
const handleLogicperLift = 0;
let liftState = [];
let number = 1;
let count = 0;
let finalLever = 5665;
let nearestLiftIndex = -1;
let lastLift=1;
let i=0;
let totalLifts=0,totalFloors=0;
const handleMovement = (floorcalled, buttonPressed) => {
if (number > totalLifts)
number = 1;
for (let i = 0; i < liftState.length; i++) {
if (liftState[i].currentFloor === floorcalled && liftState[i].direction === buttonPressed) {
liftMovementTrack(i+1, "moving", floorcalled, `${buttonPressed}`)
liftOpen(i+1);
setTimeout(() => {
liftMovementTrack(i+1, "idle", floorcalled, `${buttonPressed}`);
liftClose(i+1);
}, 2000);
return;
}
}
const desiredElevator =nearestElevator(floorcalled,buttonPressed);
const lifts = document.querySelector(`.elevators`);
const singleLift = lifts.querySelector(`[id="${desiredElevator}"]`);
const currentLiftNumber = desiredElevator;
singleLift.addEventListener('click', liftMovementTrack(currentLiftNumber, "moving", floorcalled, `${buttonPressed}`));
singleLift.style.transform = `translateY(-${floorcalled * 100}px)`;
singleLift.style.transition = `transform 2s ease`;
setTimeout(() => {
liftMovementTrack(currentLiftNumber, "idle", floorcalled, `${buttonPressed}`);
liftOpen(currentLiftNumber);
setTimeout(()=>{
liftClose(currentLiftNumber)
},2000);
}, 2000);
};
const liftMovementTrack = (liftnumber, state, currentFloor, buttonPressed) => {
console.log(`updating for lift number ${liftnumber}`);
const updatedLift = liftState.map((lift) => {
if (lift.id === liftnumber) {
return {
...lift,
state: state,
currentFloor: currentFloor,
direction: buttonPressed,
};
}
return lift;
});
liftState = updatedLift;
console.log(updatedLift);
};
const nearestElevator=(floorcalled,buttonPressed)=>{
let nearestLift = null;
let minDistance = 1000;
for (let i = 0; i < liftState.length; i++) {
if (liftState[i].state=="idle"){
const distance = Math.abs(liftState[i].currentFloor - floorcalled);
if(distance<minDistance){
minDistance=distance;
nearestLift=i+1;
}
}
}
return nearestLift;
}
const liftOpen=(currentLiftNumber)=>{
console.log(currentLiftNumber);
const opendoor=document.querySelectorAll('.left');
opendoor[currentLiftNumber-1].style.width='99px';
}
const liftClose=(currentLiftNumber)=>{
console.log(currentLiftNumber);
const opendoor=document.querySelectorAll('.left');
opendoor[currentLiftNumber-1].style.width='1px';
}
document.getElementById("liftForm").onsubmit = function(event) {
if(count>0)
return;
count++;
event.preventDefault();
const numLifts = document.querySelector(".NofLifts").value;
const numFloors = document.querySelector(".NofFloors").value;
totalLifts = parseInt(numLifts, 10);
totalFloors =parseInt(numFloors, 10);
[...Array(totalLifts)].forEach((e, index) => {
const eachliftDetail = {
id: index + 1,
state: "idle",
currentFloor: 0,
direction: "",
};
liftState.push(eachliftDetail);
});
const newFloors = document.querySelector('.space');
for (let i = numFloors; i > 0; i--) {
const newElement = document.createElement('div');
newElement.innerHTML = `
<div class="perFloor" id=${i}>
<button id=${i} class="upButton" onclick="handleMovement(${i},'upButton')">UP</button>
<button class="downButton" onclick="handleMovement(${i},'downButton')">DOWN</button>
<div>Floor Number: ${i}</div>
<div class="line"></div>
</div>`;
newFloors.appendChild(newElement);
}
const newLifts = document.querySelector('.elevators');
for (let i = 1; i <= totalLifts; i++) {
const newElement = document.createElement('div');
newElement.innerHTML = `<div class="box" id=${i}><div class="left"></div></div>`;
newLifts.appendChild(newElement);
}
};