internal EmergencyHullPaintingRobot(string input)
 {
     _brain            = new IntComputer(input, true);
     _currentPosition  = new Point(0, 0);
     _currentDirection = MachineDirection.Up;
     _paintedPanels    = new Dictionary <Point, ConsoleColor>();
 }
Esempio n. 2
0
        /// <summary>
        /// Converts the machine direction indicated by Value into a forwards or reverse gear, and injects it into the machine gear events list
        /// </summary>
        /// <param name="Value"></param>
        public override void SetMachineDirection(MachineDirection Value)
        {
            base.SetMachineDirection(Value);

            if (GearValueReceived)
            {
                return;
            }

            MachineGear Gear = MachineGear.Null;

            if (Value == MachineDirection.Forward)
            {
                Gear = MachineGear.Forward;
            }
            else if (Value == MachineDirection.Reverse)
            {
                Gear = MachineGear.Reverse;
            }

            if (_DataTime != Consts.MIN_DATETIME_AS_UTC && (Gear == MachineGear.Forward || Gear == MachineGear.Reverse))
            {
                MachineTargetValueChangesAggregator.MachineGearStateEvents.PutValueAtDate(_DataTime, Gear);
            }
            //else
            //{
            //{$IFDEF DENSE_TAG_FILE_LOGGING}
            //SIGLogProcessMessage.Publish(Self, '_DataTime = 0 or Gear not Forward/Reverse in SetMachineDirection', slpmcDebug);
            //{$ENDIF}
            //}
        }
        private void Move(long direction)
        {
            if (direction == 0) //Left
            {
                switch (_currentDirection)
                {
                case MachineDirection.Up:
                    _currentDirection = MachineDirection.Left;
                    break;

                case MachineDirection.Right:
                    _currentDirection = MachineDirection.Up;
                    break;

                case MachineDirection.Down:
                    _currentDirection = MachineDirection.Right;
                    break;

                case MachineDirection.Left:
                    _currentDirection = MachineDirection.Down;
                    break;
                }
            }
            else if (direction == 1) //Right
            {
                switch (_currentDirection)
                {
                case MachineDirection.Up:
                    _currentDirection = MachineDirection.Right;
                    break;

                case MachineDirection.Right:
                    _currentDirection = MachineDirection.Down;
                    break;

                case MachineDirection.Down:
                    _currentDirection = MachineDirection.Left;
                    break;

                case MachineDirection.Left:
                    _currentDirection = MachineDirection.Up;
                    break;
                }
            }

            switch (_currentDirection)
            {
            case MachineDirection.Up:
                _currentPosition = new Point(_currentPosition.X, _currentPosition.Y - 1);
                break;

            case MachineDirection.Right:
                _currentPosition = new Point(_currentPosition.X + 1, _currentPosition.Y);
                break;

            case MachineDirection.Down:
                _currentPosition = new Point(_currentPosition.X, _currentPosition.Y + 1);
                break;

            case MachineDirection.Left:
                _currentPosition = new Point(_currentPosition.X - 1, _currentPosition.Y);
                break;
            }
        }