]> git.mxchange.org Git - flightgear.git/blobdiff - Main/fg_init.cxx
C++ ifying ...
[flightgear.git] / Main / fg_init.cxx
index ec3dea84eb9e608eb05143ec72ce028e54a079b7..8d3bd73039660d5b89e7f33282c05aaab0944a9c 100644 (file)
 #include <Include/fg_constants.h>
 #include <Include/general.h>
 
-#include <Aircraft/aircraft.h>
+#include <Aircraft/aircraft.hxx>
 #include <Airports/simple.hxx>
-#include <Astro/moon.hxx>
-#include <Astro/planets.hxx>
 #include <Astro/sky.hxx>
 #include <Astro/stars.hxx>
-#include <Astro/sun.hxx>
-#include <Autopilot/autopilot.h>
+#include <Astro/solarsystem.hxx>
+#include <Autopilot/autopilot.hxx>
 #include <Cockpit/cockpit.hxx>
 #include <Debug/fg_debug.h>
 #include <Joystick/joystick.h>
-#include <Math/fg_geodesy.h>
+#include <Math/fg_geodesy.hxx>
 #include <Math/fg_random.h>
+#include <Math/point3d.hxx>
 #include <Math/polar3d.hxx>
 #include <Scenery/scenery.hxx>
 #include <Scenery/tilemgr.hxx>
@@ -62,7 +61,7 @@
 #include <Time/fg_time.hxx>
 #include <Time/light.hxx>
 #include <Time/sunpos.hxx>
-#include <Weather/weather.h>
+#include <Weather/weather.hxx>
 
 #include "fg_init.hxx"
 #include "options.hxx"
@@ -91,15 +90,12 @@ int fgInitPosition( void ) {
                  id.c_str() );
 
        airports.load("apt_simple");
-       a = airports.search( (char *)id.c_str() );
-       if ( (fabs(a.longitude) < FG_EPSILON) &&
-            (fabs(a.latitude) < FG_EPSILON) &&
-            (fabs(a.elevation) < FG_EPSILON) ) {
+       if ( ! airports.search( id, &a ) ) {
            fgPrintf( FG_GENERAL, FG_EXIT, 
                      "Failed to find %s in database.\n", id.c_str() );
        } else {
-           FG_Longitude = ( a.longitude ) * DEG_TO_RAD;
-           FG_Latitude  = ( a.latitude ) * DEG_TO_RAD;
+           FG_Longitude = a.longitude * DEG_TO_RAD;
+           FG_Latitude  = a.latitude * DEG_TO_RAD;
        }
     } else {
        // set initial position from default or command line coordinates
@@ -154,33 +150,6 @@ int fgInitGeneral( void ) {
 }
 
 
-// convert a geodetic point lon(radians), lat(radians), elev(meter) to
-// a cartesian point
-fgPoint3d geod_to_cart(double geod[3]) {
-    fgPoint3d cp;
-    fgPoint3d pp;
-    double gc_lon, gc_lat, sl_radius;
-
-    // printf("A geodetic point is (%.2f, %.2f, %.2f)\n", 
-    //        geod[0], geod[1], geod[2]);
-
-    gc_lon = geod[0];
-    fgGeodToGeoc(geod[1], geod[2], &sl_radius, &gc_lat);
-
-    // printf("A geocentric point is (%.2f, %.2f, %.2f)\n", gc_lon, 
-    //        gc_lat, sl_radius+geod[2]);
-
-    pp.lon = gc_lon;
-    pp.lat = gc_lat;
-    pp.radius = sl_radius + geod[2];
-    cp = fgPolarToCart3d(pp);
-    
-    // printf("A cart point is (%.8f, %.8f, %.8f)\n", cp.x, cp.y, cp.z);
-
-    return(cp);
-}
-
-
 // This is the top level init routine which calls all the other
 // initialization routines.  If you are adding a subsystem to flight
 // gear, its initialization call should located in this routine.
@@ -191,8 +160,7 @@ int fgInitSubsystems( void )
     fgLIGHT *l;
     fgTIME *t;
     fgVIEW *v;
-    double geod_pos[3];
-    fgPoint3d abs_view_pos;
+    Point3D geod_pos, abs_view_pos;
 
     l = &cur_light_params;
     t = &cur_time_params;
@@ -228,17 +196,15 @@ int fgInitSubsystems( void )
     }
 
     // calculalate a cartesian point somewhere along the line between
-    // the center of the earth and our view position
-    geod_pos[0] = FG_Longitude;
-    geod_pos[1] = FG_Latitude;
-    // doesn't have to be the exact elevation (this is good because we
-    // don't know it yet :-)
-    geod_pos[2] = 0;
-    abs_view_pos = geod_to_cart(geod_pos);
+    // the center of the earth and our view position.  Doesn't have to
+    // be the exact elevation (this is good because we don't know it
+    // yet :-)
+    geod_pos.setvals( FG_Longitude, FG_Latitude, 0.0);
+    abs_view_pos = fgGeodToCart(geod_pos);
 
     // Calculate ground elevation at starting point
     scenery.cur_elev = 
-       fgTileMgrCurElev( FG_Longitude, FG_Latitude, &abs_view_pos );
+       fgTileMgrCurElev( FG_Longitude, FG_Latitude, abs_view_pos );
     FG_Runway_altitude = scenery.cur_elev * METER_TO_FEET;
 
     // Reset our altitude if we are below ground
@@ -302,8 +268,10 @@ int fgInitSubsystems( void )
     v->UpdateViewMath(f);
     v->UpdateWorldToEye(f);
 
-    // Initialize the orbital elements of sun, moon and mayor planets
-    fgSolarSystemInit(*t);
+    // Build the solar system
+    //fgSolarSystemInit(*t);
+    fgPrintf(FG_GENERAL, FG_INFO, "Building SolarSystem\n");
+    SolarSystem::theSolarSystem = new SolarSystem(t);
 
     // Initialize the Stars subsystem
     if( fgStarsInit() ) {
@@ -313,21 +281,27 @@ int fgInitSubsystems( void )
     }
 
     // Initialize the planetary subsystem
-    global_events.Register( "fgPlanetsInit()", fgPlanetsInit, 
-                           fgEVENT::FG_EVENT_READY, 600000);
+    // global_events.Register( "fgPlanetsInit()", fgPlanetsInit, 
+    //                     fgEVENT::FG_EVENT_READY, 600000);
 
     // Initialize the sun's position 
-    global_events.Register( "fgSunInit()", fgSunInit, 
-                           fgEVENT::FG_EVENT_READY, 30000 );
+    // global_events.Register( "fgSunInit()", fgSunInit, 
+    //                     fgEVENT::FG_EVENT_READY, 30000 );
 
     // Intialize the moon's position
-    global_events.Register( "fgMoonInit()", fgMoonInit, 
-                           fgEVENT::FG_EVENT_READY, 600000 );
+    // global_events.Register( "fgMoonInit()", fgMoonInit, 
+    //                     fgEVENT::FG_EVENT_READY, 600000 );
 
+    // register the periodic update of Sun, moon, and planets
+    global_events.Register( "ssolsysUpdate", solarSystemRebuild,
+                           fgEVENT::FG_EVENT_READY, 600000);
+    
     // fgUpdateSunPos() needs a few position and view parameters set
     // so it can calculate local relative sun angle and a few other
     // things for correctly orienting the sky.
     fgUpdateSunPos();
+    global_events.Register( "fgUpdateSunPos()", fgUpdateSunPos,
+                           fgEVENT::FG_EVENT_READY, 60000);
 
     // Initialize Lighting interpolation tables
     l->Init();
@@ -341,10 +315,6 @@ int fgInitSubsystems( void )
     // Initialize the weather modeling subsystem
     fgWeatherInit();
 
-    // update the weather for our current position
-    global_events.Register( "fgWeatherUpdate()", fgWeatherUpdate,
-                           fgEVENT::FG_EVENT_READY, 120000 );
-
     // Initialize the Cockpit subsystem
     if( fgCockpitInit( &current_aircraft )) {
        // Cockpit initialized ok.
@@ -392,6 +362,43 @@ int fgInitSubsystems( void )
 
 
 // $Log$
+// Revision 1.43  1998/10/17 01:34:22  curt
+// C++ ifying ...
+//
+// Revision 1.42  1998/10/16 23:27:54  curt
+// C++-ifying.
+//
+// Revision 1.41  1998/10/16 00:54:01  curt
+// Converted to Point3D class.
+//
+// Revision 1.40  1998/10/02 12:46:49  curt
+// Added an "auto throttle"
+//
+// Revision 1.39  1998/09/29 02:03:39  curt
+// Autopilot mods.
+//
+// Revision 1.38  1998/09/15 04:27:30  curt
+// Changes for new Astro code.
+//
+// Revision 1.37  1998/09/15 02:09:26  curt
+// Include/fg_callback.hxx
+//   Moved code inline to stop g++ 2.7 from complaining.
+//
+// Simulator/Time/event.[ch]xx
+//   Changed return type of fgEVENT::printStat().  void caused g++ 2.7 to
+//   complain bitterly.
+//
+// Minor bugfix and changes.
+//
+// Simulator/Main/GLUTmain.cxx
+//   Added missing type to idle_state definition - eliminates a warning.
+//
+// Simulator/Main/fg_init.cxx
+//   Changes to airport lookup.
+//
+// Simulator/Main/options.cxx
+//   Uses fg_gzifstream when loading config file.
+//
 // Revision 1.36  1998/09/08 21:40:08  curt
 // Fixes by Charlie Hotchkiss.
 //