]> git.mxchange.org Git - flightgear.git/blobdiff - src/Main/fg_init.cxx
Add a lower-bound type navaid lookup, and the ability to specify navaid type in the...
[flightgear.git] / src / Main / fg_init.cxx
index 9fb7cee0233257b8a3be48ae59c066d138339990..2ba877f0cdc7f26699d697e2793216f8888d4387 100644 (file)
@@ -64,7 +64,7 @@
 #include <simgear/timing/lowleveltime.h>
 
 #include <Aircraft/aircraft.hxx>
-#include <FDM/UIUCModel/uiuc_aircraftdir.h>
+#include <Aircraft/replay.hxx>
 #include <Airports/apt_loader.hxx>
 #include <Airports/runways.hxx>
 #include <Airports/simple.hxx>
 #include <AIModel/AIManager.hxx>
 #include <Navaids/navdb.hxx>
 #include <Navaids/navlist.hxx>
-#include <Replay/replay.hxx>
 #include <Scenery/scenery.hxx>
 #include <Scenery/tilemgr.hxx>
 #include <Scripting/NasalSys.hxx>
 #include <Sound/morse.hxx>
 #include <Systems/system_mgr.hxx>
 #include <Time/light.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>
-#include <MultiPlayer/multiplayrxmgr.hxx>
+#include <MultiPlayer/multiplaymgr.hxx>
 #endif
 
 #include <Environment/environment_mgr.hxx>
@@ -718,6 +715,18 @@ static bool fgSetTowerPosFromAirportID( const string& id, double hdg ) {
 
 }
 
+struct FGTowerLocationListener : SGPropertyChangeListener {
+    void valueChanged(SGPropertyNode* node) {
+        const double hdg = fgGetDouble( "/orientation/heading-deg", 0);
+        const string id(node->getStringValue());
+        fgSetTowerPosFromAirportID(id, hdg);
+    }
+};
+
+static void fgInitTowerLocationListener() {
+    fgGetNode("/sim/tower/airport-id",  true)
+       ->addChangeListener( new FGTowerLocationListener() );
+}
 
 // Set current_options lon/lat given an airport id and heading (degrees)
 static bool fgSetPosFromAirportIDandHdg( const string& id, double tgt_hdg ) {
@@ -991,7 +1000,7 @@ static bool fgSetPosFromCarrier( const string& carrier, const string& posid ) {
 
         return true;
     } else {
-        SG_LOG( SG_GENERAL, SG_ALERT, "Failed to locate aircraft carroer = "
+        SG_LOG( SG_GENERAL, SG_ALERT, "Failed to locate aircraft carrier = "
                 << carrier );
         return false;
     }
@@ -1096,14 +1105,20 @@ fgInitNav ()
     FGNavList *gslist = new FGNavList;
     FGNavList *dmelist = new FGNavList;
     FGNavList *mkrlist = new FGNavList;
+    FGNavList *tacanlist = new FGNavList;
+    FGNavList *carrierlist = new FGNavList;
+    FGTACANList *channellist = new FGTACANList;
 
     globals->set_navlist( navlist );
     globals->set_loclist( loclist );
     globals->set_gslist( gslist );
     globals->set_dmelist( dmelist );
     globals->set_mkrlist( mkrlist );
+    globals->set_tacanlist( tacanlist );
+    globals->set_carrierlist( carrierlist );
+    globals->set_channellist( channellist );
 
-    if ( !fgNavDBInit(airports, navlist, loclist, gslist, dmelist, mkrlist) ) {
+    if ( !fgNavDBInit(airports, navlist, loclist, gslist, dmelist, mkrlist, tacanlist, carrierlist, channellist) ) {
         SG_LOG( SG_GENERAL, SG_ALERT,
                 "Problems loading one or more navigational database" );
     }
@@ -1173,12 +1188,15 @@ bool fgInitPosition() {
     string parkpos = fgGetString("/sim/presets/parkpos");
     string fix = fgGetString("/sim/presets/fix");
 
+    fgSetDouble( "/orientation/heading-deg", hdg );
+    fgInitTowerLocationListener();
+
     if ( !set_pos && !apt.empty() && !rwy_no.empty() ) {
         // An airport + runway is requested
         if ( fgSetPosFromAirportIDandRwy( apt, rwy_no ) ) {
             // set tower position (a little off the heading for single
             // runway airports)
-            fgSetTowerPosFromAirportID( apt, hdg );
+           fgSetString("/sim/tower/airport-id",  apt.c_str());
             set_pos = true;
         }
     }
@@ -1188,7 +1206,7 @@ bool fgInitPosition() {
         if ( fgSetPosFromAirportIDandHdg( apt, hdg ) ) {
             // set tower position (a little off the heading for single
             // runway airports)
-            fgSetTowerPosFromAirportID( apt, hdg );
+           fgSetString("/sim/tower/airport-id",  apt.c_str());
             set_pos = true;
         }
     }
@@ -1232,8 +1250,6 @@ bool fgInitPosition() {
                  fgGetDouble("/sim/presets/longitude-deg") );
     fgSetDouble( "/position/latitude-deg",
                  fgGetDouble("/sim/presets/latitude-deg") );
-    fgSetDouble( "/orientation/heading-deg",
-                 fgGetDouble("/sim/presets/heading-deg") );
 
     // determine if this should be an on-ground or in-air start
     if ((fabs(gs) > 0.01 || fabs(od) > 0.1 || alt > 0.1) && carrier.empty()) {
@@ -1298,8 +1314,7 @@ void fgInitFDM() {
     }
 
     double dt = 1.0 / fgGetInt("/sim/model-hz");
-    aircraft_dir = fgGetString("/sim/aircraft-dir");
-    const string &model = fgGetString("/sim/flight-model");
+    string model = fgGetString("/sim/flight-model");
 
     try {
         if ( model == "larcsim" ) {
@@ -1460,7 +1475,7 @@ void fgInitTimeOffset() {
 
     // Okay, we now have several possible scenarios
     int offset = fgGetInt("/sim/startup/time-offset");
-    const string &offset_type = fgGetString("/sim/startup/time-offset-type");
+    string offset_type = fgGetString("/sim/startup/time-offset-type");
 
     int warp = 0;
     if ( offset_type == "real" ) {
@@ -1562,7 +1577,7 @@ bool fgInitSubsystems() {
     ////////////////////////////////////////////////////////////////////
 
     globals->get_event_mgr()->init();
-    globals->get_event_mgr()->setFreezeProperty(fgGetNode("/sim/freeze/clock"));
+    globals->get_event_mgr()->setRealtimeProperty(fgGetNode("/sim/time/delta-realtime-sec", true));
 
     ////////////////////////////////////////////////////////////////////
     // Initialize the property interpolator subsystem
@@ -1581,7 +1596,8 @@ bool fgInitSubsystems() {
 
     SGPath mpath( globals->get_fg_root() );
     mpath.append( "materials.xml" );
-    if ( ! globals->get_matlib()->load(globals->get_fg_root(), mpath.str()) ) {
+    string season = fgGetString("/sim/startup/season", "summer");
+    if ( ! globals->get_matlib()->load(globals->get_fg_root(), mpath.str(), season.c_str()) ) {
         SG_LOG( SG_GENERAL, SG_ALERT, "Error loading material lib!" );
         exit(-1);
     }
@@ -1824,11 +1840,8 @@ bool fgInitSubsystems() {
     // Initialize multiplayer subsystem
     ////////////////////////////////////////////////////////////////////
 
-    globals->set_multiplayer_tx_mgr(new FGMultiplayTxMgr);
-    globals->get_multiplayer_tx_mgr()->init();
-
-    globals->set_multiplayer_rx_mgr(new FGMultiplayRxMgr);
-    globals->get_multiplayer_rx_mgr()->init();
+    globals->set_multiplayer_mgr(new FGMultiplayMgr);
+    globals->get_multiplayer_mgr()->init();
 #endif
 
     ////////////////////////////////////////////////////////////////////////