]> git.mxchange.org Git - flightgear.git/commitdiff
Bugfixes and some finetuning:
authorDurk Talsma <durktals@gmail.com>
Mon, 2 Jan 2012 21:23:24 +0000 (22:23 +0100)
committerDurk Talsma <durktals@gmail.com>
Mon, 2 Jan 2012 21:23:24 +0000 (22:23 +0100)
* Pregenerating taxiroutes could interfere with runway assignments by ATC, when conditions changed, resulting in a taxi to one runway and a takeoff from another
* A simpler solution for the "Error in Traffic record bug". This still needs some more testing, but I haven't seen any error message anymore, since changing to the current code.
* Initialize AI traffic at speed zero, this should prevent some weirdness observed under boundary conditions.
* Don't activate groundnetwork proximity detection for pushback traffic until the "ready for startup message is transmitted. this should allow sufficient time for them to reserve a route, but a little more testing still needs to be done.

src/AIModel/AIFlightPlan.cxx
src/AIModel/AIFlightPlanCreate.cxx
src/AIModel/AIFlightPlanCreatePushBack.cxx
src/ATC/trafficcontrol.cxx
src/Airports/groundnetwork.cxx
src/Traffic/Schedule.cxx

index 09d1eb746548aab78c99373fb443caa093da37f2..21ad6f9ab119ecc78fdaba8611efb709be0d6da8 100644 (file)
@@ -243,98 +243,8 @@ FGAIFlightPlan::FGAIFlightPlan(FGAIAircraft *ac,
       isValid = create(ac, dep,arr, leg, alt, speed, lat, lon,
             firstLeg, radius, fltType, acType, airline, dist);
       wpt_iterator = waypoints.begin();
-      //cerr << "after create: " << (*wpt_iterator)->name << endl;
-      //leg++;
-      // Now that we have dynamically created a flight plan,
-      // we need to add some code that pops any waypoints already past.
-      //return;
     }
-  /*
-    waypoint* init_waypoint   = new waypoint;
-    init_waypoint->name       = string("initial position");
-    init_waypoint->latitude   = entity->latitude;
-    init_waypoint->longitude  = entity->longitude;
-    init_waypoint->altitude   = entity->altitude;
-    init_waypoint->speed      = entity->speed;
-    init_waypoint->crossat    = - 10000;
-    init_waypoint->gear_down  = false;
-    init_waypoint->flaps_down = false;
-    init_waypoint->finished   = false;
-    
-    wpt_vector_iterator i = waypoints.begin();
-    while (i != waypoints.end())
-    {
-      //cerr << "Checking status of each waypoint: " << (*i)->name << endl;
-       SGWayPoint first(init_waypoint->longitude, 
-                      init_waypoint->latitude, 
-                      init_waypoint->altitude);
-      SGWayPoint curr ((*i)->longitude, 
-                      (*i)->latitude, 
-                      (*i)->altitude);
-      double crse, crsDiff;
-      double dist;
-      curr.CourseAndDistance(first, &crse, &dist);
-      
-      dist *= SG_METER_TO_NM;
-      
-      // We're only interested in the absolute value of crsDiff
-      // wich should fall in the 0-180 deg range.
-      crsDiff = fabs(crse-course);
-      if (crsDiff > 180)
-       crsDiff = 360-crsDiff;
-      // These are the three conditions that we consider including
-      // in our flight plan:
-      // 1) current waypoint is less then 100 miles away OR
-      // 2) curren waypoint is ahead of us, at any distance
-     
-      if ((dist > 20.0) && (crsDiff > 90.0) && ((*i)->name != string ("EOF")))
-       {
-         //useWpt = false;
-         // Once we start including waypoints, we have to continue, even though
-         // one of the following way point would suffice. 
-         // so once is the useWpt flag is set to true, we cannot reset it to false.
-         //cerr << "Discarding waypoint: " << (*i)->name 
-         //   << ": Course difference = " << crsDiff
-         //  << "Course = " << course
-         // << "crse   = " << crse << endl;
-       }
-      else
-       useCurrentWayPoint = true;
-      
-      if (useCurrentWayPoint)
-       {
-         if ((dist > 100.0) && (useInitialWayPoint))
-           {
-             //pushBackWaypoint(init_waypoint);;
-             waypoints.insert(i, init_waypoint);
-             //cerr << "Using waypoint : " << init_waypoint->name <<  endl;
-           }
-         //if (useInitialWayPoint)
-         // {
-         //    (*i)->speed = dist; // A hack
-         //  }
-         //pushBackWaypoint( wpt );
-         //cerr << "Using waypoint : " << (*i)->name 
-         //  << ": course diff : " << crsDiff 
-         //   << "Course = " << course
-         //   << "crse   = " << crse << endl
-         //    << "distance      : " << dist << endl;
-         useInitialWayPoint = false;
-         i++;
-       }
-      else 
-       {
-         //delete wpt;
-         delete *(i);
-         i = waypoints.erase(i);
-         }
-         
-       }
-  */
-  //for (i = waypoints.begin(); i != waypoints.end(); i++)
-  //  cerr << "Using waypoint : " << (*i)->name << endl;
-  //wpt_iterator = waypoints.begin();
-  //cout << waypoints.size() << " waypoints read." << endl;
+
 }
 
 
index ba2f291741f151b010c5fdf5097f8770be6d30d3..5eb04f21bc395204e182b34edeb1ed254883f4b8 100644 (file)
@@ -63,11 +63,11 @@ bool FGAIFlightPlan::create(FGAIAircraft * ac, FGAirport * dep,
     case 1:
         retVal = createPushBack(ac, firstFlight, dep, latitude, longitude,
                                 radius, fltType, aircraftType, airline);
-        // Pregenerate the 
-        if (retVal) {
-            waypoints.back()->setName( waypoints.back()->getName() + string("legend")); 
-            retVal = createTakeoffTaxi(ac, false, dep, radius, fltType, aircraftType, airline);
-        }
+        // Pregenerate the taxi leg.
+        //if (retVal) {
+        //    waypoints.back()->setName( waypoints.back()->getName() + string("legend")); 
+        //    retVal = createTakeoffTaxi(ac, false, dep, radius, fltType, aircraftType, airline);
+        //}
         break;
     case 2:
         retVal =  createTakeoffTaxi(ac, firstFlight, dep, radius, fltType,
index b65333dd746b898e6d693c71d80ad1920700a8c5..708d71e1dac0f005f7dca76803b9c51393dfe820 100644 (file)
@@ -118,8 +118,8 @@ bool FGAIFlightPlan::createPushBack(FGAIAircraft *ac,
             pushBackRoute = parking->getPushBackRoute();
             int size = pushBackRoute->size();
             if (size < 2) {
-                SG_LOG(SG_AI, SG_WARN, "Push back route from gate " << gateId << " has only " << size << " nodes.");
-                SG_LOG(SG_AI, SG_WARN, "Using  " << pushBackNode);
+                SG_LOG(SG_AI, SG_ALERT, "Push back route from gate " << gateId << " has only " << size << " nodes.");
+                SG_LOG(SG_AI, SG_ALERT, "Using  " << pushBackNode);
             }
             pushBackRoute->first();
             while (pushBackRoute->next(&node, &rte))
index b919b0830b59d63c6d420b5f9df17ab40339d03b..a0a4d98d802816c610d16569d6923c213a2ddedf 100644 (file)
@@ -187,23 +187,18 @@ void FGTrafficRecord::setPositionAndIntentions(int pos,
     if (intentions.size()) {
         intVecIterator i = intentions.begin();
         if ((*i) != pos) {
-            SG_LOG(SG_ATC, SG_INFO,
-                   "Skipping repeated intention in FGTrafficRecord::setPositionAndIntentions at " << SG_ORIGIN);
-        } else {
-            intentions.erase(i);
+            SG_LOG(SG_ATC, SG_ALERT,
+                   "Error in FGTrafficRecord::setPositionAndIntentions at " << SG_ORIGIN);
         }
+        intentions.erase(i);
     } else {
         //FGAIFlightPlan::waypoint* const wpt= route->getCurrentWaypoint();
         int size = route->getNrOfWayPoints();
         //cerr << "Setting pos" << pos << " ";
         //cerr << "setting intentions ";
-        for (int i = 0; i < size; i++) {
+        for (int i = 2; i < size; i++) {
             int val = route->getRouteIndex(i);
-            //cerr << val<< " ";
-            if ((val) && (val != pos)) {        // NOTE THAAT THERES A PROBLEM WITH REPEATED INTENSIONS HERE.
-                intentions.push_back(val);
-                //cerr << "[set] ";
-            }
+            intentions.push_back(val);
         }
     }
 }
index 20d0a793de89d16ed4b341abe67383b2666f809e..bf4d24f7ddaff0df524cd9e3982952e203c180c6 100644 (file)
@@ -1522,7 +1522,7 @@ void FGGroundNetwork::update(double dt)
         i->setPriority(priority++);
         // in meters per second;
         double vTaxi = (i->getAircraft()->getPerformance()->vTaxi() * SG_NM_TO_METER) / 3600;
-        if (i->isActive(60)) {
+        if (i->isActive(0)) {
 
             // Check for all active aircraft whether it's current pos segment is
             // an opposite of one of the departing aircraft's intentions
index 85343db293fb8d605537eb8e2aea936ec8f06b6e..789631bd5cf68a73a7e891e844588ca8ebb2740b 100644 (file)
@@ -334,7 +334,7 @@ bool FGAISchedule::createAIAircraft(FGScheduledFlight* flight, double speedKnots
   aircraft->setLatitude(position.getLatitudeDeg());
   aircraft->setLongitude(position.getLongitudeDeg());
   aircraft->setAltitude(flight->getCruiseAlt()*100); // convert from FL to feet
-  aircraft->setSpeed(speedKnots);
+  aircraft->setSpeed(0);
   aircraft->setBank(0);
       
   courseToDest = SGGeodesy::courseDeg(position, arr->geod());
@@ -389,15 +389,10 @@ void FGAISchedule::scheduleFlights(time_t now)
     if (!flight) {
       break;
     }
-    //if (startingPort.empty()) {
-    //    startingPort = flight->getDepartureAirport()->getId();
-    //}
     currentDestination = flight->getArrivalAirport()->getId();
     //cerr << "Current destination " <<  currentDestination << endl;
     if (!initialized) {
         string departurePort = flight->getDepartureAirport()->getId();
-       //cerr << "Scheduled " << registration <<  " " << score << " for Flight " 
-       //     << flight-> getCallSign() << " from " << departurePort << " to " << currentDestination << endl;
         if (userPort == departurePort) {
             lastRun = 1;
             hits++;