#include <string>
#include <Include/fg_constants.h>
-#include <Include/general.h>
#include <Aircraft/aircraft.hxx>
#include <Airports/simple.hxx>
#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>
"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: ("
// 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, "======= ==============" );
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 );
}
// 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 = ¤t_view;
+ FGState *f; // assigned later
+ fgLIGHT *l = &cur_light_params;
+ fgTIME *t = &cur_time_params;
+ FGView *v = ¤t_view;
+ Point3D geod_pos, tmp_abs_view_pos;
FG_LOG( FG_GENERAL, FG_INFO, "Initialize Subsystems");
FG_LOG( FG_GENERAL, FG_INFO, "========== ==========");
}
// Calculate ground elevation at starting point (we didn't have
- // abs_view_pos calculated when fgTileMgrUpdate() was called above
+ // 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 :-)
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 );
+ FG_LOG( FG_GENERAL, FG_DEBUG,
+ "Initial abs_view_pos = " << tmp_abs_view_pos );
scenery.cur_elev =
fgTileMgrCurElevOLD( f->get_Longitude(),
f->get_Latitude(),
- abs_view_pos );
+ 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
if ( f->get_Altitude() < f->get_Runway_altitude() + 3.758099) {
<< (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.
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
fgEVENT::FG_EVENT_READY, 30000 );
// Initialize the weather modeling subsystem
- fgWeatherInit();
+ current_weather.Init();
// Initialize the Cockpit subsystem
if( fgCockpitInit( ¤t_aircraft )) {
// 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
// $Log$
+// 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.
//