]> git.mxchange.org Git - flightgear.git/blobdiff - src/Main/keyboard.cxx
One more pass at a reorg.
[flightgear.git] / src / Main / keyboard.cxx
index 5063874d0ff9d90267e9ea000e254d63f72f6294..dcf0a7057691bdce2bfc814e10f6613c87bbaee3 100644 (file)
@@ -30,7 +30,7 @@
 #endif
 
 #include <GL/glut.h>
-#include <XGL/xgl.h>
+#include <simgear/xgl/xgl.h>
 
 #if defined(FX) && defined(XMESA)
 #include <GL/xmesa.h>
 #include <stdio.h>
 #include <stdlib.h>
 
-#include <pu.h>                        // plib include
+#include <plib/pu.h>           // plib include
+
+#include <simgear/constants.h>
+#include <simgear/debug/logstream.hxx>
+#include <simgear/misc/fgpath.hxx>
 
-#include <Debug/logstream.hxx>
 #include <Aircraft/aircraft.hxx>
 #include <Astro/solarsystem.hxx>
 #include <Astro/sky.hxx>
 #include <Autopilot/autopilot.hxx>
 #include <Cockpit/hud.hxx>
 #include <GUI/gui.h>
-#include <Include/fg_constants.h>
 #include <Scenery/tilemgr.hxx>
 #include <Objects/materialmgr.hxx>
 #include <Time/fg_time.hxx>
 #include <Time/light.hxx>
 
-#ifdef FG_NEW_WEATHER
+#ifndef FG_OLD_WEATHER
 #  include <WeatherCM/FGLocalWeatherDatabase.h>
 #else
 #  include <Weather/weather.hxx>
@@ -62,6 +64,7 @@
 
 #include "keyboard.hxx"
 #include "options.hxx"
+#include "save.hxx"
 #include "views.hxx"
 
 extern void NewAltitude( puObject *cb );
@@ -118,6 +121,15 @@ void GLUTkey(unsigned char k, int x, int y) {
        case 20: // Ctrl-T key
            fgAPToggleTerrainFollow();
            return;
+       case 21: // Ctrl-U key
+           // add 1000' of emergency altitude.  Possibly good for 
+           // unflipping yourself :-)
+           {
+               double alt = cur_fdm_state->get_Altitude() + 1000;
+               fgFDMForceAltitude( current_options.get_flight_model(), 
+                                   alt * FEET_TO_METER );
+           }
+           return;
        case 49: // numeric keypad 1
            v->set_goal_view_offset( FG_PI * 0.75 );
            return;
@@ -189,7 +201,7 @@ void GLUTkey(unsigned char k, int x, int y) {
            v->force_update_fov_math();
            return;
        case 90: // Z key
-#ifdef FG_NEW_WEATHER
+#ifndef FG_OLD_WEATHER
            tmp = WeatherDatabase->getWeatherVisibility();
            tmp /= 1.10;
            WeatherDatabase->setWeatherVisibility( tmp );
@@ -262,6 +274,16 @@ void GLUTkey(unsigned char k, int x, int y) {
                controls.move_throttle( FGControls::ALL_ENGINES, -0.01 );
            }
            return;
+       case 91: // [ key
+           controls.move_flaps(-0.34);
+           FG_LOG( FG_INPUT, FG_INFO,
+                   "Set flaps to " << controls.get_flaps() );
+           return;
+       case 93: // ] key
+           controls.move_flaps(0.34);
+           FG_LOG( FG_INPUT, FG_INFO,
+                   "Set flaps to " << controls.get_flaps() );
+           return;
        case 97: // a key
            speed = current_options.get_speed_up();
            speed++;
@@ -286,15 +308,27 @@ void GLUTkey(unsigned char k, int x, int y) {
            return;
        case 112: // p key
            t->togglePauseMode();
-           // printf position and attitude information
-           FG_LOG( FG_INPUT, FG_INFO,
-                   "Lon = " << f->get_Longitude() * RAD_TO_DEG
-                   << "  Lat = " << f->get_Latitude() * RAD_TO_DEG
-                   << "  Altitude = " << f->get_Altitude() * FEET_TO_METER );
-           FG_LOG( FG_INPUT, FG_INFO,
-                   "Heading = " << f->get_Psi() * RAD_TO_DEG 
-                   << "  Roll = " << f->get_Phi() * RAD_TO_DEG
-                   << "  Pitch = " << f->get_Theta() * RAD_TO_DEG );
+
+           {
+               FGBucket p( f->get_Longitude() * RAD_TO_DEG,
+                           f->get_Latitude() * RAD_TO_DEG );
+               FGPath tile_path( current_options.get_fg_root() );
+               tile_path.append( "Scenery" );
+               tile_path.append( p.gen_base_path() );
+               tile_path.append( p.gen_index_str() );
+
+               // printf position and attitude information
+               FG_LOG( FG_INPUT, FG_INFO,
+                       "Lon = " << f->get_Longitude() * RAD_TO_DEG
+                       << "  Lat = " << f->get_Latitude() * RAD_TO_DEG
+                       << "  Altitude = " << f->get_Altitude() * FEET_TO_METER
+                       );
+               FG_LOG( FG_INPUT, FG_INFO,
+                       "Heading = " << f->get_Psi() * RAD_TO_DEG 
+                       << "  Roll = " << f->get_Phi() * RAD_TO_DEG
+                       << "  Pitch = " << f->get_Theta() * RAD_TO_DEG );
+               FG_LOG( FG_INPUT, FG_INFO, tile_path.c_str());
+           }
            return;
        case 116: // t key
            t->adjust_warp_delta (+30);
@@ -313,7 +347,7 @@ void GLUTkey(unsigned char k, int x, int y) {
            v->force_update_fov_math();
            return;
        case 122: // z key
-#ifdef FG_NEW_WEATHER
+#ifndef FG_OLD_WEATHER
            tmp = WeatherDatabase->getWeatherVisibility();
            tmp *= 1.10;
            WeatherDatabase->setWeatherVisibility( tmp );
@@ -351,6 +385,27 @@ void GLUTspecialkey(int k, int x, int y) {
     if ( GLUT_ACTIVE_SHIFT && glutGetModifiers() ) {
        FG_LOG( FG_INPUT, FG_DEBUG, " SHIFTED" );
        switch (k) {
+       case GLUT_KEY_F1: {
+           ifstream input("fgfs.sav");
+           if (input.good() && fgLoadFlight(input)) {
+               input.close();
+               FG_LOG(FG_INPUT, FG_INFO, "Restored flight from fgfs.sav");
+           } else {
+               FG_LOG(FG_INPUT, FG_ALERT, "Cannot load flight from fgfs.sav");
+           }
+           return;
+       }
+       case GLUT_KEY_F2: {
+           FG_LOG(FG_INPUT, FG_INFO, "Saving flight");
+           ofstream output("fgfs.sav");
+           if (output.good() && fgSaveFlight(output)) {
+               output.close();
+               FG_LOG(FG_INPUT, FG_INFO, "Saved flight to fgfs.sav");
+           } else {
+               FG_LOG(FG_INPUT, FG_ALERT, "Cannot save flight to fgfs.sav");
+           }
+           return;
+       }
        case GLUT_KEY_END: // numeric keypad 1
            v->set_goal_view_offset( FG_PI * 0.75 );
            return;
@@ -400,9 +455,12 @@ void GLUTspecialkey(int k, int x, int y) {
                    t->togglePauseMode();
                return;
            }
+       case GLUT_KEY_F3: // F3 Take a screen shot
+           fgDumpSnapShot();
+           return;
         case GLUT_KEY_F6: // F6 toggles Autopilot target location
-                fgAPToggleWayPoint();
-                return;
+           fgAPToggleWayPoint();
+           return;
        case GLUT_KEY_F8: // F8 toggles fog ... off fastest nicest...
            current_options.cycle_fog();
        
@@ -425,12 +483,10 @@ void GLUTspecialkey(int k, int x, int y) {
            if ( material_mgr.loaded() ) {
                if (current_options.get_textures()) {
                    current_options.set_textures(false);
-                   glDisable(GL_TEXTURE_2D);
-                   ssgOverrideTexture(true);
+                   material_mgr.set_step(1);
                } else {
                    current_options.set_textures(true);
-                   glEnable(GL_TEXTURE_2D);
-                   ssgOverrideTexture(false);
+                   material_mgr.set_step(0);
                }
                FG_LOG( FG_INPUT, FG_INFO, "Toggling texture" );
            } else {