]> git.mxchange.org Git - flightgear.git/blobdiff - src/Traffic/Schedule.cxx
Merge branch 'tat/configure' into next
[flightgear.git] / src / Traffic / Schedule.cxx
index 4da19764428f54e0c9b09eff7ff19405018b97cd..b5297301a1470ae71fefc783b5079a8f28ab294a 100644 (file)
@@ -194,9 +194,7 @@ bool FGAISchedule::update(time_t now)
 
   FGAIManager *aimgr;
   string airport;
-  
-  double courseToUser,   courseToDest;
-  double distanceToDest;
+
   double speed;
 
   time_t 
@@ -215,7 +213,7 @@ bool FGAISchedule::update(time_t now)
     //cerr << "About to find a flight " << endl;
     if (flights.empty()) {
         //execute this loop at least once. 
-        SG_LOG(SG_GENERAL, SG_INFO, "Scheduling for : " << modelPath << " " <<  registration << " " << homePort);
+        SG_LOG(SG_GENERAL, SG_BULK, "Scheduling for : " << modelPath << " " <<  registration << " " << homePort);
         FGScheduledFlight *flight = 0;
          do {
             flight = findAvailableFlight(currentDestination, flightIdentifier);
@@ -229,7 +227,7 @@ bool FGAISchedule::update(time_t now)
 
                 depT = depT.substr(0,24);
                 arrT = arrT.substr(0,24);
-                SG_LOG(SG_GENERAL, SG_INFO, "  " << flight->getCallSign() << ":" 
+                SG_LOG(SG_GENERAL, SG_BULK, "  " << flight->getCallSign() << ":" 
                                          << "  " << flight->getDepartureAirport()->getId() << ":"
                                          << "  " << depT << ":"
                                          << " \"" << flight->getArrivalAirport()->getId() << "\"" << ":"
@@ -237,7 +235,7 @@ bool FGAISchedule::update(time_t now)
             flights.push_back(flight);
             }
         } while ((currentDestination != homePort) && (flight != 0));
-        SG_LOG(SG_GENERAL, SG_INFO, cerr << " Done " << endl);
+        SG_LOG(SG_GENERAL, SG_BULK, cerr << " Done " << endl);
     }
     //cerr << " Done " << endl;
    // No flights available for this aircraft
@@ -341,7 +339,7 @@ bool FGAISchedule::update(time_t now)
          //cout << "a = " << a[0] << " " << a[1] << " " << a[2] 
          //     << "b = " << b[0] << " " << b[1] << " " << b[2] << endl;  
           sgdMat4 matrix;
-         sgdMakeRotMat4(matrix, angle, _cross.sg()); 
+         sgdMakeRotMat4(matrix, angle, _cross.data()); 
           SGVec3d newPos(0, 0, 0);
          for(int j = 0; j < 3; j++)
            {
@@ -351,38 +349,21 @@ bool FGAISchedule::update(time_t now)
                }
            }
          
+    SGGeod current;
          if (now > (*i)->getDepartureTime())
            {
-              SGGeoc geoc = SGGeoc::fromCart(newPos);
-             lat = geoc.getLatitudeDeg();
-             lon = geoc.getLongitudeDeg(); 
+        current = SGGeod::fromCart(newPos);
            }
          else
            {
-             lat = dep->getLatitude();
-             lon = dep->getLongitude();
-           }
-         
+             current = dep->geod();
+      }
          
-         SGWayPoint current  (lon,
-                              lat,
-                              (*i)->getCruiseAlt(), 
-                              SGWayPoint::SPHERICAL);
-         SGWayPoint user (   userLongitude,
-                             userLatitude,
-                             (*i)->getCruiseAlt(), 
-                             SGWayPoint::SPHERICAL);
-         SGWayPoint dest (   arr->getLongitude(),
-                             arr->getLatitude(),
-                             (*i)->getCruiseAlt(), 
-                             SGWayPoint::SPHERICAL);
-         // We really only need distance to user
-         // and course to destination 
-         user.CourseAndDistance(current, &courseToUser, &distanceToUser);
-         dest.CourseAndDistance(current, &courseToDest, &distanceToDest);
-         speed =  (distanceToDest*SG_METER_TO_NM) / 
+    SGGeod user = SGGeod::fromDegM(userLongitude, userLatitude, (*i)->getCruiseAlt());
+    speed = SGGeodesy::distanceNm(current, arr->geod()) / 
            ((double) remainingTimeEnroute/3600.0);
-         
+    
+    distanceToUser = SGGeodesy::distanceNm(current, user);
 
          // If distance between user and simulated aircaft is less
          // then 500nm, create this flight. At jet speeds 500 nm is roughly
@@ -390,8 +371,8 @@ bool FGAISchedule::update(time_t now)
          // to start a more detailed simulation of this aircraft.
          SG_LOG (SG_GENERAL, SG_DEBUG, "Traffic manager: " << registration << " is scheduled for a flight from " 
             << dep->getId() << " to " << arr->getId() << ". Current distance to user: " 
-             << distanceToUser*SG_METER_TO_NM);
-         if ((distanceToUser*SG_METER_TO_NM) < TRAFFICTOAIDISTTOSTART)
+             << distanceToUser);
+         if (distanceToUser < TRAFFICTOAIDISTTOSTART)
            {
              string flightPlanName = dep->getId() + string("-") + arr->getId() + 
                string(".xml");
@@ -427,6 +408,8 @@ bool FGAISchedule::update(time_t now)
                  aircraft->setAltitude((*i)->getCruiseAlt()*100); // convert from FL to feet
                  aircraft->setSpeed(speed);
                  aircraft->setBank(0);
+      
+      courseToDest = SGGeodesy::courseDeg(current, arr->geod());
                  aircraft->SetFlightPlan(new FGAIFlightPlan(aircraft, flightPlanName, courseToDest, deptime, 
                                                             dep, arr,true, radius, 
                                                             (*i)->getCruiseAlt()*100,