]> git.mxchange.org Git - flightgear.git/blobdiff - src/Sound/fg_sound.hxx
This is step "1" of probably "many" in the process of separating out the
[flightgear.git] / src / Sound / fg_sound.hxx
index 2ceb2ae80cd5d23cc1df6dbf344cd5335cfc0a9f..c1aaa567998b4aa4545257fb3b6707489fe4459f 100644 (file)
 #endif
 
 #include <simgear/compiler.h>
+#include <simgear/props/condition.hxx>
+
 #include <Main/fgfs.hxx>
 #include <Main/globals.hxx>
 
 #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;