]> git.mxchange.org Git - flightgear.git/blobdiff - Main/GLUTmain.cxx
Converted to new logstream debugging facility. This allows release
[flightgear.git] / Main / GLUTmain.cxx
index e02993935b1834a3709ac7ea1d28388bef6475d9..96e687323748c4c3870db68d7d3feeccf234c474 100644 (file)
@@ -1,10 +1,8 @@
-
-//
 // GLUTmain.cxx -- top level sim routines
 //
 // Written by Curtis Olson for OpenGL, started May 1997.
 //
-// Copyright (C) 1997  Curtis L. Olson  - curt@infoplane.com
+// Copyright (C) 1997  Curtis L. Olson  - curt@me.umn.edu
 //
 // This program is free software; you can redistribute it and/or
 // modify it under the terms of the GNU General Public License as
@@ -52,7 +50,7 @@
 #include <Include/fg_constants.h>  // for VERSION
 #include <Include/general.h>
 
-#include <Aircraft/aircraft.h>
+#include <Aircraft/aircraft.hxx>
 #include <Astro/sky.hxx>
 #include <Astro/stars.hxx>
 #include <Astro/solarsystem.hxx>
 #  include <Audio/src/sm.h>
 #endif
 
+#include <Autopilot/autopilot.hxx>
 #include <Cockpit/cockpit.hxx>
-#include <Debug/fg_debug.h>
+#include <Debug/logstream.hxx>
 #include <GUI/gui.h>
-#include <Joystick/joystick.h>
-#include <Math/fg_geodesy.h>
+#include <Joystick/joystick.hxx>
+#include <Math/fg_geodesy.hxx>
 #include <Math/mat3.h>
 #include <Math/polar3d.hxx>
 #include <PUI/pu.h>
@@ -76,7 +75,7 @@
 #include <Time/fg_time.hxx>
 #include <Time/fg_timer.hxx>
 #include <Time/sunpos.hxx>
-#include <Weather/weather.h>
+#include <Weather/weather.hxx>
 
 #include "GLUTkey.hxx"
 #include "fg_init.hxx"
@@ -301,7 +300,7 @@ static void fgRenderFrame( void ) {
        // setup transformation for drawing astronomical objects
        xglPushMatrix();
        // Translate to view position
-       xglTranslatef( v->view_pos.x, v->view_pos.y, v->view_pos.z );
+       xglTranslatef( v->view_pos.x(), v->view_pos.y(), v->view_pos.z() );
        // Rotate based on gst (sidereal time)
        // note: constant should be 15.041085, Curt thought it was 15
        angle = t->gst * 15.041085;
@@ -391,6 +390,9 @@ void fgUpdateTimeDepCalcs(int multi_loop) {
     }
 
     if ( !t->pause ) {
+       // run Autopilot system
+       fgAPRun();
+
        // printf("updating flight model x %d\n", multi_loop);
        fgFlightModelUpdate(current_options.get_flight_model(), f, multi_loop);
     } else {
@@ -454,7 +456,6 @@ static const double alt_adjust_m = alt_adjust_ft * FEET_TO_METER;
 // What should we do when we have nothing else to do?  Let's get ready
 // for the next move and update the display?
 static void fgMainLoop( void ) {
-    fgCONTROLS *c;
     fgFLIGHT *f;
     fgGENERAL *g;
     fgTIME *t;
@@ -462,16 +463,15 @@ static void fgMainLoop( void ) {
     int elapsed, multi_loop;
     int i;
     double accum;
-    // double joy_x, joy_y;
-    // int joy_b1, joy_b2;
 
-    c = &cur_control_params;
     f = current_aircraft.flight;
     g = &general;
     t = &cur_time_params;
 
-    fgPrintf( FG_ALL, FG_DEBUG, "Running Main Loop\n");
-    fgPrintf( FG_ALL, FG_DEBUG, "======= ==== ====\n");
+    FG_LOG( FG_ALL, FG_DEBUG, "Running Main Loop");
+    FG_LOG( FG_ALL, FG_DEBUG, "======= ==== ====");
+
+    fgWeatherUpdate();
 
     // Fix elevation.  I'm just sticking this here for now, it should
     // probably move eventually
@@ -492,9 +492,9 @@ static void fgMainLoop( void ) {
            fgFlightModelSetAltitude( current_options.get_flight_model(), f, 
                                      scenery.cur_elev + alt_adjust_m );
 
-           fgPrintf( FG_ALL, FG_BULK, 
-                     "<*> resetting altitude to %.0f meters\n", 
-                     FG_Altitude * FEET_TO_METER);
+           FG_LOG( FG_ALL, FG_BULK, 
+                   "<*> resetting altitude to " 
+                   << FG_Altitude * FEET_TO_METER << " meters" );
        }
        FG_Runway_altitude = scenery.cur_elev * METER_TO_FEET;
     }
@@ -507,18 +507,20 @@ static void fgMainLoop( void ) {
     // update "time"
     fgTimeUpdate(f, t);
 
-    // Read joystick
-    /* fgJoystickRead( &joy_x, &joy_y, &joy_b1, &joy_b2 );
-    printf( "Joystick X %f  Y %f  B1 %d  B2 %d\n",  
-           joy_x, joy_y, joy_b1, joy_b2 );
-    fgElevSet( -joy_y );
-    fgAileronSet( joy_x ); */
+#if defined( ENABLE_LINUX_JOYSTICK )
+    // Read joystick and update control settings
+    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
+    // init routine and we don't have to worry about it again.
+#endif
 
     // Get elapsed time for this past frame
     elapsed = fgGetTimeInterval();
-    fgPrintf( FG_ALL, FG_BULK, 
-             "Time interval is = %d, previous remainder is = %d\n", 
-             elapsed, remainder);
+    FG_LOG( FG_ALL, FG_BULK, 
+           "Time interval is = " << elapsed 
+           << ", previous remainder is = " << remainder );
 
     // Calculate frame rate average
     if ( elapsed > 0.0 ) {
@@ -536,15 +538,15 @@ static void fgMainLoop( void ) {
     }
 
     // Calculate model iterations needed for next frame
-    fgPrintf( FG_ALL, FG_DEBUG, 
-             "--> Frame rate is = %.2f\n", g->frame_rate);
+    FG_LOG( FG_ALL, FG_DEBUG, 
+           "--> Frame rate is = " << g->frame_rate );
     elapsed += remainder;
 
     multi_loop = (int)(((float)elapsed * 0.001) * DEFAULT_MODEL_HZ);
     remainder = elapsed - ((multi_loop*1000) / DEFAULT_MODEL_HZ);
-    fgPrintf( FG_ALL, FG_BULK, 
-             "Model iterations needed = %d, new remainder = %d\n", 
-             multi_loop, remainder);
+    FG_LOG( FG_ALL, FG_BULK, 
+           "Model iterations needed = " << multi_loop
+           << ", new remainder = " << remainder );
        
     /* printf("right before fm - ground = %.2f  runway = %.2f  alt = %.2f\n",
           scenery.cur_elev,
@@ -572,8 +574,8 @@ static void fgMainLoop( void ) {
 
     // Run audio scheduler
 #ifdef ENABLE_AUDIO_SUPPORT
-    if ( current_options.get_sound() ) {
-       double param = c->throttle[0] * 2.0 + 1.0;
+    if ( current_options.get_sound() && audio_sched->working() ) {
+       double param = controls.get_throttle( 0 ) * 2.0 + 1.0;
 
        pitch_envelope.setStep  ( 0, 0.01, param );
        volume_envelope.setStep ( 0, 0.01, param );
@@ -585,7 +587,7 @@ static void fgMainLoop( void ) {
     // redraw display
     fgRenderFrame();
 
-    fgPrintf( FG_ALL, FG_DEBUG, "\n");
+    FG_LOG( FG_ALL, FG_DEBUG, "" );
 }
 
 
@@ -619,8 +621,8 @@ static void fgIdleFunction ( void ) {
                "/Sounds/intro.mp3";
            string command = "(touch " + lockfile + "; mpg123 " + mp3file +
                 "> /dev/null 2>&1; /bin/rm " + lockfile + ") &";
-           fgPrintf( FG_GENERAL, FG_INFO, 
-                     "Starting intro music: %s\n", mp3file.c_str() );
+           FG_LOG( FG_GENERAL, FG_INFO, 
+                   "Starting intro music: " << mp3file );
            system ( command.c_str() );
        }
 #endif
@@ -643,8 +645,9 @@ static void fgIdleFunction ( void ) {
        // a subsystem to flight gear, its initialization call should
        // located in this routine.
        if( !fgInitSubsystems()) {
-           fgPrintf( FG_GENERAL, FG_EXIT,
-                     "Subsystem initializations failed ...\n" );
+           FG_LOG( FG_GENERAL, FG_ALERT,
+                   "Subsystem initializations failed ..." );
+           exit(-1);
        }
 
        idle_state++;
@@ -672,14 +675,14 @@ static void fgIdleFunction ( void ) {
            string lockfile = "/tmp/mpg123.running";
            struct stat stat_buf;
 
-           fgPrintf( FG_GENERAL, FG_INFO, 
-                     "Waiting for mpg123 player to finish ...\n" );
+           FG_LOG( FG_GENERAL, FG_INFO, 
+                   "Waiting for mpg123 player to finish ..." );
            while ( stat(lockfile.c_str(), &stat_buf) == 0 ) {
                // file exist, wait ...
                sleep(1);
-               fgPrintf( FG_GENERAL, FG_INFO, ".");
+               FG_LOG( FG_GENERAL, FG_INFO, ".");
            }
-           fgPrintf( FG_GENERAL, FG_INFO, "\n");
+           FG_LOG( FG_GENERAL, FG_INFO, "");
        }
 #endif // WIN32
 
@@ -693,16 +696,18 @@ static void fgIdleFunction ( void ) {
        printf("Rate = %d  Bps = %d  Stereo = %d\n", 
               s1 -> getRate(), s1 -> getBps(), s1 -> getStereo());
        audio_sched -> loopSample ( s1 );
-       
-       pitch_envelope.setStep  ( 0, 0.01, 0.6 );
-       volume_envelope.setStep ( 0, 0.01, 0.6 );
 
-       audio_sched -> addSampleEnvelope( s1, 0, 0, &
-                                         pitch_envelope,
-                                         SL_PITCH_ENVELOPE );
-       audio_sched -> addSampleEnvelope( s1, 0, 1, 
-                                         &volume_envelope,
-                                         SL_VOLUME_ENVELOPE );
+       if ( audio_sched->working() ) {
+           pitch_envelope.setStep  ( 0, 0.01, 0.6 );
+           volume_envelope.setStep ( 0, 0.01, 0.6 );
+
+           audio_sched -> addSampleEnvelope( s1, 0, 0, &
+                                             pitch_envelope,
+                                             SL_PITCH_ENVELOPE );
+           audio_sched -> addSampleEnvelope( s1, 0, 1, 
+                                             &volume_envelope,
+                                             SL_VOLUME_ENVELOPE );
+       }
 
        // strcpy(slfile, path);
        // strcat(slfile, "thunder.wav");
@@ -829,10 +834,10 @@ int main( int argc, char **argv ) {
     _control87(MCW_EM, MCW_EM);  /* defined in float.h */
 #endif
 
-    // Initialize the debugging output system
-    fgInitDebug();
+    // Initialize the [old] debugging output system
+    // fgInitDebug();
 
-    fgPrintf(FG_GENERAL, FG_INFO, "Flight Gear:  Version %s\n\n", VERSION);
+    FG_LOG( FG_GENERAL, FG_INFO, "Flight Gear:  Version" << VERSION << endl );
 
     // Attempt to locate and parse a config file
     // First check fg_root
@@ -855,24 +860,28 @@ int main( int argc, char **argv ) {
        // Something must have gone horribly wrong with the command
        // line parsing or maybe the user just requested help ... :-)
        current_options.usage();
-       fgPrintf( FG_GENERAL, FG_EXIT, "\nExiting ...\n");
+       FG_LOG( FG_GENERAL, FG_ALERT, "\nExiting ...");
+       exit(-1);
     }
     
     // Initialize the Window/Graphics environment.
     if( !fgGlutInit(&argc, argv) ) {
-       fgPrintf( FG_GENERAL, FG_EXIT, "GLUT initialization failed ...\n" );
+       FG_LOG( FG_GENERAL, FG_ALERT, "GLUT initialization failed ..." );
+       exit(-1);
     }
 
     // Initialize the various GLUT Event Handlers.
     if( !fgGlutInitEvents() ) {
-       fgPrintf( FG_GENERAL, FG_EXIT, 
-                 "GLUT event handler initialization failed ...\n" );
+       FG_LOG( FG_GENERAL, FG_ALERT, 
+               "GLUT event handler initialization failed ..." );
+       exit(-1);
     }
 
     // First do some quick general initializations
     if( !fgInitGeneral()) {
-       fgPrintf( FG_GENERAL, FG_EXIT, 
-                 "General initializations failed ...\n" );
+       FG_LOG( FG_GENERAL, FG_ALERT, 
+               "General initializations failed ..." );
+       exit(-1);
     }
 
     // Init the user interface (we need to do this before passing off
@@ -888,6 +897,41 @@ int main( int argc, char **argv ) {
 
 
 // $Log$
+// Revision 1.63  1998/11/06 21:18:08  curt
+// Converted to new logstream debugging facility.  This allows release
+// builds with no messages at all (and no performance impact) by using
+// the -DFG_NDEBUG flag.
+//
+// Revision 1.62  1998/10/27 02:14:35  curt
+// Changes to support GLUT joystick routines as fall back.
+//
+// Revision 1.61  1998/10/25 14:08:47  curt
+// Turned "struct fgCONTROLS" into a class, with inlined accessor functions.
+//
+// Revision 1.60  1998/10/25 10:57:18  curt
+// Changes to use the new joystick library if it is available.
+//
+// Revision 1.59  1998/10/17 01:34:21  curt
+// C++ ifying ...
+//
+// Revision 1.58  1998/10/16 23:27:52  curt
+// C++-ifying.
+//
+// Revision 1.57  1998/10/16 00:54:00  curt
+// Converted to Point3D class.
+//
+// Revision 1.56  1998/10/02 12:46:47  curt
+// Added an "auto throttle"
+//
+// Revision 1.55  1998/09/29 14:58:18  curt
+// Use working() instead of !not_working() for audio.
+//
+// Revision 1.54  1998/09/29 02:03:38  curt
+// Autopilot mods.
+//
+// Revision 1.53  1998/09/26 13:18:35  curt
+// Check if audio "working()" before doing audio manipulations.
+//
 // Revision 1.52  1998/09/25 16:02:07  curt
 // Added support for pitch and volume envelopes and tied them to the
 // throttle setting.