// 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;
-
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 ...
// prime the frame rate counter pump
for ( i = 0; i < FG_FRAME_RATE_HISTORY; i++ ) {
- g->frames[i] = 0.0;
+ general.frames[i] = 0.0;
}
return ( 1 );
// Returns non-zero if a problem encountered.
int fgInitSubsystems( void )
{
- fgFLIGHT *f;
+ FGState *f;
fgLIGHT *l;
fgTIME *t;
fgVIEW *v;
// 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
+ // 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);
+ geod_pos = Point3D( f->get_Longitude(), f->get_Latitude(), 0.0);
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 );
scenery.cur_elev =
- fgTileMgrCurElev( FG_Longitude, FG_Latitude, abs_view_pos );
+ fgTileMgrCurElevOLD( f->get_Longitude(),
+ f->get_Latitude(),
+ 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) << ")" );
+ << (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
// 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->abs_view_pos );
v->UpdateWorldToEye(f);
// Build the solar system
// 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
// $Log$
+// 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.