internal EmergencyHullPaintingRobot(string input) { _brain = new IntComputer(input, true); _currentPosition = new Point(0, 0); _currentDirection = MachineDirection.Up; _paintedPanels = new Dictionary <Point, ConsoleColor>(); }
/// <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; } }