]> git.mxchange.org Git - flightgear.git/blobdiff - src/Main/fg_init.cxx
Work around a problem in certain NVidia adapters hat don't support fgPushAttrib(FG_FO...
[flightgear.git] / src / Main / fg_init.cxx
index 9949478d420f7f723d797a650bff8be2cd616cb7..419d7e5fc2cd265d6944ca79b224a989f8a87855 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>
@@ -89,7 +84,7 @@
 #include <FDM/ExternalNet/ExternalNet.hxx>
 #include <FDM/ExternalPipe/ExternalPipe.hxx>
 #include <FDM/JSBSim/JSBSim.hxx>
-#include <FDM/LaRCsim.hxx>
+#include <FDM/LaRCsim/LaRCsim.hxx>
 #include <FDM/MagicCarpet.hxx>
 #include <FDM/UFO.hxx>
 #include <FDM/NullFDM.hxx>
 #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)
@@ -699,6 +695,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 );
@@ -776,6 +773,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 );
@@ -1018,45 +1016,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 +1471,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 +1479,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 +1638,11 @@ bool fgInitSubsystems() {
     globals->add_subsystem("input", new FGInput);
 
 
+    ////////////////////////////////////////////////////////////////////
+    // Initialize the replay subsystem
+    ////////////////////////////////////////////////////////////////////
+    globals->add_subsystem("replay", new FGReplay);
+
     ////////////////////////////////////////////////////////////////////
     // Bind and initialize subsystems.
     ////////////////////////////////////////////////////////////////////