#include <simgear/structure/exception.hxx>
#include "sample_openal.hxx"
+#include "sample_queue.hxx"
using std::map;
using std::string;
/**
* Destructor
*/
- ~SGSampleGroup ();
+ virtual ~SGSampleGroup ();
/**
* Set the status of this sample group to active.
*/
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.
*/
/**
* 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
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 );
};