public void Arrived()
 {
     if (state == 0)
     {
         driveSystem.Unload();
     }
     else if (state == 1)
     {
         driveSystem.DriveTo(motor.StartPos);
         state = 2;
     }
     else
     {
         motor.LoadParcel();
         state = 0;
         Position p;
         if (useManualGoal)
         {
             p = manualTarget;
         }
         else
         {
             do
             {
                 p.x = random.Next(0, GridLoader.grid.Width / 3 - 3);
                 p.y = random.Next(0, GridLoader.grid.Height / 3 - 3);
                 p.x = 5 + p.x * 3;
                 p.y = 6 + p.y * 3;
             } while (!GridLoader.grid.IsTileFree(p));
         }
         currentTarget = p;
         driveSystem.DriveTo(p);
     }
 }