X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FMain%2Fmain.cxx;h=6f3c3bb39c1327a867e7726b6a4d0b87a3530a03;hb=76a94d8f0278eeddf692850918526df84a73429c;hp=49e90a55c24e1e6f7f4b5430211ee7022960e71d;hpb=96be3ad601f517bef7413a933a19129b5bb17b4e;p=flightgear.git diff --git a/src/Main/main.cxx b/src/Main/main.cxx index 49e90a55c..6f3c3bb39 100644 --- a/src/Main/main.cxx +++ b/src/Main/main.cxx @@ -25,6 +25,8 @@ # include #endif +#include + #ifdef SG_MATH_EXCEPTION_CLASH # include #endif @@ -123,11 +125,10 @@ int objc=0; #include "version.h" -#include "bfi.hxx" #include "fg_init.hxx" #include "fg_io.hxx" +#include "fg_props.hxx" #include "globals.hxx" -#include "keyboard.hxx" #include "splash.hxx" #ifdef macintosh @@ -312,10 +313,83 @@ void fgInitVisuals( void ) { } +// For HiRes screen Dumps using Brian Pauls TR Library +void trRenderFrame( void ) { + + if ( fgPanelVisible() ) { + GLfloat height = fgGetInt("/sim/startup/ysize"); + GLfloat view_h = + (current_panel->getViewHeight() - current_panel->getYOffset()) + * (height / 768.0) + 1; + glTranslatef( 0.0, view_h, 0.0 ); + } + + static double m_log01 = -log( 0.01 ); + static double sqrt_m_log01 = sqrt( m_log01 ); + + static GLfloat black[4] = { 0.0, 0.0, 0.0, 1.0 }; + static GLfloat white[4] = { 1.0, 1.0, 1.0, 1.0 }; + + fgLIGHT *l = &cur_light_params; + + glClearColor(l->adj_fog_color[0], l->adj_fog_color[1], + l->adj_fog_color[2], l->adj_fog_color[3]); + + glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); + + // set the opengl state to known default values + default_state->force(); + + // update fog params + double actual_visibility = thesky->get_visibility(); + // GLfloat fog_exp_density = m_log01 / actual_visibility; + GLfloat fog_exp2_density = sqrt_m_log01 / actual_visibility; + GLfloat fog_exp2_punch_through = sqrt_m_log01 / ( actual_visibility * 1.5 ); + + glEnable( GL_FOG ); + glFogf ( GL_FOG_DENSITY, fog_exp2_density); + glFogi ( GL_FOG_MODE, GL_EXP2 ); + glFogfv ( GL_FOG_COLOR, l->adj_fog_color ); + + // GL_LIGHT_MODEL_AMBIENT has a default non-zero value so if + // we only update GL_AMBIENT for our lights we will never get + // a completely dark scene. So, we set GL_LIGHT_MODEL_AMBIENT + // explicitely to black. + glLightModelfv( GL_LIGHT_MODEL_AMBIENT, black ); + + ssgGetLight( 0 ) -> setColour( GL_AMBIENT, l->scene_ambient ); + + // texture parameters + glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE ) ; + glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST ) ; + + // we need a white diffuse light for the phase of the moon + ssgGetLight( 0 ) -> setColour( GL_DIFFUSE, white ); + thesky->preDraw(); + + // draw the ssg scene + // return to the desired diffuse color + ssgGetLight( 0 ) -> setColour( GL_DIFFUSE, l->scene_diffuse ); + glEnable( GL_DEPTH_TEST ); + ssgCullAndDraw( scene ); + + // draw the lights + glFogf (GL_FOG_DENSITY, fog_exp2_punch_through); + ssgCullAndDraw( lighting ); + + thesky->postDraw( cur_fdm_state->get_Altitude() * SG_FEET_TO_METER ); + + // need to do this here as hud_and_panel state is static to + // main.cxx and HUD and Panel routines have to be called with + // knowledge of the the TR struct < see gui.cxx::HighResDump() + hud_and_panel->apply(); +} + + // Update all Visuals (redraws anything graphics related) void fgRenderFrame( void ) { - // Update the BFI. - FGBFI::update(); + // Update the default (kludged) properties. + fgUpdateProps(); fgLIGHT *l = &cur_light_params; static double last_visibility = -9999; @@ -646,9 +720,10 @@ void fgRenderFrame( void ) { if (prop_selector != NULL) { int propsel_mask = 0; + double rpm = fgGetDouble("/engines/engine[0]/rpm"); for (int i = 0; i < acmodel_npropsettings; i++) { - if (FGBFI::getRPM() >= acmodel_proprpms[i][0] && - FGBFI::getRPM() <= acmodel_proprpms[i][1]) { + if (rpm >= acmodel_proprpms[i][0] && + rpm <= acmodel_proprpms[i][1]) { propsel_mask |= 1 << i; } } @@ -951,6 +1026,8 @@ static void fgMainLoop( void ) { cur_fdm_state->get_Runway_altitude() * SG_FEET_TO_METER, cur_fdm_state->get_Altitude() * SG_FEET_TO_METER); */ + // cout << "Warp = " << globals->get_warp() << endl; + // update "time" if ( globals->get_warp_delta() != 0 ) { globals->inc_warp( globals->get_warp_delta() ); @@ -1132,20 +1209,42 @@ static void fgIdleFunction ( void ) { idle_state++; } else if ( idle_state == 1 ) { + // Initialize audio support +#ifdef ENABLE_AUDIO_SUPPORT + // Start the intro music #if !defined(WIN32) if ( fgGetBool("/sim/startup/intro-music") ) { - string lockfile = "/tmp/mpg123.running"; SGPath mp3file( globals->get_fg_root() ); mp3file.append( "Sounds/intro.mp3" ); - string command = "(touch " + lockfile + "; mpg123 " - + mp3file.str() + "> /dev/null 2>&1; /bin/rm " - + lockfile + ") &"; SG_LOG( SG_GENERAL, SG_INFO, "Starting intro music: " << mp3file.str() ); + + string command = "mpg123 " + mp3file.str() + "> /dev/null 2>&1"; system ( command.c_str() ); } +#endif // !WIN32 + + FGSoundMgr *soundmgr = new FGSoundMgr; + globals->set_soundmgr( soundmgr ); + + if ( fgGetBool("/sim/sound") ) { + globals->get_soundmgr()->init(); + + s1 = new FGSimpleSound( fgGetString("/sim/sounds/engine", + "Sounds/wasp.wav") ); + globals->get_soundmgr()->add( s1, "engine loop" ); + globals->get_soundmgr()->play_looped( "engine loop" ); + SG_LOG( SG_GENERAL, SG_INFO, + "Rate = " << s1->get_sample()->getRate() + << " Bps = " << s1->get_sample()->getBps() + << " Stereo = " << s1->get_sample()->getStereo() ); + + // s2 = new FGSimpleSound( "Sounds/corflaps.wav" ); + // s2->set_volume( 0.3 ); + // globals->get_soundmgr()->add( s2, "flaps" ); + } #endif idle_state++; @@ -1181,47 +1280,6 @@ static void fgIdleFunction ( void ) { idle_state++; } else if ( idle_state == 6 ) { - // Initialize audio support -#ifdef ENABLE_AUDIO_SUPPORT - -#if !defined(WIN32) - if ( fgGetBool("/sim/startup/intro-music") ) { - // Let's wait for mpg123 to finish - string lockfile = "/tmp/mpg123.running"; - struct stat stat_buf; - - SG_LOG( SG_GENERAL, SG_INFO, - "Waiting for mpg123 player to finish ..." ); - while ( stat(lockfile.c_str(), &stat_buf) == 0 ) { - // file exist, wait ... - sleep(1); - SG_LOG( SG_GENERAL, SG_INFO, "."); - } - SG_LOG( SG_GENERAL, SG_INFO, ""); - } -#endif // WIN32 - - if ( fgGetBool("/sim/sound") ) { - globals->get_soundmgr()->init(); - - s1 = new FGSimpleSound( fgGetString("/sim/sounds/engine", - "Sounds/wasp.wav") ); - globals->get_soundmgr()->add( s1, "engine loop" ); - globals->get_soundmgr()->play_looped( "engine loop" ); - SG_LOG( SG_GENERAL, SG_INFO, - "Rate = " << s1->get_sample()->getRate() - << " Bps = " << s1->get_sample()->getBps() - << " Stereo = " << s1->get_sample()->getStereo() ); - - s2 = new FGSimpleSound( "Sounds/corflaps.wav" ); - // FGMorse mmm; - // mmm.init(); - // s2 = mmm.make_ident( "JLI" ); - s2->set_volume( 0.3 ); - globals->get_soundmgr()->add( s2, "flaps" ); - } -#endif - // sleep(1); idle_state = 1000; @@ -1404,11 +1462,6 @@ int main( int argc, char **argv ) { SGRoute *route = new SGRoute; globals->set_route( route ); -#ifdef ENABLE_AUDIO_SUPPORT - FGSoundMgr *soundmgr = new FGSoundMgr; - globals->set_soundmgr( soundmgr ); -#endif - FGViewMgr *viewmgr = new FGViewMgr; globals->set_viewmgr( viewmgr ); @@ -1428,6 +1481,15 @@ int main( int argc, char **argv ) { // fg_root was specified (ignore all other options for now) fgInitFGRoot(argc, argv); + // Check for the correct base package version + string base_version = fgBasePackageVersion(); + if ( !(base_version == "0.7.9") ) { + SG_LOG( SG_GENERAL, SG_ALERT, "Base package check failed ... " + << "Found version " << base_version ); + SG_LOG( SG_GENERAL, SG_ALERT, "Please upgrade to version 0.7.9" ); + exit(-1); + } + // Initialize the Aircraft directory to "" (UIUC) aircraft_dir = ""; @@ -1478,14 +1540,14 @@ int main( int argc, char **argv ) { if ( fgGetString("/sim/startup/airport-id").length() ) { // fgSetPosFromAirportID( fgGetString("/sim/startup/airport-id") ); fgSetPosFromAirportIDandHdg( fgGetString("/sim/startup/airport-id"), - fgGetDouble("/orientation/heading") ); + fgGetDouble("/orientation/heading-deg") ); } // Initialize time SGPath zone( globals->get_fg_root() ); zone.append( "Timezone" ); - SGTime *t = new SGTime( fgGetDouble("/position/longitude") * SGD_DEGREES_TO_RADIANS, - fgGetDouble("/position/latitude") * SGD_DEGREES_TO_RADIANS, + SGTime *t = new SGTime( fgGetDouble("/position/longitude-deg") * SGD_DEGREES_TO_RADIANS, + fgGetDouble("/position/latitude-deg") * SGD_DEGREES_TO_RADIANS, zone.str() ); // Handle potential user specified time offsets @@ -1651,12 +1713,12 @@ int main( int argc, char **argv ) { sgMat4 rot_matrix; sgMat4 off_matrix; sgMat4 res_matrix; - float h_rot = fgGetFloat("/sim/model/h-rotation", 0.0); - float p_rot = fgGetFloat("/sim/model/p-rotation", 0.0); - float r_rot = fgGetFloat("/sim/model/r-rotation", 0.0); - float x_off = fgGetFloat("/sim/model/x-offset", 0.0); - float y_off = fgGetFloat("/sim/model/y-offset", 0.0); - float z_off = fgGetFloat("/sim/model/z-offset", 0.0); + float h_rot = fgGetFloat("/sim/model/heading-offset-deg", 0.0); + float p_rot = fgGetFloat("/sim/model/roll-offset-deg", 0.0); + float r_rot = fgGetFloat("/sim/model/pitch-offset-deg", 0.0); + float x_off = fgGetFloat("/sim/model/x-offset-m", 0.0); + float y_off = fgGetFloat("/sim/model/y-offset-m", 0.0); + float z_off = fgGetFloat("/sim/model/z-offset-m", 0.0); sgMakeRotMat4(rot_matrix, h_rot, p_rot, r_rot); sgMakeTransMat4(off_matrix, x_off, y_off, z_off); sgMultMat4(res_matrix, off_matrix, rot_matrix);