return;
case 49: // numeric keypad 1
v->set_goal_view_offset( FG_PI * 0.75 );
+ if (current_options.get_view_mode() == fgOPTIONS::FG_VIEW_FOLLOW) {
+ pilot_view.set_pilot_offset(-25.0, 25.0, 1.0);
+ v->set_view_offset( FG_PI * 0.75 );
+ }
return;
case 50: // numeric keypad 2
v->set_goal_view_offset( FG_PI );
+ if (current_options.get_view_mode() == fgOPTIONS::FG_VIEW_FOLLOW) {
+ pilot_view.set_pilot_offset(-25.0, 0.0, 1.0);
+ v->set_view_offset( FG_PI );
+ }
return;
case 51: // numeric keypad 3
v->set_goal_view_offset( FG_PI * 1.25 );
+ if (current_options.get_view_mode() == fgOPTIONS::FG_VIEW_FOLLOW) {
+ pilot_view.set_pilot_offset(-25.0, -25.0, 1.0);
+ v->set_view_offset( FG_PI * 1.25 );
+ }
return;
case 52: // numeric keypad 4
v->set_goal_view_offset( FG_PI * 0.50 );
+ if (current_options.get_view_mode() == fgOPTIONS::FG_VIEW_FOLLOW) {
+ pilot_view.set_pilot_offset(0.0, 25.0, 1.0);
+ v->set_view_offset( FG_PI * 0.50 );
+ }
return;
case 54: // numeric keypad 6
v->set_goal_view_offset( FG_PI * 1.50 );
+ if (current_options.get_view_mode() == fgOPTIONS::FG_VIEW_FOLLOW) {
+ pilot_view.set_pilot_offset(0.0, -25.0, 1.0);
+ v->set_view_offset( FG_PI * 1.50 );
+ }
return;
case 55: // numeric keypad 7
v->set_goal_view_offset( FG_PI * 0.25 );
+ if (current_options.get_view_mode() == fgOPTIONS::FG_VIEW_FOLLOW) {
+ pilot_view.set_pilot_offset(25.0, 25.0, 1.0);
+ v->set_view_offset( FG_PI * 0.25 );
+ }
return;
case 56: // numeric keypad 8
v->set_goal_view_offset( 0.00 );
+ if (current_options.get_view_mode() == fgOPTIONS::FG_VIEW_FOLLOW) {
+ pilot_view.set_pilot_offset(25.0, 0.0, 1.0);
+ v->set_view_offset( 0.00 );
+ }
return;
case 57: // numeric keypad 9
v->set_goal_view_offset( FG_PI * 1.75 );
+ if (current_options.get_view_mode() == fgOPTIONS::FG_VIEW_FOLLOW) {
+ pilot_view.set_pilot_offset(25.0, -25.0, 1.0);
+ v->set_view_offset( FG_PI * 1.75 );
+ }
return;
case 65: // A key
speed = current_options.get_speed_up();
fgUpdateSkyAndLightingParams();
return;
case 118: // v key
- current_options.cycle_view_mode();
+// current_options.cycle_view_mode();
+ if (current_options.get_view_mode() == fgOPTIONS::FG_VIEW_FOLLOW) {
+ current_options.set_view_mode(fgOPTIONS::FG_VIEW_PILOT);
+ v->set_goal_view_offset( 0.0 );
+ v->set_view_offset( 0.0 );
+ } else if (current_options.get_view_mode() ==
+ fgOPTIONS::FG_VIEW_PILOT) {
+ current_options.set_view_mode(fgOPTIONS::FG_VIEW_FOLLOW);
+ v->set_goal_view_offset( FG_PI * 1.75 );
+ v->set_view_offset( FG_PI * 1.75 );
+ pilot_view.set_pilot_offset(25.0, -25.0, 1.0);
+ }
+ fgReshape( current_view.get_winWidth(),
+ current_view.get_winHeight() );
return;
case 120: // x key
fov = current_options.get_fov();
}
case GLUT_KEY_END: // numeric keypad 1
v->set_goal_view_offset( FG_PI * 0.75 );
+ if (current_options.get_view_mode() == fgOPTIONS::FG_VIEW_FOLLOW) {
+ pilot_view.set_pilot_offset(-25.0, 25.0, 1.0);
+ v->set_view_offset( FG_PI * 0.75 );
+ }
return;
case GLUT_KEY_DOWN: // numeric keypad 2
v->set_goal_view_offset( FG_PI );
+ if (current_options.get_view_mode() == fgOPTIONS::FG_VIEW_FOLLOW) {
+ pilot_view.set_pilot_offset(-25.0, 0.0, 1.0);
+ v->set_view_offset( FG_PI );
+ }
return;
case GLUT_KEY_PAGE_DOWN: // numeric keypad 3
v->set_goal_view_offset( FG_PI * 1.25 );
+ if (current_options.get_view_mode() == fgOPTIONS::FG_VIEW_FOLLOW) {
+ pilot_view.set_pilot_offset(-25.0, -25.0, 1.0);
+ v->set_view_offset( FG_PI * 1.25 );
+ }
return;
case GLUT_KEY_LEFT: // numeric keypad 4
v->set_goal_view_offset( FG_PI * 0.50 );
+ if (current_options.get_view_mode() == fgOPTIONS::FG_VIEW_FOLLOW) {
+ pilot_view.set_pilot_offset(0.0, 25.0, 1.0);
+ v->set_view_offset( FG_PI * 0.50 );
+ }
return;
case GLUT_KEY_RIGHT: // numeric keypad 6
v->set_goal_view_offset( FG_PI * 1.50 );
+ if (current_options.get_view_mode() == fgOPTIONS::FG_VIEW_FOLLOW) {
+ pilot_view.set_pilot_offset(0.0, -25.0, 1.0);
+ v->set_view_offset( FG_PI * 1.50 );
+ }
return;
case GLUT_KEY_HOME: // numeric keypad 7
v->set_goal_view_offset( FG_PI * 0.25 );
+ if (current_options.get_view_mode() == fgOPTIONS::FG_VIEW_FOLLOW) {
+ pilot_view.set_pilot_offset(25.0, 25.0, 1.0);
+ v->set_view_offset( FG_PI * 0.25 );
+ }
return;
case GLUT_KEY_UP: // numeric keypad 8
v->set_goal_view_offset( 0.00 );
+ if (current_options.get_view_mode() == fgOPTIONS::FG_VIEW_FOLLOW) {
+ pilot_view.set_pilot_offset(25.0, 0.0, 1.0);
+ v->set_view_offset( 0.00 );
+ }
return;
case GLUT_KEY_PAGE_UP: // numeric keypad 9
v->set_goal_view_offset( FG_PI * 1.75 );
+ if (current_options.get_view_mode() == fgOPTIONS::FG_VIEW_FOLLOW) {
+ pilot_view.set_pilot_offset(25.0, -25.0, 1.0);
+ v->set_view_offset( FG_PI * 1.75 );
+ }
return;
}
} else {
// update view volume parameters
// cout << "before pilot_view update" << endl;
+ if ( current_options.get_view_mode() == fgOPTIONS::FG_VIEW_FOLLOW ) {
+ float * offset = pilot_view.get_pilot_offset();
+ current_view.set_pilot_offset(offset[0], offset[1], offset[2]);
+ } else {
+ current_view.set_pilot_offset(0.0, 0.0, 0.0);
+ }
pilot_view.UpdateViewParams(*cur_fdm_state);
// cout << "after pilot_view update" << endl;
current_view.UpdateViewParams(cur_view_fdm);
// options.cxx needs to see this for toggle_panel()
// Handle new window size or exposure
void fgReshape( int width, int height ) {
- if ( ! current_options.get_panel_status() || idle_state != 1000 ) {
+ if ( ! fgPanelVisible() || idle_state != 1000 ) {
current_view.set_win_ratio( (float)height / (float)width );
glViewport(0, 0 , (GLint)(width), (GLint)(height) );
} else {
//
FGPath modelpath( current_options.get_fg_root() );
- modelpath.append( "Models" );
- modelpath.append( "Geometry" );
+ // modelpath.append( "Models" );
+ // modelpath.append( "Geometry" );
FGPath texturepath( current_options.get_fg_root() );
texturepath.append( "Models" );
// temporary visible aircraft "own ship"
penguin_sel = new ssgSelector;
penguin_pos = new ssgTransform;
- // ssgBranch *tux_obj = ssgMakeSphere( 10.0, 10, 10 );
- ssgEntity *tux_obj = ssgLoadAC( "glider.ac" );
- // ssgEntity *tux_obj = ssgLoadAC( "Tower1x.ac" );
-
- penguin_pos->addKid( tux_obj );
+ string tux_path =
+ current_properties.getStringValue("/sim/model/path",
+ "Models/Geometry/glider.ac");
+ ssgEntity *tux_obj = ssgLoad((char *)(tux_path.c_str()));
+
+ // align the model properly for FGFS
+ ssgTransform *tux_align = new ssgTransform;
+ tux_align->addKid(tux_obj);
+ sgMat4 tux_matrix;
+ float h_rot =
+ current_properties.getFloatValue("/sim/model/h-rotation", 0.0);
+ float p_rot =
+ current_properties.getFloatValue("/sim/model/p-rotation", 0.0);
+ float r_rot =
+ current_properties.getFloatValue("/sim/model/r-rotation", 0.0);
+ sgMakeRotMat4(tux_matrix, h_rot, h_rot, r_rot);
+ tux_align->setTransform(tux_matrix);
+
+ penguin_pos->addKid( tux_align );
penguin_sel->addKid( penguin_pos );
ssgFlatten( tux_obj );
ssgStripify( penguin_sel );