]> git.mxchange.org Git - flightgear.git/commitdiff
#895: AI traffic not working when system is offline but real-wx is enabled
authorThorstenB <brehmt@gmail.com>
Wed, 14 Nov 2012 23:35:45 +0000 (00:35 +0100)
committerThorstenB <brehmt@gmail.com>
Thu, 15 Nov 2012 19:20:40 +0000 (20:20 +0100)
Add a timeout when waiting for valid METAR.

src/Traffic/TrafficMgr.cxx
src/Traffic/TrafficMgr.hxx

index acc9fa90c883c7cd2acb8d3caa1c68f1585dd718..0d895a8c9dae751cf3fa5797c492d7d1820a012a 100644 (file)
@@ -151,6 +151,7 @@ private:
 FGTrafficManager::FGTrafficManager() :
   inited(false),
   doingInit(false),
+  waitingMetarTime(0.0),
   enabled("/sim/traffic-manager/enabled"),
   aiEnabled("/sim/ai/enabled"),
   realWxEnabled("/environment/realwx/enabled"),
@@ -339,7 +340,36 @@ void FGTrafficManager::loadHeuristics()
     }
 }
 
-void FGTrafficManager::update(double /*dt */ )
+bool FGTrafficManager::metarReady(double dt)
+{
+    // wait for valid METAR (when realWX is enabled only), since we need
+    // to know the active runway
+    if (metarValid || !realWxEnabled)
+    {
+        waitingMetarTime = 0.0;
+        return true;
+    }
+
+    // METAR timeout: when running offline, remote server is down etc
+    if (waitingMetarStation != fgGetString("/environment/metar/station-id"))
+    {
+        // station has changed: wait for reply, restart timeout
+        waitingMetarTime = 0.0;
+        waitingMetarStation = fgGetString("/environment/metar/station-id");
+        return false;
+    }
+
+    // timeout elapsed (10 seconds)?
+    if (waitingMetarTime > 20.0)
+    {
+        return true;
+    }
+
+    waitingMetarTime += dt;
+    return false;
+}
+
+void FGTrafficManager::update(double dt)
 {
     if (!enabled)
     {
@@ -348,9 +378,8 @@ void FGTrafficManager::update(double /*dt */ )
         return;
     }
 
-    if ((realWxEnabled && !metarValid)) {
+    if (!metarReady(dt))
         return;
-    }
 
     if (!aiEnabled)
     {
index bc27058041b61de1f1561b85158b7471bb4963af..5be7fd3cdf0b21fbcbdd4864c983920e568ad758 100644 (file)
@@ -86,6 +86,8 @@ class FGTrafficManager : public SGSubsystem, public XMLVisitor
 private:
   bool inited;
   bool doingInit;
+  double waitingMetarTime;
+  std::string waitingMetarStation;
   
   ScheduleVector scheduledAircraft;
   ScheduleVectorIterator currAircraft, currAircraftClosest;
@@ -122,9 +124,11 @@ private:
   
   // helper to read and parse the schedule data.
   // this is run on a helper thread, so be careful about
-  // accesing properties during parsing
+  // accessing properties during parsing
   void parseSchedule(const SGPath& path);
   
+  bool metarReady(double dt);
+
 public:
   FGTrafficManager();
   ~FGTrafficManager();