]> git.mxchange.org Git - flightgear.git/blobdiff - src/AIModel/AIFlightPlanCreate.cxx
warnings--
[flightgear.git] / src / AIModel / AIFlightPlanCreate.cxx
index 9a2b81561fb7434a1c4c7b5863ed1e009c6a2253..2c6646d85a2cc84a54f733146fcb387a6b6f16d4 100644 (file)
@@ -185,13 +185,13 @@ void FGAIFlightPlan::createTaxi(bool firstFlight, int direction,
                                double radius, const string& fltType, 
                                const string& acType, const string& airline)
 {
-  double wind_speed;
-  double wind_heading;
   double heading;
-  double lat, lon, az;
+  double lat, lon;
   double lat2, lon2, az2;
   waypoint *wpt;
 
+  int nrWaypointsToSkip;
+
    if (direction == 1)
     {
       // If this function is called during initialization,
@@ -256,15 +256,18 @@ void FGAIFlightPlan::createTaxi(bool firstFlight, int direction,
          // fallback mechanism for this. 
          // Starting from gate 0 in this case is a bit of a hack
          // which requires a more proper solution later on.
-         FGTaxiRoute route;
+         //FGTaxiRoute route;
+         if (taxiRoute)
+           delete taxiRoute;
+         taxiRoute = new FGTaxiRoute;
          if (gateId >= 0)
-           route = apt->getDynamics()->getGroundNetwork()->findShortestRoute(gateId, 
+           *taxiRoute = apt->getDynamics()->getGroundNetwork()->findShortestRoute(gateId, 
                                                                              runwayId);
          else
-           route = apt->getDynamics()->getGroundNetwork()->findShortestRoute(0, runwayId);
+           *taxiRoute = apt->getDynamics()->getGroundNetwork()->findShortestRoute(0, runwayId);
          intVecIterator i;
         
-         if (route.empty()) {
+         if (taxiRoute->empty()) {
            //Add the runway startpoint;
            wpt = new waypoint;
            wpt->name      = "Airport Center";
@@ -294,34 +297,35 @@ void FGAIFlightPlan::createTaxi(bool firstFlight, int direction,
            waypoints.push_back(wpt);   
          } else {
            int node;
-           route.first();
+           taxiRoute->first();
            bool isPushBackPoint = false;
            if (firstFlight) {
              // If this is called during initialization, randomly
              // skip a number of waypoints to get a more realistic
              // taxi situation.
              isPushBackPoint = true;
-             int nrWaypoints = route.size();
-             int nrWaypointsToSkip = rand() % nrWaypoints;
+             int nrWaypoints = taxiRoute->size();
+             nrWaypointsToSkip = rand() % nrWaypoints;
              // but make sure we always keep two active waypoints
              // to prevent a segmentation fault
              for (int i = 0; i < nrWaypointsToSkip-2; i++) {
                isPushBackPoint = false;
-               route.next(&node);
+               taxiRoute->next(&node);
              }
            }
            else {
              //chop off the first two waypoints, because
              // those have already been created
              // by create pushback
-             int size = route.size();
+             int size = taxiRoute->size();
              if (size > 2) {
-               route.next(&node);
-               route.next(&node);
+               taxiRoute->next(&node);
+               taxiRoute->next(&node);
              }
            }
-           while(route.next(&node))
+           while(taxiRoute->next(&node))
              {
+               //FGTaxiNode *tn = apt->getDynamics()->getGroundNetwork()->findSegment(node)->getEnd();
                FGTaxiNode *tn = apt->getDynamics()->getGroundNetwork()->findNode(node);
                //ids.pop_back();  
                wpt = new waypoint;
@@ -345,7 +349,20 @@ void FGAIFlightPlan::createTaxi(bool firstFlight, int direction,
                wpt->on_ground = true;
                waypoints.push_back(wpt);
              }
-           cerr << endl;
+           //cerr << endl;
+           // finally, rewind the taxiRoute object to the point where we started
+           taxiRoute->first();
+           if (firstFlight) { 
+             for (int i = 0; i < nrWaypointsToSkip-2; i++) {
+               taxiRoute->next(&node);
+             }
+           } else {
+             int size = taxiRoute->size();
+             if (size > 2) {
+               taxiRoute->next(&node);
+               taxiRoute->next(&node);
+             }
+           }
          }
        }
       else 
@@ -399,16 +416,19 @@ void FGAIFlightPlan::createTaxi(bool firstFlight, int direction,
          // A negative gateId indicates an overflow parking, use a
          // fallback mechanism for this. 
          // Starting from gate 0 is a bit of a hack...
-         FGTaxiRoute route;
+         //FGTaxiRoute route;
+         if (taxiRoute)
+           delete taxiRoute;
+         taxiRoute = new FGTaxiRoute;
          if (gateId >= 0)
-           route = apt->getDynamics()->getGroundNetwork()->findShortestRoute(runwayId, 
+           *taxiRoute = apt->getDynamics()->getGroundNetwork()->findShortestRoute(runwayId, 
                                                                              gateId);
          else
-           route = apt->getDynamics()->getGroundNetwork()->findShortestRoute(runwayId, 0);
+           *taxiRoute = apt->getDynamics()->getGroundNetwork()->findShortestRoute(runwayId, 0);
          intVecIterator i;
         
          // No route found: go from gate directly to runway
-         if (route.empty()) {
+         if (taxiRoute->empty()) {
            //Add the runway startpoint;
            wpt = new waypoint;
            wpt->name      = "Airport Center";
@@ -426,8 +446,8 @@ void FGAIFlightPlan::createTaxi(bool firstFlight, int direction,
            //Add the runway startpoint;
            wpt = new waypoint;
            wpt->name      = "Runway Takeoff";
-           wpt->latitude  = lat2;
-           wpt->longitude = lon2;
+           wpt->latitude  = lat3;
+           wpt->longitude = lon3;
            wpt->altitude  = apt->getElevation();
            wpt->speed     = 15; 
            wpt->crossat   = -10000;
@@ -438,13 +458,14 @@ void FGAIFlightPlan::createTaxi(bool firstFlight, int direction,
            waypoints.push_back(wpt);   
          } else {
            int node;
-           route.first();
-           int size = route.size();
+           taxiRoute->first();
+           int size = taxiRoute->size();
            // Omit the last two waypoints, as 
            // those are created by createParking()
            for (int i = 0; i < size-2; i++)
              {
-               route.next(&node);
+               taxiRoute->next(&node);
+               //FGTaxiNode *tn = apt->getDynamics()->getGroundNetwork()->findNode(node);
                FGTaxiNode *tn = apt->getDynamics()->getGroundNetwork()->findNode(node);
                wpt = new waypoint;
                wpt->name      = "taxiway"; // fixme: should be the name of the taxiway
@@ -529,8 +550,6 @@ void FGAIFlightPlan::createTaxi(bool firstFlight, int direction,
  ******************************************************************/
 void FGAIFlightPlan::createTakeOff(bool firstFlight, FGAirport *apt, double speed)
 {
-  double wind_speed;
-  double wind_heading;
   double heading;
   double lat, lon, az;
   double lat2, lon2, az2;
@@ -604,11 +623,8 @@ void FGAIFlightPlan::createTakeOff(bool firstFlight, FGAirport *apt, double spee
  ******************************************************************/
 void FGAIFlightPlan::createClimb(bool firstFlight, FGAirport *apt, double speed, double alt)
 {
-  double wind_speed;
-  double wind_heading;
   double heading;
   //FGRunway rwy;
-  double lat, lon, az;
   double lat2, lon2, az2;
   //int direction;
   waypoint *wpt;
@@ -636,6 +652,7 @@ void FGAIFlightPlan::createClimb(bool firstFlight, FGAirport *apt, double speed,
   heading = rwy._heading;
   double azimuth = heading + 180.0;
   while ( azimuth >= 360.0 ) { azimuth -= 360.0; }
+  //cerr << "Creating climb at : " << rwy._id << " " << rwy._rwy_no << endl;
   geo_direct_wgs_84 ( 0, rwy._lat, rwy._lon, heading, 
                      10*SG_NM_TO_METER,
                      &lat2, &lon2, &az2 );
@@ -671,69 +688,69 @@ void FGAIFlightPlan::createClimb(bool firstFlight, FGAirport *apt, double speed,
 }
 
 
-/*******************************************************************
- * CreateCruise
- * initialize the Aircraft at the parking location
- ******************************************************************/
-void FGAIFlightPlan::createCruise(bool firstFlight, FGAirport *dep, 
-                                 FGAirport *arr, double latitude, 
-                                 double longitude, double speed, 
-                                 double alt)
-{
-  double wind_speed;
-  double wind_heading;
-  double heading;
-  double lat, lon, az;
-  double lat2, lon2, az2;
-  double azimuth;
-  waypoint *wpt;
+// /*******************************************************************
+//  * CreateCruise
+//  * initialize the Aircraft at the parking location
+//  ******************************************************************/
+// void FGAIFlightPlan::createCruise(bool firstFlight, FGAirport *dep, 
+//                               FGAirport *arr, double latitude, 
+//                               double longitude, double speed, 
+//                               double alt)
+// {
+//   double wind_speed;
+//   double wind_heading;
+//   double heading;
+//   double lat, lon, az;
+//   double lat2, lon2, az2;
+//   double azimuth;
+//   waypoint *wpt;
 
-  wpt = new waypoint;
-  wpt->name      = "Cruise"; //wpt_node->getStringValue("name", "END");
-  wpt->latitude  = latitude;
-  wpt->longitude = longitude;
-  wpt->altitude  = alt;
-  wpt->speed     = speed; 
-  wpt->crossat   = -10000;
-  wpt->gear_down = false;
-  wpt->flaps_down= false;
-  wpt->finished  = false;
-  wpt->on_ground = false;
-  waypoints.push_back(wpt); 
+//   wpt = new waypoint;
+//   wpt->name      = "Cruise"; //wpt_node->getStringValue("name", "END");
+//   wpt->latitude  = latitude;
+//   wpt->longitude = longitude;
+//   wpt->altitude  = alt;
+//   wpt->speed     = speed; 
+//   wpt->crossat   = -10000;
+//   wpt->gear_down = false;
+//   wpt->flaps_down= false;
+//   wpt->finished  = false;
+//   wpt->on_ground = false;
+//   waypoints.push_back(wpt); 
   
  
-  // should be changed dynamically to allow "gen" and "mil"
-  arr->getDynamics()->getActiveRunway("com", 2, activeRunway);
-  if (!(globals->get_runways()->search(arr->getId(), 
-                                      activeRunway, 
-                                      &rwy)))
-    {
-      SG_LOG(SG_INPUT, SG_ALERT, "Failed to find runway " << 
-            activeRunway << 
-            " at airport     " << arr->getId());
-      exit(1);
-    }
-  heading = rwy._heading;
-  azimuth = heading + 180.0;
-  while ( azimuth >= 360.0 ) { azimuth -= 360.0; }
+//   // should be changed dynamically to allow "gen" and "mil"
+//   arr->getDynamics()->getActiveRunway("com", 2, activeRunway);
+//   if (!(globals->get_runways()->search(arr->getId(), 
+//                                    activeRunway, 
+//                                    &rwy)))
+//     {
+//       SG_LOG(SG_INPUT, SG_ALERT, "Failed to find runway " << 
+//          activeRunway << 
+//          " at airport     " << arr->getId());
+//       exit(1);
+//     }
+//   heading = rwy._heading;
+//   azimuth = heading + 180.0;
+//   while ( azimuth >= 360.0 ) { azimuth -= 360.0; }
   
   
-  geo_direct_wgs_84 ( 0, rwy._lat, rwy._lon, azimuth, 
-                     110000,
-                     &lat2, &lon2, &az2 );
-  wpt = new waypoint;
-  wpt->name      = "BOD";
-  wpt->latitude  = lat2;
-  wpt->longitude = lon2;
-  wpt->altitude  = alt;
-  wpt->speed     = speed; 
-  wpt->crossat   = alt;
-  wpt->gear_down = false;
-  wpt->flaps_down= false;
-  wpt->finished  = false;
-  wpt->on_ground = false;
-  waypoints.push_back(wpt); 
-}
+//   geo_direct_wgs_84 ( 0, rwy._lat, rwy._lon, azimuth, 
+//                   110000,
+//                   &lat2, &lon2, &az2 );
+//   wpt = new waypoint;
+//   wpt->name      = "BOD";
+//   wpt->latitude  = lat2;
+//   wpt->longitude = lon2;
+//   wpt->altitude  = alt;
+//   wpt->speed     = speed; 
+//   wpt->crossat   = alt;
+//   wpt->gear_down = false;
+//   wpt->flaps_down= false;
+//   wpt->finished  = false;
+//   wpt->on_ground = false;
+//   waypoints.push_back(wpt); 
+// }
 
 /*******************************************************************
  * CreateDecent
@@ -743,11 +760,8 @@ void FGAIFlightPlan::createDecent(FGAirport *apt)
 {
 
   // Ten thousand ft. Slowing down to 240 kts
-  double wind_speed;
-  double wind_heading;
   double heading;
   //FGRunway rwy;
-  double lat, lon, az;
   double lat2, lon2, az2;
   double azimuth;
   //int direction;
@@ -811,11 +825,8 @@ void FGAIFlightPlan::createDecent(FGAirport *apt)
 void FGAIFlightPlan::createLanding(FGAirport *apt)
 {
   // Ten thousand ft. Slowing down to 150 kts
-  double wind_speed;
-  double wind_heading;
   double heading;
   //FGRunway rwy;
-  double lat, lon, az;
   double lat2, lon2, az2;
   double azimuth;
   //int direction;