X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fsound%2Fsample_openal.cxx;h=3c9cb864ad81403fc1d06794c3722046bde1d35f;hb=bcb320b537b6f7e5e3724e8a30d309322171eb43;hp=4abbb7cbc4965f484768dc08303a4b25de51b132;hpb=5ac2abe3abe399858e7a8c7288ce71338daf20bf;p=simgear.git diff --git a/simgear/sound/sample_openal.cxx b/simgear/sound/sample_openal.cxx index 4abbb7cb..3c9cb864 100644 --- a/simgear/sound/sample_openal.cxx +++ b/simgear/sound/sample_openal.cxx @@ -27,11 +27,13 @@ #endif #include // rand() +#include #include #include #include -#include +#include +#include #include "soundmgr_openal.hxx" #include "sample_openal.hxx" @@ -50,6 +52,7 @@ SGSoundSample::SGSoundSample() : _orientation(SGQuatd::zeros()), _orivec(SGVec3f::zeros()), _base_pos(SGVec3d::zeros()), + _rotation(SGQuatd::zeros()), _refname(random_string()), _data(NULL), _format(AL_FORMAT_MONO8), @@ -76,7 +79,7 @@ SGSoundSample::SGSoundSample() : } // constructor -SGSoundSample::SGSoundSample( const char *path, const char *file ) : +SGSoundSample::SGSoundSample(const char *file, const SGPath& currentDir) : _absolute_pos(SGVec3d::zeros()), _relative_pos(SGVec3d::zeros()), _direction(SGVec3d::zeros()), @@ -84,6 +87,7 @@ SGSoundSample::SGSoundSample( const char *path, const char *file ) : _orientation(SGQuatd::zeros()), _orivec(SGVec3f::zeros()), _base_pos(SGVec3d::zeros()), + _rotation(SGQuatd::zeros()), _refname(file), _data(NULL), _format(AL_FORMAT_MONO8), @@ -107,11 +111,8 @@ SGSoundSample::SGSoundSample( const char *path, const char *file ) : _static_changed(true), _is_file(true) { - SGPath samplepath( path ); - if ( strlen(file) ) { - samplepath.append( file ); - } - _refname = samplepath.str(); + SGPath p = simgear::ResourceManager::instance()->findPath(file, currentDir); + _refname = p.str(); } // constructor @@ -124,6 +125,7 @@ SGSoundSample::SGSoundSample( const unsigned char** data, _orientation(SGQuatd::zeros()), _orivec(SGVec3f::zeros()), _base_pos(SGVec3d::zeros()), + _rotation(SGQuatd::zeros()), _refname(random_string()), _format(format), _size(len), @@ -159,6 +161,7 @@ SGSoundSample::SGSoundSample( void** data, int len, int freq, int format ) : _orientation(SGQuatd::zeros()), _orivec(SGVec3f::zeros()), _base_pos(SGVec3d::zeros()), + _rotation(SGQuatd::zeros()), _refname(random_string()), _format(format), _size(len), @@ -188,21 +191,20 @@ SGSoundSample::SGSoundSample( void** data, int len, int freq, int format ) : // destructor SGSoundSample::~SGSoundSample() { - if (_data) free(_data); + if ( _data != NULL ) free(_data); } void SGSoundSample::update_pos_and_orientation() { _absolute_pos = _base_pos; - if ( _relative_pos[0] || _relative_pos[1] || _relative_pos[2] ) { - _absolute_pos += _orientation.backTransform(_relative_pos); + if (_relative_pos[0] || _relative_pos[1] || _relative_pos[2] ) { + _absolute_pos += _rotation.rotate( _relative_pos ); } + _orivec = SGVec3f::zeros(); if ( _direction[0] || _direction[1] || _direction[2] ) { - _orivec = toVec3f( _orientation.rotate(_direction) ); + _orivec = toVec3f( _rotation.rotate( _direction ) ); } - else - _orivec = SGVec3f::zeros(); } string SGSoundSample::random_string() { @@ -216,3 +218,13 @@ string SGSoundSample::random_string() { return rstr; } +SGPath SGSoundSample::file_path() const +{ + if (!_is_file) { + return SGPath(); + } + + return SGPath(_refname); +} + +