#include <FDM/UIUCModel/uiuc_aircraftdir.h>
#include <GUI/gui.h>
#include <GUI/sgVec3Slider.hxx>
-#include <Joystick/joystick.hxx>
+// #include <Joystick/joystick.hxx>
#ifdef FG_NETWORK_OLK
#include <NetworkOLK/network.h>
#endif
#include <Time/sunpos.hxx>
#include <Time/tmp.hxx>
+#include <Input/input.hxx>
+
// begin - added Venky
// $$$ begin - added VS Renganathan
#include <simgear/misc/sgstream.hxx>
#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
}
+// 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;
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;
}
}
// glDisable( GL_CULL_FACE );
// glDisable( GL_TEXTURE_2D );
+ // update the input subsystem
+ current_input.update();
+
// update the controls subsystem
controls.update();
#if defined( ENABLE_PLIB_JOYSTICK )
// Read joystick and update control settings
- if ( fgGetString("/sim/control-mode") == "joystick" )
- {
- fgJoystickRead();
- }
+ // if ( fgGetString("/sim/control-mode") == "joystick" )
+ // {
+ // fgJoystickRead();
+ // }
#elif defined( ENABLE_GLUT_JOYSTICK )
// Glut joystick support works by feeding a joystick handler
// function to glut. This is taken care of once in the joystick
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() );
glutReshapeFunc( fgReshape );
// call GLUTkey() on keyboard event
- glutKeyboardFunc( GLUTkey );
- glutSpecialFunc( GLUTspecialkey );
+ glutKeyboardFunc(GLUTkey);
+ glutKeyboardUpFunc(GLUTkeyup);
+ glutSpecialFunc(GLUTspecialkey);
+ glutSpecialUpFunc(GLUTspecialkeyup);
// call guiMouseFunc() whenever our little rodent is used
glutMouseFunc ( guiMouseFunc );
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
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);