From 439779ee3673bf0534b88ad7223fca66e96273ed Mon Sep 17 00:00:00 2001 From: curt Date: Sat, 31 Jul 1999 04:58:26 +0000 Subject: [PATCH] Tweaks so that Jon's FDM stuff get's initialized better. --- src/Main/fg_init.cxx | 8 ++++++-- src/Main/main.cxx | 10 ++++++---- src/Main/options.cxx | 25 +++++++++++++++++++++++++ src/Main/options.hxx | 6 ++++++ 4 files changed, 43 insertions(+), 6 deletions(-) diff --git a/src/Main/fg_init.cxx b/src/Main/fg_init.cxx index cecf5d654..23b2f9a39 100644 --- a/src/Main/fg_init.cxx +++ b/src/Main/fg_init.cxx @@ -314,7 +314,9 @@ bool fgInitSubsystems( void ) { // and should really be read in from one or more files. // Initial Velocity - f->set_Velocities_Local( 0.0, 0.0, 0.0 ); + f->set_Velocities_Local( current_options.get_uBody(), + current_options.get_vBody(), + current_options.get_wBody()); // Initial Orientation f->set_Euler_Angles( current_options.get_roll() * DEG_TO_RAD, @@ -508,7 +510,9 @@ void fgReInitSubsystems( void ) // and should really be read in from one or more files. // Initial Velocity - f->set_Velocities_Local( 0.0, 0.0, 0.0 ); + f->set_Velocities_Local( current_options.get_uBody(), + current_options.get_vBody(), + current_options.get_wBody()); // Initial Orientation f->set_Euler_Angles( current_options.get_roll() * DEG_TO_RAD, diff --git a/src/Main/main.cxx b/src/Main/main.cxx index 894294f6c..43c998fba 100644 --- a/src/Main/main.cxx +++ b/src/Main/main.cxx @@ -407,6 +407,10 @@ static void fgRenderFrame( void ) { sgMat4 sgVIEW; + while ( current_view.follow.size() > 400 ) { + current_view.follow.pop_front(); + } + if ( current_view.view_mode == FGView::FG_VIEW_FIRST_PERSON ) { // select current view matrix sgCopyMat4( sgVIEW, current_view.sgVIEW ); @@ -417,9 +421,6 @@ static void fgRenderFrame( void ) { // select view matrix from front of view matrix queue FGMat4Wrapper tmp = current_view.follow.front(); sgCopyMat4( sgVIEW, tmp.m ); - while ( current_view.follow.size() > 40 ) { - current_view.follow.pop_front(); - } // enable TuX and set up his position and orientation penguin_sel->select(1); @@ -1129,7 +1130,8 @@ int main( int argc, char **argv ) { penguin_sel = new ssgSelector; penguin_pos = new ssgTransform; - ssgEntity *tux_obj = ssgLoadAC( "glider.ac" ); + // ssgEntity *tux_obj = ssgLoadAC( "glider.ac" ); + ssgEntity *tux_obj = ssgLoadAC( "Tower1x.ac" ); penguin_pos->addKid( tux_obj ); penguin_sel->addKid( penguin_pos ); ssgFlatten( tux_obj ); diff --git a/src/Main/options.cxx b/src/Main/options.cxx index 89abbfc4f..48bfe14ae 100644 --- a/src/Main/options.cxx +++ b/src/Main/options.cxx @@ -138,6 +138,9 @@ fgOPTIONS::fgOPTIONS() : // if it is lower than the terrain altitude(-9999.0), + // Initialize current options velocities to 0.0 + uBody(0.0), vBody(0.0), wBody(0.0), + // Initial Orientation heading(270.0), // heading (yaw) angle in degress (Psi) roll(0.0), // roll angle in degrees (Phi) @@ -592,6 +595,24 @@ int fgOPTIONS::parse_option( const string& arg ) { } else { altitude = atof( arg.substr(11) ); } + } else if ( arg.find( "--uBody=" ) != string::npos ) { + if ( units == FG_UNITS_FEET ) { + uBody = atof( arg.substr(8) ) * FEET_TO_METER; + } else { + uBody = atof( arg.substr(8) ); + } + } else if ( arg.find( "--vBody=" ) != string::npos ) { + if ( units == FG_UNITS_FEET ) { + vBody = atof( arg.substr(8) ) * FEET_TO_METER; + } else { + vBody = atof( arg.substr(8) ); + } + } else if ( arg.find( "--wBody=" ) != string::npos ) { + if ( units == FG_UNITS_FEET ) { + wBody = atof( arg.substr(8) ) * FEET_TO_METER; + } else { + wBody = atof( arg.substr(8) ); + } } else if ( arg.find( "--heading=" ) != string::npos ) { heading = atof( arg.substr(10) ); } else if ( arg.find( "--roll=" ) != string::npos ) { @@ -775,6 +796,10 @@ void fgOPTIONS::usage ( void ) { printf("\t--heading=degrees: heading (yaw) angle in degress (Psi)\n"); printf("\t--roll=degrees: roll angle in degrees (Phi)\n"); printf("\t--pitch=degrees: pitch angle in degrees (Theta)\n"); + printf("\t--uBody=feet per second: velocity along the body X axis\n"); + printf("\t--vBody=feet per second: velocity along the body Y axis\n"); + printf("\t--wBody=feet per second: velocity along the body Z axis\n"); + printf("\t\t(unless --units-meters specified\n"); printf("\n"); printf("Rendering Options:\n"); diff --git a/src/Main/options.hxx b/src/Main/options.hxx index cb20dcc28..576d75cc3 100644 --- a/src/Main/options.hxx +++ b/src/Main/options.hxx @@ -100,6 +100,9 @@ private: double heading; // heading (yaw) angle in degress (Psi) double roll; // roll angle in degrees (Phi) double pitch; // pitch angle in degrees (Theta) + double uBody; // Body axis X velocity (U) + double vBody; // Body axis Y velocity (V) + double wBody; // Body axis Z velocity (W) // Miscellaneous bool game_mode; // Game mode enabled/disabled @@ -181,6 +184,9 @@ public: inline double get_heading() const { return heading; } inline double get_roll() const { return roll; } inline double get_pitch() const { return pitch; } + inline double get_uBody() const {return uBody;} + inline double get_vBody() const {return vBody;} + inline double get_wBody() const {return wBody;} inline bool get_game_mode() const { return game_mode; } inline bool get_splash_screen() const { return splash_screen; } inline bool get_intro_music() const { return intro_music; } -- 2.39.5