]> git.mxchange.org Git - flightgear.git/blobdiff - src/Main/fg_init.cxx
Remove the last traces of metakit (hopefully) :-)
[flightgear.git] / src / Main / fg_init.cxx
index fb20adbb85ab96f50b6b5acd206a6a5435203507..13f0cc55edec6723fecd35a96504d2f96596fe65 100644 (file)
 #  include <math.h>
 #endif
 
-#ifdef HAVE_WINDOWS_H
-#  include <windows.h>
-#endif
-
-#include GLUT_H
-
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>             // strcmp()
@@ -65,8 +59,9 @@
 #include <simgear/misc/sg_path.hxx>
 #include <simgear/scene/material/matlib.hxx>
 #ifdef FG_USE_CLOUDS_3D
-#  include <simgear/sky/clouds3d/SkySceneLoader.hpp>
-#  include <simgear/sky/clouds3d/SkyUtil.hpp>
+#  include <simgear/scene/sky/clouds3d/SkySceneLoader.hpp>
+#  include <simgear/scene/sky/clouds3d/SkyUtil.hpp>
+#  include <simgear/screen/texture.hxx>
 #endif
 #include <simgear/timing/sg_time.hxx>
 #include <simgear/timing/lowleveltime.h>
 #include <Navaids/ilslist.hxx>
 #include <Navaids/mkrbeacons.hxx>
 #include <Navaids/navlist.hxx>
+#include <Replay/replay.hxx>
 #include <Scenery/scenery.hxx>
 #include <Scenery/tilemgr.hxx>
 #if defined(HAVE_PLIB_PSL)
@@ -560,23 +556,23 @@ bool fgInitConfig ( int argc, char **argv ) {
 
 // find basic airport location info from airport database
 bool fgFindAirportID( const string& id, FGAirport *a ) {
+    FGAirport result;
     if ( id.length() ) {
-        SGPath path( globals->get_fg_root() );
-        path.append( "Airports" );
-        path.append( "simple.mk4" );
-        FGAirports airports( path.c_str() );
-
         SG_LOG( SG_GENERAL, SG_INFO, "Searching for airport code = " << id );
 
-        if ( ! airports.search( id, a ) ) {
+        result = globals->get_airports()->search( id );
+
+        if ( result.id.empty() ) {
             SG_LOG( SG_GENERAL, SG_ALERT,
-                    "Failed to find " << id << " in " << path.str() );
+                    "Failed to find " << id << " in basic.dat.gz" );
             return false;
         }
     } else {
         return false;
     }
 
+    *a = result;
+
     SG_LOG( SG_GENERAL, SG_INFO,
             "Position for " << id << " is ("
             << a->longitude << ", "
@@ -660,16 +656,11 @@ static bool fgSetPosFromAirportIDandHdg( const string& id, double tgt_hdg ) {
     if ( id.length() ) {
         // set initial position from runway and heading
 
-        SGPath path( globals->get_fg_root() );
-        path.append( "Airports" );
-        path.append( "runways.mk4" );
-        FGRunways runways( path.c_str() );
-
         SG_LOG( SG_GENERAL, SG_INFO,
                 "Attempting to set starting position from airport code "
                 << id << " heading " << tgt_hdg );
                
-        if ( ! runways.search( id, (int)tgt_hdg, &r ) ) {
+        if ( ! globals->get_runways()->search( id, (int)tgt_hdg, &r ) ) {
             SG_LOG( SG_GENERAL, SG_ALERT,
                     "Failed to find a good runway for " << id << '\n' );
             return false;
@@ -699,6 +690,7 @@ static bool fgSetPosFromAirportIDandHdg( const string& id, double tgt_hdg ) {
         double oaz = azimuth;
         if ( fabs(fgGetDouble("/sim/presets/offset-azimuth")) > SG_EPSILON ) {
             oaz = fgGetDouble("/sim/presets/offset-azimuth") + 180;
+            heading = tgt_hdg;
         }
         while ( oaz >= 360.0 ) { oaz -= 360.0; }
         geo_direct_wgs_84 ( 0, lat2, lon2, oaz, odist, &olat, &olon, &az2 );
@@ -733,16 +725,11 @@ static bool fgSetPosFromAirportIDandRwy( const string& id, const string& rwy ) {
     if ( id.length() ) {
         // set initial position from airport and runway number
 
-        SGPath path( globals->get_fg_root() );
-        path.append( "Airports" );
-        path.append( "runways.mk4" );
-        FGRunways runways( path.c_str() );
-
         SG_LOG( SG_GENERAL, SG_INFO,
                 "Attempting to set starting position for "
                 << id << ":" << rwy );
 
-        if ( ! runways.search( id, rwy, &r ) ) {
+        if ( ! globals->get_runways()->search( id, rwy, &r ) ) {
             SG_LOG( SG_GENERAL, SG_ALERT,
                     "Failed to find runway " << rwy << 
                     " at airport " << id );
@@ -776,6 +763,7 @@ static bool fgSetPosFromAirportIDandRwy( const string& id, const string& rwy ) {
        if ( fabs(fgGetDouble("/sim/presets/offset-azimuth")) > SG_EPSILON )
        {
            oaz = fgGetDouble("/sim/presets/offset-azimuth") + 180;
+            heading = fgGetDouble("/sim/presets/heading-deg");
        }
        while ( oaz >= 360.0 ) { oaz -= 360.0; }
        geo_direct_wgs_84 ( 0, lat2, lon2, oaz, odist, &olat, &olon, &az2 );
@@ -945,11 +933,24 @@ static bool fgSetPosFromFix( const string& id ) {
 
 
 /**
- * Initialize vor/ndb/ils/fix list management and query systems
+ * Initialize vor/ndb/ils/fix list management and query systems (as
+ * well as simple airport db list)
  */
 bool
 fgInitNav ()
 {
+    SG_LOG(SG_GENERAL, SG_INFO, "Loading Simple Airport List");
+    SGPath p_simple( globals->get_fg_root() );
+    p_simple.append( "Airports/basic.dat" );
+    FGAirportList *airports = new FGAirportList( p_simple.str() );
+    globals->set_airports( airports );
+
+    SG_LOG(SG_GENERAL, SG_INFO, "Loading Runway List");
+    SGPath p_runway( globals->get_fg_root() );
+    p_runway.append( "Airports/runways.dat" );
+    FGRunwayList *runways = new FGRunwayList( p_runway.str() );
+    globals->set_runways( runways );
+
     SG_LOG(SG_GENERAL, SG_INFO, "Loading Navaids");
 
     SG_LOG(SG_GENERAL, SG_INFO, "  VOR/NDB");
@@ -1018,45 +1019,41 @@ bool fgInitPosition() {
     string ndb = fgGetString("/sim/presets/ndb-id");
     double ndb_freq = fgGetDouble("/sim/presets/ndb-freq");
     string fix = fgGetString("/sim/presets/fix");
+
     if ( !set_pos && !apt.empty() && !rwy_no.empty() ) {
         // An airport + runway is requested
         if ( fgSetPosFromAirportIDandRwy( apt, rwy_no ) ) {
-            // set position (a little off the heading for single
+            // set tower position (a little off the heading for single
             // runway airports)
             fgSetTowerPosFromAirportID( apt, hdg );
-
             set_pos = true;
         }
     }
+
     if ( !set_pos && !apt.empty() ) {
         // An airport is requested (find runway closest to hdg)
-        bool ok = false;
-        if (fgGetDouble("/sim/presets/altitude-ft") <= 0 &&
-            fgGetDouble("/sim/presets/offset-distance") == 0)
-            ok = fgSetPosFromAirportIDandHdg( apt, hdg );
-        else
-            ok = fgSetPosFromAirportID( apt );
-            
-        if (ok) {
-                // set position (a little off the heading for single
-                // runway airports)
-                fgSetTowerPosFromAirportID( apt, hdg );
-
+        if ( fgSetPosFromAirportIDandHdg( apt, hdg ) ) {
+            // set tower position (a little off the heading for single
+            // runway airports)
+            fgSetTowerPosFromAirportID( apt, hdg );
             set_pos = true;
         }
     }
+
     if ( !set_pos && !vor.empty() ) {
         // a VOR is requested
         if ( fgSetPosFromNAV( vor, vor_freq ) ) {
             set_pos = true;
         }
     }
+
     if ( !set_pos && !ndb.empty() ) {
         // an NDB is requested
         if ( fgSetPosFromNAV( ndb, ndb_freq ) ) {
             set_pos = true;
         }
     }
+
     if ( !set_pos && !fix.empty() ) {
         // a Fix is requested
         if ( fgSetPosFromFix( fix ) ) {
@@ -1477,8 +1474,7 @@ bool fgInitSubsystems() {
     global_events.Register( "weather update", &fgUpdateWeatherDatabase,
                             30000);
 #else
-    globals->get_environment_mgr()->init();
-    globals->get_environment_mgr()->bind();
+    globals->add_subsystem("environment", new FGEnvironmentMgr);
 #endif
 
 #ifdef FG_USE_CLOUDS_3D
@@ -1486,10 +1482,25 @@ bool fgInitSubsystems() {
     // Initialize the 3D cloud subsystem.
     ////////////////////////////////////////////////////////////////////
     if ( fgGetBool("/sim/rendering/clouds3d") ) {
+        static const SGPropertyNode *longitude
+           = fgGetNode("/sim/presets/longitude-deg");
+        static const SGPropertyNode *latitude
+           = fgGetNode("/sim/presets/latitude-deg");
+        static const SGPropertyNode *altitude
+           = fgGetNode("/sim/presets/altitude-ft");
+
         SGPath cloud_path(globals->get_fg_root());
-        cloud_path.append("large.sky");
+#if 0
+        cloud_path.append("Textures/Sky/scattered.rgba");
         SG_LOG(SG_GENERAL, SG_INFO, "Loading CLOUDS3d from: " << cloud_path.c_str());
+
+        SGTexture tx;
+        tx.read_rgba_texture(cloud_path.c_str());
+        if ( !sgCloud3d->Load( tx.texture(), tx.width(),
+#else
+        cloud_path.append("large.sky");
         if ( !sgCloud3d->Load( cloud_path.str(),
+#endif
                                latitude->getDoubleValue(),
                                longitude->getDoubleValue()) )
         {
@@ -1630,6 +1641,11 @@ bool fgInitSubsystems() {
     globals->add_subsystem("input", new FGInput);
 
 
+    ////////////////////////////////////////////////////////////////////
+    // Initialize the replay subsystem
+    ////////////////////////////////////////////////////////////////////
+    globals->add_subsystem("replay", new FGReplay);
+
     ////////////////////////////////////////////////////////////////////
     // Bind and initialize subsystems.
     ////////////////////////////////////////////////////////////////////