]> git.mxchange.org Git - flightgear.git/blobdiff - src/Main/fg_init.cxx
Add the AIModel based air traffic subsystem from Durk Talsma.
[flightgear.git] / src / Main / fg_init.cxx
index 4556c9e5759b7455bfaa976a91e13960f62ccca6..15681791f561346fbe550acaaf0724a00d56f076 100644 (file)
@@ -98,9 +98,7 @@
 #include <Instrumentation/instrument_mgr.hxx>
 #include <Model/acmodel.hxx>
 #include <AIModel/AIManager.hxx>
-#include <Navaids/fixlist.hxx>
-#include <Navaids/ilslist.hxx>
-#include <Navaids/mkrbeacons.hxx>
+#include <Navaids/navdb.hxx>
 #include <Navaids/navlist.hxx>
 #include <Replay/replay.hxx>
 #include <Scenery/scenery.hxx>
 #include <Time/sunpos.hxx>
 #include <Time/sunsolver.hxx>
 #include <Time/tmp.hxx>
+#include <Traffic/TrafficMgr.hxx>
 
 #ifdef FG_MPLAYER_AS
 #include <MultiPlayer/multiplaytxmgr.hxx>
@@ -906,7 +905,8 @@ static void fgSetDistOrAltFromGlideSlope() {
 
 // Set current_options lon/lat given an airport id and heading (degrees)
 static bool fgSetPosFromNAV( const string& id, const double& freq ) {
-    FGNav *nav = current_navlist->findByIdentAndFreq( id.c_str(), freq );
+    FGNavRecord *nav
+        = globals->get_navlist()->findByIdentAndFreq( id.c_str(), freq );
 
     // set initial position from runway and heading
     if ( nav != NULL ) {
@@ -958,7 +958,7 @@ static bool fgSetPosFromFix( const string& id ) {
     FGFix fix;
 
     // set initial position from runway and heading
-    if ( current_fixlist->query( id.c_str(), &fix ) ) {
+    if ( globals->get_fixlist()->query( id.c_str(), &fix ) ) {
         SG_LOG( SG_GENERAL, SG_INFO, "Attempting to set starting position for "
                 << id );
 
@@ -1046,27 +1046,40 @@ fgInitNav ()
     FGRunwayList *runways = new FGRunwayList( p_runway.str() );
     globals->set_runways( runways );
 
-    SG_LOG(SG_GENERAL, SG_INFO, "Loading Navaids");
+    FGNavList *navlist = new FGNavList;
+    FGNavList *loclist = new FGNavList;
+    FGNavList *gslist = new FGNavList;
+    FGNavList *dmelist = new FGNavList;
+    FGNavList *mkrlist = new FGNavList;
 
-    SG_LOG(SG_GENERAL, SG_INFO, "  VOR/NDB");
-    current_navlist = new FGNavList;
-    SGPath p_nav( globals->get_fg_root() );
-    p_nav.append( "Navaids/default.nav" );
-    current_navlist->init( p_nav );
+    globals->set_navlist( navlist );
+    globals->set_loclist( loclist );
+    globals->set_gslist( gslist );
+    globals->set_dmelist( dmelist );
+    globals->set_mkrlist( mkrlist );
 
-    SG_LOG(SG_GENERAL, SG_INFO, "  ILS and Marker Beacons");
-    current_beacons = new FGMarkerBeacons;
-    current_beacons->init();
-    current_ilslist = new FGILSList;
-    SGPath p_ils( globals->get_fg_root() );
-    p_ils.append( "Navaids/default.ils" );
-    current_ilslist->init( p_ils );
+    if ( !fgNavDBInit( navlist, loclist, gslist, dmelist, mkrlist ) ) {
+        SG_LOG( SG_GENERAL, SG_ALERT,
+                "Problems loading one or more navigational database" );
+    }
+
+    if ( fgGetBool("/sim/navdb/localizers/auto-align", true) ) {
+        // align all the localizers with their corresponding runways
+        // since data sources are good for cockpit navigation
+        // purposes, but not always to the error tolerances needed to
+        // exactly place these items.
+        double threshold
+            = fgGetDouble( "/sim/navdb/localizers/auto-align-threshold-deg",
+                           5.0 );
+        fgNavDBAlignLOCwithRunway( runways, loclist, threshold );
+    }
 
     SG_LOG(SG_GENERAL, SG_INFO, "  Fixes");
-    current_fixlist = new FGFixList;
     SGPath p_fix( globals->get_fg_root() );
-    p_fix.append( "Navaids/default.fix" );
-    current_fixlist->init( p_fix );
+    p_fix.append( "Navaids/fix.dat" );
+    FGFixList *fixlist = new FGFixList;
+    fixlist->init( p_fix );
+    globals->set_fixlist( fixlist );
 
     return true;
 }
@@ -1587,6 +1600,11 @@ bool fgInitSubsystems() {
 
     globals->add_subsystem("lighting", new FGLight);
 
+    //////////////////////////////////////////////////////////////////////
+    // Initialize the 2D cloud subsystem.
+    ////////////////////////////////////////////////////////////////////
+    fgGetNode("/sim/rendering/bump-mapping", true);
+    fgSetBool("/sim/rendering/bump-mapping", true);
 
 #ifdef FG_USE_CLOUDS_3D
     ////////////////////////////////////////////////////////////////////
@@ -1667,14 +1685,26 @@ bool fgInitSubsystems() {
     ////////////////////////////////////////////////////////////////////
     // Initialise the AI Model Manager
     ////////////////////////////////////////////////////////////////////
-
     SG_LOG(SG_GENERAL, SG_INFO, "  AI Model Manager");
     globals->add_subsystem("ai_model", new FGAIManager);
 
 
+     // It's probably a good idea to initialize the top level traffic manager
+     // After the AI and ATC systems have been initialized properly.
+     // AI Traffic manager
+     globals->add_subsystem("Traffic Manager", new FGTrafficManager);
+            FGTrafficManager *dispatcher = 
+            (FGTrafficManager*) globals->get_subsystem("Traffic Manager");
+
+     readXML(string(globals->get_fg_root() + string("/Traffic/fgtraffic.xml")),
+            *dispatcher);
+     globals->get_subsystem("Traffic Manager")->init();
+
     globals->add_subsystem("instrumentation", new FGInstrumentMgr);
     globals->add_subsystem("systems", new FGSystemMgr);
 
+
+
     ////////////////////////////////////////////////////////////////////
     // Initialize the radio stack subsystem.
     ////////////////////////////////////////////////////////////////////