#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:
- 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);
protected:
enum { MAXPROP=5 };
- enum { ONCE=0, LOOPED };
- enum { LEVEL=0, INVERTED, FLIPFLOP, RAISE, FALL };
-
+ enum { ONCE=0, LOOPED, IN_TRANSIT };
+ enum { LEVEL=0, INVERTED, FLIPFLOP };
// Sound properties
typedef struct {
- const SGPropertyNode * prop;
+ SGPropertyNode * prop;
double (*fn)(double);
+ double *intern;
double factor;
double offset;
double min;
bool subtract;
} _snd_prop;
-#if 0
- // Sound source (distance, horizontal position in degrees and
- // vertical position in degrees)
- typedef struct {
- float dist;
- float hor;
- float vert;
- } _pos_prop;
-#endif
-
private:
- const SGPropertyNode * _node;
-
+ FGSoundMgr * _mgr;
FGSimpleSound * _sample;
- const SGPropertyNode * _property;
- bool _active;
+ FGCondition * _condition;
+ SGPropertyNode * _property;
- int _mode;
- int _type;
+ bool _active;
string _name;
- double _factor;
- double _offset;
+ 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;