#include "soundmgr.hxx"
/**
- * 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:
-
- const SGPropertyNode * _node;
+protected:
- FGSimpleSound * _sample;
- const SGPropertyNode * _property;
-
- bool _active;
+ enum { MAXPROP=5 };
+ enum { ONCE=0, LOOPED, IN_TRANSIT };
+ enum { LEVEL=0, INVERTED, FLIPFLOP };
- 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
// 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;
+
vector<_snd_prop> _volume;
vector<_snd_prop> _pitch;