X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FSound%2Ffg_sound.hxx;h=c1aaa567998b4aa4545257fb3b6707489fe4459f;hb=198b88ca9b4a4b123b2e9ccdc85ea17eeaea70c6;hp=2ceb2ae80cd5d23cc1df6dbf344cd5335cfc0a9f;hpb=d514e8c255eee681f1de8d18d4e132e1f6d02076;p=flightgear.git diff --git a/src/Sound/fg_sound.hxx b/src/Sound/fg_sound.hxx index 2ceb2ae80..c1aaa5679 100644 --- a/src/Sound/fg_sound.hxx +++ b/src/Sound/fg_sound.hxx @@ -28,68 +28,70 @@ #endif #include +#include + #include
#include
#include "soundmgr.hxx" +static const double MAX_TRANSIT_TIME = 0.1; // 100 ms. + + /** - * Class for handling one sound. + * Class for handling one sound event. * */ -class FGSound : public FGSubsystem +class FGSound { public: - enum { MAXPROP=5 }; - enum { LIN=0, LOG, LN }; - enum { ONCE=0, LOOPED }; - enum { LEVEL=0, INVERTED, FLIPFLOP }; - - FGSound(const SGPropertyNode *); + FGSound(); virtual ~FGSound(); - virtual void init (); + virtual void init (SGPropertyNode *); virtual void bind (); virtual void unbind (); - virtual void update (int dt); + virtual void update (double dt); -private: + void stop(); - const SGPropertyNode * _node; +protected: - FGSimpleSound * _sample; - const SGPropertyNode * _property; - - bool _active; - - int _mode; - int _type; - string _name; - float _factor; - -#if 0 - // Sound source (distance, horizontal position in degrees and - // vertical position in degrees) - struct { - float dist; - float hor; - float vert; - } _pos; -#endif + enum { MAXPROP=5 }; + enum { ONCE=0, LOOPED, IN_TRANSIT }; + enum { LEVEL=0, INVERTED, FLIPFLOP }; // Sound properties typedef struct { - const SGPropertyNode * prop; - float factor; - int type; - float offset; - float min; - float max; - bool subtract; + SGPropertyNode * prop; + double (*fn)(double); + double *intern; + double factor; + double offset; + double min; + double max; + bool subtract; } _snd_prop; +private: + + FGSoundMgr * _mgr; + FGSimpleSound * _sample; + + FGCondition * _condition; + SGPropertyNode * _property; + + bool _active; + string _name; + int _mode; + double _prev_value; + double _dt_play; + double _dt_stop; + double _stopping; // time after the sound should have stopped. + // This is usefull for lost packets in in-trasit mode. + vector<_snd_prop> _volume; vector<_snd_prop> _pitch;