X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FSound%2Ffg_fx.hxx;h=864a898bb07219e5b7064dcb77ed6501de9171c0;hb=1ae2b59333dc914d10bcc726bc94e71cbf3e411e;hp=15b7de961efc8513386388c56b5fbe429dd7756d;hpb=916045f45ebe0cb3600fbae023a76c2ae3bf4d92;p=flightgear.git diff --git a/src/Sound/fg_fx.hxx b/src/Sound/fg_fx.hxx index 15b7de961..864a898bb 100644 --- a/src/Sound/fg_fx.hxx +++ b/src/Sound/fg_fx.hxx @@ -1,9 +1,9 @@ -// fgfx.hxx -- Sound effect management class +// fg_fx.hxx -- Sound effect management class // // Started by David Megginson, October 2001 // (Reuses some code from main.cxx, probably by Curtis Olson) // -// Copyright (C) 2001 Curtis L. Olson - curt@flightgear.org +// Copyright (C) 2001 Curtis L. Olson - http://www.flightgear.org/~curt // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License as @@ -17,23 +17,25 @@ // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software -// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. // // $Id$ #ifndef __FGFX_HXX #define __FGFX_HXX 1 -#ifdef HAVE_CONFIG_H -# include -#endif - #include -#include
-#include
-#include "soundmgr.hxx" +#include +#include + +#include +#include +using std::queue; +using std::vector; + +class SGXmlSound; /** * Generator for FlightGear sound effects. @@ -41,60 +43,54 @@ * This module uses FGSoundMgr to generate sound effects based * on current flight conditions. The sound manager must be initialized * before this object is. + * + * Note: this module supports two separate sound mechanisms concurrently. + * + * 1. This module will load and play a set of sound effects defined in an + * xml file and tie them to various property states. + * 2. This modules also maintains a queue of 'message' audio files. These + * are played sequentially with no overlap until the queue is finished. + * This second mechanims is useful for things like tutorial messages or + * background atc chatter. */ -class FGFX : public FGSubsystem +class FGFX : public SGSubsystem { public: - enum { - MAX_ENGINES = 2, // TODO: increase later - MAX_GEAR = 20, - }; + FGFX (); + virtual ~FGFX (); - FGFX (); - virtual ~FGFX (); + virtual void init (); + virtual void reinit (); + virtual void bind (); + virtual void unbind (); + virtual void update (double dt); - virtual void init (); - virtual void bind (); - virtual void unbind (); - virtual void update (); + /** + * add a sound sample to the message queue which is played sequentially + * in order. + */ + void play_message( SGSoundSample *_sample ); + void play_message( const string path, const string fname, double volume ); private: - void set_playing (const char * soundName, bool state = true); - - double _old_flap_position; - double _old_gear_position; - - bool _gear_on_ground[MAX_GEAR]; - float _wheel_spin[MAX_GEAR]; - - // looped sounds - FGSimpleSound * _engine[MAX_ENGINES]; - FGSimpleSound * _crank[MAX_ENGINES]; - FGSimpleSound * _wind; - FGSimpleSound * _stall; - FGSimpleSound * _rumble; + void update_pos_and_orientation(SGSoundMgr *smgr, double dt); + sgdVec3 last_visitor_pos; + sgdVec3 last_model_pos; - // one-off sounds - FGSimpleSound * _flaps; - FGSimpleSound * _gear_up; - FGSimpleSound * _gear_dn; - FGSimpleSound * _squeal; - FGSimpleSound * _click; + vector _sound; + queue _samplequeue; - // Cached property nodes. - const SGPropertyNode * _engine_running_prop[MAX_ENGINES]; - const SGPropertyNode * _engine_cranking_prop[MAX_ENGINES]; - const SGPropertyNode * _stall_warning_prop; - const SGPropertyNode * _vc_prop; - const SGPropertyNode * _flaps_prop; - const SGPropertyNode * _gear_prop; + bool last_pause; + double last_volume; + SGPropertyNode_ptr _pause; + SGPropertyNode_ptr _volume; }; #endif -// end of fgfx.hxx +// end of fg_fx.hxx