public ElevatorService() { Overweight = false; StatisticMaker = new StatisticMaker(); }
public void MoveElevator() { if (!Elevator.ControlPanel.ClickedFloors.Contains(true) && ClickedFloors.Contains(true)) { for (int i = NumberOfFloors; i > 0; i--) { if (ClickedFloors[i - 1] == true) { if (i > Elevator.CurrentFloor) { if (CheckDirection() == Directions.Down) { RideDone?.Invoke(); FreeRideDone?.Invoke(); } Elevator.CurrentDirection = Directions.Up; } else if (i < Elevator.CurrentFloor) { if (CheckDirection() == Directions.Up) { RideDone?.Invoke(); FreeRideDone?.Invoke(); } Elevator.CurrentDirection = Directions.Down; } Elevator.CurrentFloor = i; ClickedFloors[i - 1] = false; Elevator.ControlPanel.ClickedFloors[i - 1] = false; ElevatorMove?.Invoke(i); break; } } } else if (Elevator.ControlPanel.ClickedFloors.Contains(true)) { if (CheckDirection() == Directions.None) { for (int i = NumberOfFloors; i > Elevator.CurrentFloor; i--) { if (Elevator.ControlPanel.ClickedFloors[i - 1] == true) { Elevator.CurrentDirection = Directions.Up; break; } } for (int i = 1; i < Elevator.CurrentFloor; i++) { if (Elevator.ControlPanel.ClickedFloors[i - 1] == true) { Elevator.CurrentDirection = Directions.Down; break; } } } if (CheckDirection() == Directions.Up) { bool GoOppositeWay = true; for (int i = Elevator.CurrentFloor; i <= NumberOfFloors; i++) { if (Elevator.ControlPanel.ClickedFloors[i - 1] == true) { Elevator.CurrentFloor = i; ClickedFloors[i - 1] = false; Elevator.ControlPanel.ClickedFloors[i - 1] = false; foreach (Passenger passenger in Passengers) { if (passenger.State == States.Riding) { passenger.InitialFloor = Elevator.CurrentFloor; UpdatePassengerData(); } } GoOppositeWay = false; ElevatorMove?.Invoke(i); break; } } if (GoOppositeWay == true) { Elevator.CurrentDirection = Directions.Down; //RideDone?.Invoke(); StatisticMaker.IncrementNumberOfFreeRides(); for (int i = Elevator.CurrentFloor; i > 0; i--) { if (Elevator.ControlPanel.ClickedFloors[i - 1] == true || ClickedFloors[i - 1] == true) { Elevator.CurrentFloor = i; ClickedFloors[i - 1] = false; Elevator.ControlPanel.ClickedFloors[i - 1] = false; foreach (Passenger passenger in Passengers) { if (passenger.State == States.Riding) { passenger.InitialFloor = Elevator.CurrentFloor; UpdatePassengerData(); } } ElevatorMove?.Invoke(i); break; } } } } else if (CheckDirection() == Directions.Down) { bool GoOppositeWay = true; for (int i = Elevator.CurrentFloor; i > 0; i--) { if (Elevator.ControlPanel.ClickedFloors[i - 1] == true || ClickedFloors[i - 1] == true) { Elevator.CurrentFloor = i; ClickedFloors[i - 1] = false; Elevator.ControlPanel.ClickedFloors[i - 1] = false; foreach (Passenger passenger in Passengers) { if (passenger.State == States.Riding) { passenger.InitialFloor = Elevator.CurrentFloor; UpdatePassengerData(); } } GoOppositeWay = false; ElevatorMove?.Invoke(i); break; } } if (GoOppositeWay == true) { Elevator.CurrentDirection = Directions.Up; RideDone?.Invoke(); for (int i = Elevator.CurrentFloor; i <= NumberOfFloors; i++) { if (Elevator.ControlPanel.ClickedFloors[i - 1] == true) { Elevator.CurrentFloor = i; ClickedFloors[i - 1] = false; Elevator.ControlPanel.ClickedFloors[i - 1] = false; foreach (Passenger passenger in Passengers) { if (passenger.State == States.Riding) { passenger.InitialFloor = Elevator.CurrentFloor; UpdatePassengerData(); } } GoOppositeWay = false; ElevatorMove?.Invoke(i); break; } } } } } }