#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>
// Set initial position and orientation
int fgInitPosition( void ) {
string id;
- fgFLIGHT *f;
+ FGState *f;
- f = current_aircraft.flight;
+ f = current_aircraft.fdm_state;
id = current_options.get_airport_id();
if ( id.length() ) {
"Failed to find " << id << " in database." );
exit(-1);
} else {
- FG_Longitude = a.longitude * DEG_TO_RAD;
- FG_Latitude = a.latitude * DEG_TO_RAD;
+ f->set_Longitude( a.longitude * DEG_TO_RAD );
+ f->set_Latitude( a.latitude * DEG_TO_RAD );
}
} else {
// set initial position from default or command line coordinates
- FG_Longitude = current_options.get_lon() * DEG_TO_RAD;
- FG_Latitude = current_options.get_lat() * DEG_TO_RAD;
+ f->set_Longitude( current_options.get_lon() * DEG_TO_RAD );
+ f->set_Latitude( current_options.get_lat() * DEG_TO_RAD );
}
FG_LOG( FG_GENERAL, FG_INFO,
"starting altitude is = " << current_options.get_altitude() );
- FG_Altitude = current_options.get_altitude() * METER_TO_FEET;
- FG_Runway_altitude = FG_Altitude - 3.758099;
+ f->set_Altitude( current_options.get_altitude() * METER_TO_FEET );
+ f->set_Runway_altitude( f->get_Altitude() - 3.758099 );
FG_LOG( FG_GENERAL, FG_INFO,
"Initial position is: ("
- << (FG_Longitude * RAD_TO_DEG) << ", "
- << (FG_Latitude * RAD_TO_DEG) << ", "
- << (FG_Altitude * FEET_TO_METER) << ")" );
+ << (f->get_Longitude() * RAD_TO_DEG) << ", "
+ << (f->get_Latitude() * RAD_TO_DEG) << ", "
+ << (f->get_Altitude() * FEET_TO_METER) << ")" );
return(1);
}
// General house keeping initializations
int fgInitGeneral( void ) {
- fgGENERAL *g;
string root;
- int i;
-
- g = &general;
-
- // set default log levels
- fglog().setLogLevels( FG_ALL, FG_INFO );
+ // int i;
FG_LOG( FG_GENERAL, FG_INFO, "General Initialization" );
FG_LOG( FG_GENERAL, FG_INFO, "======= ==============" );
- g->glVendor = (char *)glGetString ( GL_VENDOR );
- g->glRenderer = (char *)glGetString ( GL_RENDERER );
- g->glVersion = (char *)glGetString ( GL_VERSION );
-
root = current_options.get_fg_root();
if ( ! root.length() ) {
// No root path set? Then bail ...
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++ ) {
- g->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 )
{
- fgFLIGHT *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, "========== ==========");
// allocates structures so must happen before any of the flight
// model or control parameters are set
fgAircraftInit(); // In the future this might not be the case.
- f = current_aircraft.flight;
+ f = current_aircraft.fdm_state;
// set the initial position
fgInitPosition();
exit(-1);
}
+ // 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 :-)
- geod_pos = Point3D( FG_Longitude, FG_Latitude, 0.0);
- abs_view_pos = fgGeodToCart(geod_pos);
+ geod_pos = Point3D( f->get_Longitude(), f->get_Latitude(), 0.0);
+ tmp_abs_view_pos = fgGeodToCart(geod_pos);
- // Calculate ground elevation at starting point
FG_LOG( FG_GENERAL, FG_DEBUG,
- "Altitude before update " << scenery.cur_elev );
+ "Altitude before update " << scenery.cur_elev );
+ FG_LOG( FG_GENERAL, FG_DEBUG,
+ "Initial abs_view_pos = " << tmp_abs_view_pos );
scenery.cur_elev =
- fgTileMgrCurElev( FG_Longitude, FG_Latitude, abs_view_pos );
+ fgTileMgrCurElevOLD( f->get_Longitude(),
+ f->get_Latitude(),
+ tmp_abs_view_pos );
FG_LOG( FG_GENERAL, FG_DEBUG,
"Altitude after update " << scenery.cur_elev );
- FG_Runway_altitude = scenery.cur_elev * METER_TO_FEET;
+ f->set_Runway_altitude( scenery.cur_elev * METER_TO_FEET );
// Reset our altitude if we are below ground
- if ( FG_Altitude < FG_Runway_altitude + 3.758099) {
- FG_Altitude = FG_Runway_altitude + 3.758099;
+ if ( f->get_Altitude() < f->get_Runway_altitude() + 3.758099) {
+ f->set_Altitude( f->get_Runway_altitude() + 3.758099 );
}
FG_LOG( FG_GENERAL, FG_INFO,
"Updated position (after elevation adj): ("
- << (FG_Latitude * RAD_TO_DEG) << ", "
- << (FG_Longitude * RAD_TO_DEG) << ", "
- << (FG_Altitude * FEET_TO_METER) << ")" );
- // end of thing that I just stuck in that I should probably move
-
+ << (f->get_Latitude() * RAD_TO_DEG) << ", "
+ << (f->get_Longitude() * RAD_TO_DEG) << ", "
+ << (f->get_Altitude() * FEET_TO_METER) << ")" );
+
+ // 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.
// Initial Velocity
- FG_V_north = 0.0; // 7.287719E+00
- FG_V_east = 0.0; // 1.521770E+03
- FG_V_down = 0.0; // -1.265722E-05
+ f->set_Velocities_Local( 0.0, 0.0, 0.0 );
// Initial Orientation
- FG_Phi = current_options.get_roll() * DEG_TO_RAD;
- FG_Theta = current_options.get_pitch() * DEG_TO_RAD;
- FG_Psi = current_options.get_heading() * DEG_TO_RAD;
+ f->set_Euler_Angles( current_options.get_roll() * DEG_TO_RAD,
+ current_options.get_pitch() * DEG_TO_RAD,
+ current_options.get_heading() * DEG_TO_RAD );
- // Initial Angular B rates
- FG_P_body = 7.206685E-05;
- FG_Q_body = 0.000000E+00;
- FG_R_body = 9.492658E-05;
+ // Initial Angular Body rates
+ f->set_Omega_Body( 7.206685E-05, 0.0, 9.492658E-05 );
- FG_Earth_position_angle = 0.000000E+00;
+ f->set_Earth_position_angle( 0.0 );
// Mass properties and geometry values
- FG_Mass = 8.547270E+01;
- FG_I_xx = 1.048000E+03;
- FG_I_yy = 3.000000E+03;
- FG_I_zz = 3.530000E+03;
- FG_I_xz = 0.000000E+00;
+ f->set_Inertias( 8.547270E+01,
+ 1.048000E+03, 3.000000E+03, 3.530000E+03, 0.000000E+00 );
// CG position w.r.t. ref. point
- FG_Dx_cg = 0.000000E+00;
- FG_Dy_cg = 0.000000E+00;
- FG_Dz_cg = 0.000000E+00;
+ f->set_CG_Position( 0.0, 0.0, 0.0 );
// Initialize the event manager
global_events.Init();
v->Init();
FG_LOG( FG_GENERAL, FG_DEBUG, "After v->init()");
v->UpdateViewMath(f);
+ 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(), f,
+ fgFlightModelInit( 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
// eventually
- scenery.cur_elev = FG_Runway_altitude * FEET_TO_METER;
+ scenery.cur_elev = f->get_Runway_altitude() * FEET_TO_METER;
- if ( FG_Altitude < FG_Runway_altitude + 3.758099) {
- FG_Altitude = FG_Runway_altitude + 3.758099;
+ if ( f->get_Altitude() < f->get_Runway_altitude() + 3.758099) {
+ f->set_Altitude( f->get_Runway_altitude() + 3.758099 );
}
FG_LOG( FG_GENERAL, FG_INFO,
"Updated position (after elevation adj): ("
- << (FG_Latitude * RAD_TO_DEG) << ", "
- << (FG_Longitude * RAD_TO_DEG) << ", "
- << (FG_Altitude * FEET_TO_METER) << ")" );
+ << (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
// Joystick support
// Autopilot init added here, by Jeff Goeke-Smith
fgAPInit(¤t_aircraft);
-
+
+ // Initialize serial ports
+ fgSerialInit();
+
FG_LOG( FG_GENERAL, FG_INFO, endl);
return(1);
// $Log$
+// 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.
+//
+// Revision 1.54 1998/12/05 14:19:53 curt
+// Looking into a problem with cur_view_params.abs_view_pos initialization.
+//
+// Revision 1.53 1998/12/03 04:25:05 curt
+// Working on fixing up new fgFLIGHT class.
+//
+// Revision 1.52 1998/12/03 01:17:17 curt
+// Converted fgFLIGHT to a class.
+//
+// Revision 1.51 1998/11/20 01:02:37 curt
+// Try to detect Mesa/Glide/Voodoo and chose the appropriate resolution.
+//
+// Revision 1.50 1998/11/16 14:00:01 curt
+// Added pow() macro bug work around.
+// Added support for starting FGFS at various resolutions.
+// Added some initial serial port support.
+// Specify default log levels in main().
+//
// Revision 1.49 1998/11/11 00:24:02 curt
// Added Michael Johnson's audio patches for testing.
// Also did a few tweaks to avoid numerical problems when starting at a place