#pragma config(Sensor, S1, LftLht, sensorCOLORRED)
#pragma config(Sensor, S2, LftSnr, sensorSONAR)
#pragma config(Sensor, S3, RhtLht, sensorLightActive)
#pragma config(Sensor, S4, RhtSnr, sensorSONAR)
#pragma config(Motor, motorA, LeftMtr, tmotorNormal, PIDControl, encoder)
#pragma config(Motor, motorB, CenterMtr, tmotorNormal, PIDControl, encoder)
#pragma config(Motor, motorC, RightMtr, tmotorNormal, PIDControl, encoder)

task main()
{
  bool TurnDirection = false;

  char StartingMovement;

  nNxtExitClicks = 2;

  while(nNxtButtonPressed == kNoButton);

  if(nNxtButtonPressed == kLeftButton) StartingMovement = 'L';
  else if(nNxtButtonPressed == kRightButton) StartingMovement = 'R';
  else if(nNxtButtonPressed == kExitButton) StartingMovement = 'B';

  int LftLhtThres = SensorValue(LftLht) + 6;
  int RhtLhtThres = SensorValue(RhtLht) + 6;

  while(nNxtButtonPressed != kEnterButton);

  wait1Msec(5000);

  switch(StartingMovement)
  {
    case 'R':
      motor[LeftMtr] = -100;
      motor[RightMtr] = 100;

      wait1Msec(300);
    break;
    case 'L':
      motor[LeftMtr] = 100;
      motor[RightMtr] = -100;

      wait1Msec(300);
    break;
    case 'B':
      motor[LeftMtr] = -100;
      motor[RightMtr] = 100;

      wait1Msec(600);
    break;
  }

  motor[LeftMtr] = 0;
  motor[RightMtr] = 0;

  while(true)
  {
    if(SensorValue(LftSnr) <= 40 && SensorValue(RhtSnr) <= 40)
    {
      for(int x = 0; x <= 60; x++)
      {
        motor[LeftMtr] = x;
        motor[CenterMtr] = x;
        motor[RightMtr] = x;

        wait1Msec(2);
      }

      while(SensorValue(LftLht) <= LftLhtThres && SensorValue(RhtLht) <= RhtLhtThres);

      for(int x = 0; x <= 80; x++)
      {
        motor[LeftMtr] = -x;
        motor[CenterMtr] = -x;
        motor[RightMtr] = -x;

        wait1Msec(2);
      }

      wait1Msec(700);
    }

    motor[LeftMtr] = 0;
    motor[CenterMtr] = 40;
    motor[RightMtr] = 80;
  }
}
