]> git.mxchange.org Git - flightgear.git/blobdiff - src/Traffic/TrafficMgr.cxx
Merge branch 'next' into durk-atc
[flightgear.git] / src / Traffic / TrafficMgr.cxx
index d9fcb6fffcf2254d62113872e4770b5e319797ea..9ebf78c1c7c063e80ba68352d1d4073131d4a3a8 100644 (file)
@@ -75,7 +75,12 @@ using std::strcmp;
 /******************************************************************************
  * TrafficManager
  *****************************************************************************/
-FGTrafficManager::FGTrafficManager()
+FGTrafficManager::FGTrafficManager() :
+  inited(false),
+  enabled("/sim/traffic-manager/enabled"),
+  aiEnabled("/sim/ai/enabled"),
+  realWxEnabled("/environment/realwx/enabled"),
+  metarValid("/environment/metar/valid")
 {
     //score = 0;
     //runCount = 0;
@@ -125,6 +130,10 @@ FGTrafficManager::~FGTrafficManager()
 
 void FGTrafficManager::init()
 {
+    if (!enabled || !aiEnabled) {
+      return;
+    }
+  
     heuristicsVector heuristics;
     HeuristicMap heurMap;
 
@@ -218,13 +227,22 @@ void FGTrafficManager::init()
          compareSchedules);
     currAircraft = scheduledAircraft.begin();
     currAircraftClosest = scheduledAircraft.begin();
+    
+    inited = true;
 }
 
 void FGTrafficManager::update(double /*dt */ )
 {
-    if (fgGetBool("/environment/metar/valid") == false) {
+    if (!enabled || !aiEnabled || (realWxEnabled && !metarValid)) {
         return;
     }
+        
+    if (!inited) {
+    // lazy-initialization, we've been enabled at run-time
+      SG_LOG(SG_GENERAL, SG_INFO, "doing lazy-init of TrafficManager");
+      init();
+    }
+        
     time_t now = time(NULL) + fgGetLong("/sim/time/warp");
     if (scheduledAircraft.size() == 0) {
         return;
@@ -240,6 +258,7 @@ void FGTrafficManager::update(double /*dt */ )
     }
     //cerr << "Processing << " << (*currAircraft)->getRegistration() << " with score " << (*currAircraft)->getScore() << endl;
     if (!((*currAircraft)->update(now, userCart))) {
+        (*currAircraft)->taint();
         // NOTE: With traffic manager II, this statement below is no longer true
         // after proper initialization, we shouldnt get here.
         // But let's make sure