]> git.mxchange.org Git - simgear.git/blobdiff - simgear/sound/sample_group.hxx
Pass current-dir down through XMLSound
[simgear.git] / simgear / sound / sample_group.hxx
index 88f86bcdc87c065da20684f89ecd18df29a87aea..59d42b323e8cacbea970ef1e0cb84790be4781d6 100644 (file)
@@ -42,6 +42,7 @@
 #endif
 
 #include <string>
+#include <vector>
 #include <map>
 
 #include <simgear/compiler.h>
@@ -51,6 +52,7 @@
 #include <simgear/structure/exception.hxx>
 
 #include "sample_openal.hxx"
+#include "sample_queue.hxx"
 
 using std::map;
 using std::string;
@@ -104,7 +106,7 @@ public:
      * @param refname Name of this audio sample for reference purposes
      * @return return true if successful
      */
-    bool add( SGSoundSample *sound, const string& refname );
+    bool add( SGSharedPtr<SGSoundSample> sound, const string& refname );
 
     /**
      * Remove an audio sample from this group.
@@ -127,6 +129,11 @@ public:
      */
     SGSoundSample *find( const string& refname );
 
+    /**
+     * Stop all playing samples and set the source id to invalid.
+     */
+    void stop();
+
     /**
      * Request to stop playing all audio samples until further notice.
      */
@@ -185,23 +192,29 @@ public:
 
     /**
      * Set the velocity vector of this sample group.
-     * This is in the same coordinate system as OpenGL; y=up, z=back, x=right.
+     * This is in the local frame coordinate system; x=north, y=east, z=down
      * @param vel Velocity vector 
      */
-    void set_velocity( const SGVec3d& vel );
+    void set_velocity( const SGVec3d& vel ) {
+       _velocity = vel; _changed = true;
+    }
 
     /**
      * Set the position of this sample group.
      * This is in the same coordinate system as OpenGL; y=up, z=back, x=right.
      * @param pos Base position
      */
-    void set_position( const SGGeod& pos );
+    void set_position_geod( const SGGeod& pos ) {
+        _base_pos = pos; _changed = true;
+    }
 
     /**
      * Set the orientation of this sample group.
      * @param ori Quaternation containing the orientation information
      */
-    void set_orientation( const SGQuatd& ori );
+    void set_orientation( const SGQuatd& ori ) {
+        _orientation = ori; _changed = true;
+    }
 
     /**
      * Tie this sample group to the listener position, orientation and velocity
@@ -214,18 +227,22 @@ protected:
     bool _active;
 
 private:
+    bool _changed;
+    bool _pause;
     float _volume;
     bool _tied_to_listener;
 
     SGVec3d _velocity;
+    SGGeod _base_pos;
     SGQuatd _orientation;
-    SGGeod _position;
 
     sample_map _samples;
+    std::vector< SGSharedPtr<SGSoundSample> > _removed_samples;
 
     bool testForALError(string s);
     bool testForError(void *p, string s);
 
+    void update_pos_and_orientation();
     void update_sample_config( SGSoundSample *sound );
 };