-
-//
// 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>
+#include <Math/fg_geodesy.hxx>
#include <Math/mat3.h>
#include <Math/polar3d.hxx>
#include <PUI/pu.h>
#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"
// 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;
// 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;
// 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;
// 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();
}
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 {
// 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;
// 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");
+ fgWeatherUpdate();
+
// Fix elevation. I'm just sticking this here for now, it should
// probably move eventually
// Run audio scheduler
#ifdef ENABLE_AUDIO_SUPPORT
- if ( current_options.get_sound() ) {
+ if ( current_options.get_sound() && audio_sched->working() ) {
+ double param = c->throttle[0] * 2.0 + 1.0;
+
+ pitch_envelope.setStep ( 0, 0.01, param );
+ volume_envelope.setStep ( 0, 0.01, param );
+
audio_sched -> update();
}
#endif
static void fgIdleFunction ( void ) {
fgGENERAL *g;
-
g = &general;
// printf("idle state == %d\n", idle_state);
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";
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 );
// $Log$
+// 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.
//