]> git.mxchange.org Git - flightgear.git/blobdiff - Main/GLUTmain.cxx
Turned "struct fgCONTROLS" into a class, with inlined accessor functions.
[flightgear.git] / Main / GLUTmain.cxx
index cb3bc46622b5920b63a75ca7fcdf2f3bc82edc72..d7f420e59291247604f72d9797af050f081a5c08 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
 #include <Include/fg_constants.h>  // for VERSION
 #include <Include/general.h>
 
-#include <Aircraft/aircraft.h>
-#include <Astro/moon.hxx>
-#include <Astro/planets.hxx>
+#include <Aircraft/aircraft.hxx>
 #include <Astro/sky.hxx>
 #include <Astro/stars.hxx>
-#include <Astro/sun.hxx>
+#include <Astro/solarsystem.hxx>
 
 #ifdef ENABLE_AUDIO_SUPPORT
 #  include <Audio/src/sl.h>
 #  include <Audio/src/sm.h>
 #endif
 
+#include <Autopilot/autopilot.hxx>
 #include <Cockpit/cockpit.hxx>
 #include <Debug/fg_debug.h>
 #include <GUI/gui.h>
-#include <Joystick/joystick.h>
-#include <Math/fg_geodesy.h>
+
+#ifdef ENABLE_JOYSTICK_SUPPORT
+#  include <Joystick/joystick.hxx>
+#endif
+
+#include <Math/fg_geodesy.hxx>
 #include <Math/mat3.h>
 #include <Math/polar3d.hxx>
 #include <PUI/pu.h>
@@ -78,7 +79,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"
@@ -93,7 +94,7 @@ fgGENERAL general;
 // Specify our current idle function state.  This is used to run all
 // our initializations out of the glutIdleLoop() so that we can get a
 // splash screen up and running right away.
-static idle_state = 0;
+static int idle_state = 0;
 
 // Another hack
 int use_signals = 0;
@@ -103,6 +104,8 @@ int panel_hist = 0;
 
 // Global structures for the Audio library
 #ifdef ENABLE_AUDIO_SUPPORT
+slEnvelope pitch_envelope ( 1, SL_SAMPLE_ONE_SHOT ) ;
+slEnvelope volume_envelope ( 1, SL_SAMPLE_ONE_SHOT ) ;
 slScheduler *audio_sched;
 smMixer *audio_mixer;
 slSample *s1;
@@ -301,7 +304,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;
@@ -310,24 +313,7 @@ static void fgRenderFrame( void ) {
 
        // draw stars and planets
        fgStarsRender();
-       fgPlanetsRender();
-
-       // draw the sun
-       fgSunRender();
-
-       // render the moon
-       xglEnable( GL_LIGHTING );
-       xglEnable( GL_LIGHT0 );
-       // set lighting parameters
-       xglLightfv(GL_LIGHT0, GL_AMBIENT, white );
-       xglLightfv(GL_LIGHT0, GL_DIFFUSE, white );
-       xglEnable( GL_CULL_FACE );
-    
-       // Let's try some blending technique's (Durk)
-       glEnable(GL_BLEND);
-       glBlendFunc(GL_ONE, GL_ONE);
-       fgMoonRender();
-       glDisable(GL_BLEND);
+       SolarSystem::theSolarSystem->draw();
 
        xglPopMatrix();
 
@@ -408,6 +394,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 {
@@ -478,8 +467,6 @@ static void fgMainLoop( void ) {
     int elapsed, multi_loop;
     int i;
     double accum;
-    // double joy_x, joy_y;
-    // int joy_b1, joy_b2;
 
     f = current_aircraft.flight;
     g = &general;
@@ -488,6 +475,8 @@ static void fgMainLoop( void ) {
     fgPrintf( FG_ALL, FG_DEBUG, "Running Main Loop\n");
     fgPrintf( FG_ALL, FG_DEBUG, "======= ==== ====\n");
 
+    fgWeatherUpdate();
+
     // Fix elevation.  I'm just sticking this here for now, it should
     // probably move eventually
 
@@ -522,12 +511,10 @@ 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 ); */
+#ifdef ENABLE_JOYSTICK_SUPPORT
+    // Read joystick and update control settings
+    fgJoystickRead();
+#endif
 
     // Get elapsed time for this past frame
     elapsed = fgGetTimeInterval();
@@ -587,7 +574,12 @@ static void fgMainLoop( void ) {
 
     // Run audio scheduler
 #ifdef ENABLE_AUDIO_SUPPORT
-    if ( current_options.get_sound() ) {
+    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 );
+
        audio_sched -> update();
     }
 #endif
@@ -609,7 +601,6 @@ static void fgMainLoop( void ) {
 
 static void fgIdleFunction ( void ) {
     fgGENERAL *g;
-
     g = &general;
 
     // printf("idle state == %d\n", idle_state);
@@ -696,7 +687,7 @@ static void fgIdleFunction ( void ) {
 
        audio_sched = new slScheduler ( 8000 );
        audio_mixer = new smMixer;
-       audio_mixer -> setMasterVolume ( 80 ) ;  /* 80% of max volume. */
+       audio_mixer -> setMasterVolume ( 50 ) ;  /* 80% of max volume. */
        audio_sched -> setSafetyMargin ( 1.0 ) ;
        string slfile = current_options.get_fg_root() + "/Sounds/wasp.wav";
 
@@ -704,7 +695,19 @@ static void fgIdleFunction ( void ) {
        printf("Rate = %d  Bps = %d  Stereo = %d\n", 
               s1 -> getRate(), s1 -> getBps(), s1 -> getStereo());
        audio_sched -> loopSample ( s1 );
-       
+
+       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");
        // s2 -> loadFile ( slfile );
@@ -771,7 +774,12 @@ int fgGlutInit( int *argc, char **argv ) {
     xglutInit(argc, argv);
 
     // Define Display Parameters
-    xglutInitDisplayMode( GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE | GLUT_STENCIL);
+    if ( ! current_options.get_panel_status() ) {
+       xglutInitDisplayMode( GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE );
+    } else {
+       xglutInitDisplayMode( GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE | 
+                             GLUT_STENCIL);
+    }
 
     // Define initial window size
     xglutInitWindowSize(640, 480);
@@ -884,6 +892,62 @@ int main( int argc, char **argv ) {
 
 
 // $Log$
+// 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.
+//
+// Revision 1.51  1998/09/15 04:27:28  curt
+// Changes for new Astro code.
+//
+// Revision 1.50  1998/09/15 02:09:24  curt
+// Include/fg_callback.hxx
+//   Moved code inline to stop g++ 2.7 from complaining.
+//
+// Simulator/Time/event.[ch]xx
+//   Changed return type of fgEVENT::printStat().  void caused g++ 2.7 to
+//   complain bitterly.
+//
+// Minor bugfix and changes.
+//
+// Simulator/Main/GLUTmain.cxx
+//   Added missing type to idle_state definition - eliminates a warning.
+//
+// Simulator/Main/fg_init.cxx
+//   Changes to airport lookup.
+//
+// Simulator/Main/options.cxx
+//   Uses fg_gzifstream when loading config file.
+//
+// Revision 1.49  1998/09/09 16:25:39  curt
+// Only use GLUT_STENCIL if the instument panel has been requested.
+//
 // Revision 1.48  1998/08/28 18:15:03  curt
 // Added new cockpit code from Friedemann Reinhard
 // <mpt218@faupt212.physik.uni-erlangen.de>