private void OnButtonPushed(object sender, ElevatorControllerEventArgs e)
{
requestsQueue.AddLast(e.Floor);
SetDirection();
}
private void MoveElevator()
{
while (requestsQueue.Count > 0)
{
if (requestsQueue.Contains(currentFloor))
{
requestsQueue.Remove(currentFloor);
controller.Stop();
}
else if (isMovingUp)
{
currentFloor++;
controller.MoveUp();
}
else
{
currentFloor--;
controller.MoveDown();
}
SetDirection();
}
}
private void SetDirection()
{
LinkedList<int> requestsGoingUp = GetAllRequestsAboveCurrentFloor(requestsQueue, currentFloor);
LinkedList<int> requestsGoingDown = GetAllRequestsBelowCurrentFloor(requestsQueue, currentFloor);
if (currentFloor == topFloor || requestsGoingUp.Count == 0)
{
isMovingUp = false;
}
else if (currentFloor == 1 || requestsGoingDown.Count == 0)
{
isMovingUp = true;
}
MoveElevator();
}
private void OnButtonPushed(object sender, ElevatorControllerEventArgs e)
{
requestsQueue.AddLast(e.Floor);
SetDirection();
}
private void MoveElevator()
{
while (requestsQueue.Count > 0)
{
if (requestsQueue.Contains(currentFloor))
{
requestsQueue.Remove(currentFloor);
controller.Stop();
}
else if (isMovingUp)
{
currentFloor++;
controller.MoveUp();
}
else
{
currentFloor--;
controller.MoveDown();
}
SetDirection();
}
}
private void SetDirection()
{
LinkedList<int> requestsGoingUp = GetAllRequestsAboveCurrentFloor(requestsQueue, currentFloor);
LinkedList<int> requestsGoingDown = GetAllRequestsBelowCurrentFloor(requestsQueue, currentFloor);
if (currentFloor == topFloor || requestsGoingUp.Count == 0)
{
isMovingUp = false;
}
else if (currentFloor == 1 || requestsGoingDown.Count == 0)
{
isMovingUp = true;
}
MoveElevator();
}