]> git.mxchange.org Git - flightgear.git/blobdiff - Main/fg_init.cxx
Tweaks for building with native SGI compilers.
[flightgear.git] / Main / fg_init.cxx
index 53aff9d819aae46d17775ba1ef841d36835ebc82..a731711f6b2423bb992f4aa6b710faa3f4977a7b 100644 (file)
 #  define _G_NO_EXTERN_TEMPLATES
 #endif
 
-#include <string>
+#include <Include/compiler.h>
+
+#include STL_STRING
 
 #include <Include/fg_constants.h>
-#include <Include/general.h>
 
+#include <Debug/logstream.hxx>
 #include <Aircraft/aircraft.hxx>
 #include <Airports/simple.hxx>
 #include <Astro/sky.hxx>
@@ -49,8 +51,6 @@
 #include <Astro/solarsystem.hxx>
 #include <Autopilot/autopilot.hxx>
 #include <Cockpit/cockpit.hxx>
-// #include <Debug/fg_debug.h>
-#include <Debug/logstream.hxx>
 #include <Joystick/joystick.hxx>
 #include <Math/fg_geodesy.hxx>
 #include <Math/fg_random.h>
@@ -67,7 +67,9 @@
 #include "fg_init.hxx"
 #include "options.hxx"
 #include "views.hxx"
+#include "fg_serial.hxx"
 
+FG_USING_STD(string);
 
 extern const char *default_root;
 
@@ -75,7 +77,7 @@ extern const char *default_root;
 // Set initial position and orientation
 int fgInitPosition( void ) {
     string id;
-    FGState *f;
+    FGInterface *f;
 
     f = current_aircraft.fdm_state;
 
@@ -109,7 +111,8 @@ int fgInitPosition( void ) {
            "starting altitude is = " << current_options.get_altitude() );
 
     f->set_Altitude( current_options.get_altitude() * METER_TO_FEET );
-    f->set_Runway_altitude( f->get_Altitude() - 3.758099 );
+    fgFDMSetGroundElevation( current_options.get_flight_model(),
+                            (f->get_Altitude() - 3.758099) * FEET_TO_METER );
 
     FG_LOG( FG_GENERAL, FG_INFO,
            "Initial position is: ("
@@ -124,7 +127,7 @@ int fgInitPosition( void ) {
 // General house keeping initializations
 int fgInitGeneral( void ) {
     string root;
-    int i;
+    // int i;
 
     FG_LOG( FG_GENERAL, FG_INFO, "General Initialization" );
     FG_LOG( FG_GENERAL, FG_INFO, "======= ==============" );
@@ -140,9 +143,9 @@ int fgInitGeneral( void ) {
     FG_LOG( FG_GENERAL, FG_INFO, "FG_ROOT = " << root << endl );
 
     // prime the frame rate counter pump
-    for ( i = 0; i < FG_FRAME_RATE_HISTORY; i++ ) {
-       general.frames[i] = 0.0;
-    }
+    // for ( i = 0; i < FG_FRAME_RATE_HISTORY; i++ ) {
+    //    general.frames[i] = 0.0;
+    // }
 
     return ( 1 ); 
 }
@@ -154,15 +157,10 @@ int fgInitGeneral( void ) {
 // Returns non-zero if a problem encountered.
 int fgInitSubsystems( void )
 {
-    FGState *f;
-    fgLIGHT *l;
-    fgTIME *t;
-    fgVIEW *v;
-    Point3D geod_pos, abs_view_pos;
-
-    l = &cur_light_params;
-    t = &cur_time_params;
-    v = &current_view;
+    FGInterface *f; // assigned later
+    fgLIGHT *l = &cur_light_params;
+    fgTIME *t = &cur_time_params;
+    FGView *v = &current_view;
 
     FG_LOG( FG_GENERAL, FG_INFO, "Initialize Subsystems");
     FG_LOG( FG_GENERAL, FG_INFO, "========== ==========");
@@ -194,27 +192,41 @@ int fgInitSubsystems( void )
        exit(-1);
     }
 
-    // Calculate ground elevation at starting point (we didn't have
-    // abs_view_pos calculated when fgTileMgrUpdate() was called above
+    FG_LOG( FG_GENERAL, FG_DEBUG, 
+           "Current terrain elevation after tile mgr init " << 
+           scenery.cur_elev );
 
+    // Calculate ground elevation at starting point (we didn't have
+    // tmp_abs_view_pos calculated when fgTileMgrUpdate() was called above
+    //
     // calculalate a cartesian point somewhere along the line between
     // 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 :-)
+
+    // now handled inside of the fgTileMgrUpdate()
+
+    /*
     geod_pos = Point3D( f->get_Longitude(), f->get_Latitude(), 0.0);
-    abs_view_pos = fgGeodToCart(geod_pos);
+    tmp_abs_view_pos = fgGeodToCart(geod_pos);
 
     FG_LOG( FG_GENERAL, FG_DEBUG, 
-           "Altitude before update " << scenery.cur_elev );
+           "Initial abs_view_pos = " << tmp_abs_view_pos );
     scenery.cur_elev = 
-       fgTileMgrCurElevOLD( f->get_Longitude(), 
-                            f->get_Latitude(),
-                            abs_view_pos );
+       fgTileMgrCurElev( f->get_Longitude(), f->get_Latitude(), 
+                         tmp_abs_view_pos );
     FG_LOG( FG_GENERAL, FG_DEBUG, 
            "Altitude after update " << scenery.cur_elev );
-    f->set_Runway_altitude( scenery.cur_elev * METER_TO_FEET );
+    */
+
+    fgFDMSetGroundElevation( current_options.get_flight_model(), 
+                            scenery.cur_elev );
 
     // Reset our altitude if we are below ground
+    FG_LOG( FG_GENERAL, FG_DEBUG, "Current altitude = " << f->get_Altitude() );
+    FG_LOG( FG_GENERAL, FG_DEBUG, "Current runway altitude = " << 
+           f->get_Runway_altitude() );
+
     if ( f->get_Altitude() < f->get_Runway_altitude() + 3.758099) {
        f->set_Altitude( f->get_Runway_altitude() + 3.758099 );
     }
@@ -224,8 +236,21 @@ int fgInitSubsystems( void )
            << (f->get_Latitude() * RAD_TO_DEG) << ", " 
            << (f->get_Longitude() * RAD_TO_DEG) << ", " 
            << (f->get_Altitude() * FEET_TO_METER) << ")" );
-    // end of thing that I just stuck in that I should probably move
-               
+
+    // We need to calculate a few more values here that would normally
+    // be calculated by the FDM so that the v->UpdateViewMath()
+    // routine doesn't get hosed.
+
+    double sea_level_radius_meters;
+    double lat_geoc;
+    // Set the FG variables first
+    fgGeodToGeoc( f->get_Latitude(), f->get_Altitude(), 
+                 &sea_level_radius_meters, &lat_geoc);
+    f->set_Geocentric_Position( lat_geoc, f->get_Longitude(), 
+                               f->get_Altitude() + 
+                               (sea_level_radius_meters * METER_TO_FEET) );
+    f->set_Sea_level_radius( sea_level_radius_meters * METER_TO_FEET );
+
     // The following section sets up the flight model EOM parameters
     // and should really be read in from one or more files.
 
@@ -267,7 +292,7 @@ int fgInitSubsystems( void )
     v->Init();
     FG_LOG( FG_GENERAL, FG_DEBUG, "After v->init()");
     v->UpdateViewMath(f);
-    FG_LOG( FG_GENERAL, FG_DEBUG, "  abs_view_pos = " << v->abs_view_pos );
+    FG_LOG( FG_GENERAL, FG_DEBUG, "  abs_view_pos = " << v->get_abs_view_pos());
     v->UpdateWorldToEye(f);
 
     // Build the solar system
@@ -316,7 +341,7 @@ int fgInitSubsystems( void )
                            fgEVENT::FG_EVENT_READY, 30000 );
 
     // Initialize the weather modeling subsystem
-    fgWeatherInit();
+    current_weather.Init();
 
     // Initialize the Cockpit subsystem
     if( fgCockpitInit( &current_aircraft )) {
@@ -332,7 +357,7 @@ int fgInitSubsystems( void )
     // Initialize the flight model subsystem data structures base on
     // above values
 
-    fgFlightModelInit( current_options.get_flight_model(), cur_fdm_state, 
+    fgFDMInit( current_options.get_flight_model(), cur_fdm_state, 
                       1.0 / DEFAULT_MODEL_HZ );
 
     // I'm just sticking this here for now, it should probably move
@@ -370,6 +395,67 @@ int fgInitSubsystems( void )
 
 
 // $Log$
+// Revision 1.68  1999/03/02 01:03:15  curt
+// Tweaks for building with native SGI compilers.
+//
+// Revision 1.67  1999/02/26 22:09:48  curt
+// Added initial support for native SGI compilers.
+//
+// Revision 1.66  1999/02/05 21:29:10  curt
+// Modifications to incorporate Jon S. Berndts flight model code.
+//
+// Revision 1.65  1999/02/02 20:13:36  curt
+// MSVC++ portability changes by Bernie Bright:
+//
+// Lib/Serial/serial.[ch]xx: Initial Windows support - incomplete.
+// Simulator/Astro/stars.cxx: typo? included <stdio> instead of <cstdio>
+// Simulator/Cockpit/hud.cxx: Added Standard headers
+// Simulator/Cockpit/panel.cxx: Redefinition of default parameter
+// Simulator/Flight/flight.cxx: Replaced cout with FG_LOG.  Deleted <stdio.h>
+// Simulator/Main/fg_init.cxx:
+// Simulator/Main/GLUTmain.cxx:
+// Simulator/Main/options.hxx: Shuffled <fg_serial.hxx> dependency
+// Simulator/Objects/material.hxx:
+// Simulator/Time/timestamp.hxx: VC++ friend kludge
+// Simulator/Scenery/tile.[ch]xx: Fixed using std::X declarations
+// Simulator/Main/views.hxx: Added a constant
+//
+// Revision 1.64  1999/02/01 21:15:43  curt
+// Removed unused variables.
+//
+// Revision 1.63  1999/01/27 04:49:19  curt
+// Game mode fixes from Norman Vine.
+// Initial altitude setting tweaks and fixes (especially for when starting
+// below sea level.)
+//
+// Revision 1.62  1999/01/20 13:42:25  curt
+// Tweaked FDM interface.
+// Testing check sum support for NMEA serial output.
+//
+// Revision 1.61  1999/01/08 03:23:57  curt
+// Beginning work on compensating for sim time vs. real world time "jitter".
+//
+// Revision 1.60  1999/01/07 20:25:09  curt
+// Updated struct fgGENERAL to class FGGeneral.
+//
+// Revision 1.59  1998/12/18 23:40:57  curt
+// New frame rate counting mechanism.
+//
+// Revision 1.58  1998/12/09 18:50:25  curt
+// Converted "class fgVIEW" to "class FGView" and updated to make data
+// members private and make required accessor functions.
+//
+// Revision 1.57  1998/12/06 14:52:56  curt
+// Fixed a problem with the initial starting altitude.  "v->abs_view_pos" wasn't
+// being calculated correctly at the beginning causing the first terrain
+// intersection to fail, returning a ground altitude of zero, causing the plane
+// to free fall for one frame, until the ground altitude was corrected, but now
+// being under the ground we got a big bounce and the plane always ended up
+// upside down.
+//
+// Revision 1.56  1998/12/06 13:51:23  curt
+// Turned "struct fgWEATHER" into "class FGWeather".
+//
 // Revision 1.55  1998/12/05 15:54:20  curt
 // Renamed class fgFLIGHT to class FGState as per request by JSB.
 //