示例#1
0
        private void OnRequestNoLongerActual(ElevatorController.Request request, ElevatorController elevator)
        {
            if (this.elevator != elevator)
            {
                return;
            }

            DisactivateBtn(request.FloorNum);
        }
示例#2
0
        public void OnGoalFloorReached(ElevatorController.Request request, ElevatorController elevator)
        {
            if (this.elevator != elevator)
            {
                return;
            }

            DisactivateBtn(request.FloorNum);
        }
示例#3
0
        private void OnElevatorReachGoalFloor(ElevatorController.Request request, ElevatorController elevator)
        {
            if (this.elevator != elevator)
            {
                return;
            }

            visitedFloors.Add(request.FloorNum);
        }
示例#4
0
    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]);
    }
示例#5
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);
    }
示例#6
0
        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();
            }
        }
示例#7
0
 private void OnRequestNoLongerActual(ElevatorController.Request request, ElevatorController elevator)
 {
     SetBtnsState(request);
 }
示例#8
0
 private void OnGoalFloorReached(ElevatorController.Request request, ElevatorController elevator)
 {
     SetBtnsState(request);
 }