예제 #1
0
    public void StopLift()
    {
        StopAllCoroutines();
        _liftDirection = Direction.Stopped;

        SelectionController.DeselectAllFloors();
        SelectionController.DeselectAllArrows();

        OpenDoors();
    }
예제 #2
0
    public void SetNextFloor(int Floor, Command CommandSource, Direction CallDirection = Direction.Stopped)
    {
        Direction NewDirection = Direction.Stopped;

        switch (CommandSource)
        {
        case Command.FromOutside:
        {
            NewDirection = CallDirection;
            break;
        }

        case Command.FromInside:
        {
            int DirectionSign = Floor - _currentFloor;

            if (DirectionSign > 0)
            {
                NewDirection   = Direction.Up;
                _liftDirection = NewDirection;
            }
            else if (DirectionSign < 0)
            {
                NewDirection   = Direction.Down;
                _liftDirection = NewDirection;
            }
            break;
        }
        }


        bool InsideCall = (CommandSource == Command.FromInside);

        bool StoppedLift = (_liftDirection == Direction.Stopped);

        bool PermittedUpCall = (NewDirection == _liftDirection) && (NewDirection == Direction.Up) && (Floor >= _currentFloor);

        bool PermittedDownCall = (NewDirection == _liftDirection) && (NewDirection == Direction.Down) && (Floor <= _currentFloor);

        if (InsideCall || StoppedLift || PermittedUpCall || PermittedDownCall)
        {
            GoToFloor(Floor, NewDirection);
        }
        else
        {
            SelectionController.DeselectAllArrows();
        }
    }