private void OnRequestNoLongerActual(ElevatorController.Request request, ElevatorController elevator) { if (this.elevator != elevator) { return; } DisactivateBtn(request.FloorNum); }
public void OnGoalFloorReached(ElevatorController.Request request, ElevatorController elevator) { if (this.elevator != elevator) { return; } DisactivateBtn(request.FloorNum); }
private void OnElevatorReachGoalFloor(ElevatorController.Request request, ElevatorController elevator) { if (this.elevator != elevator) { return; } visitedFloors.Add(request.FloorNum); }
private ElevatorController GetClosestElevator(ElevatorController.Request request, ElevatorController elevator) { sameDirAndIdleElevators.Clear(); otherElevators.Clear(); for (int i = 0; i < elevators.Length; i++) { var el = elevators[i]; if (el.IsRequestExists(request)) { return(null); } if (el.IsIdle || el.MovingDirection == request.Direction) { sameDirAndIdleElevators.Add(el); continue; } otherElevators.Add(el); } if (sameDirAndIdleElevators.Count > 0) { sameDirAndIdleElevators.Sort((a, b) => Mathf.Abs(a.CurrFloorNum - request.FloorNum).CompareTo(Mathf.Abs(b.CurrFloorNum - request.FloorNum))); var bestElevator = sameDirAndIdleElevators[0]; var minDist = int.MaxValue; for (int i = 0; i < sameDirAndIdleElevators.Count; ++i) { var el = sameDirAndIdleElevators[i]; if (el.CurrFloorNum != bestElevator.CurrFloorNum) { break; } var dist = Mathf.Abs(el.Id - elevator.Id); if (dist < minDist) { minDist = dist; bestElevator = el; } } return(bestElevator); } otherElevators.Sort((a, b) => a.RequestsCount.CompareTo(b.RequestsCount)); return(otherElevators[0]); }
public void AddRequest(int desiredFloorNum, ElevatorDirection desiredDirection, ElevatorController elevator) { var request = new ElevatorController.Request(desiredDirection, desiredFloorNum); var closestElevator = GetClosestElevator(request, elevator); if (closestElevator == null) { return; } closestElevator.AddRequest(desiredFloorNum, desiredDirection); }
private void SetBtnsState(ElevatorController.Request request) { if (request.FloorNum != Num) { return; } if (request.Direction == ElevatorDirection.up) { btnUp.SetDefaultColor(); } if (request.Direction == ElevatorDirection.down) { btnDown.SetDefaultColor(); } }
private void OnRequestNoLongerActual(ElevatorController.Request request, ElevatorController elevator) { SetBtnsState(request); }
private void OnGoalFloorReached(ElevatorController.Request request, ElevatorController elevator) { SetBtnsState(request); }