X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fsound%2Fsample_group.cxx;h=70df9aa1b6cbe88ff33e466ec71849ecc37157a3;hb=493aab8bab9df7d4ff13db3135703a899d0255c4;hp=f4c64d46a0e49362b69ee120f8fa6e0400a60b86;hpb=3bcd0bafd5fba1eebadfd1cb8a7294d665cf1932;p=simgear.git diff --git a/simgear/sound/sample_group.cxx b/simgear/sound/sample_group.cxx index f4c64d46..70df9aa1 100644 --- a/simgear/sound/sample_group.cxx +++ b/simgear/sound/sample_group.cxx @@ -401,8 +401,9 @@ void SGSampleGroup::set_volume( float vol ) // set the source position and orientation of all managed sounds void SGSampleGroup::update_pos_and_orientation() { - - SGVec3d position = SGVec3d::fromGeod(_base_pos) - _smgr->get_position(); + + SGVec3d base_position = SGVec3d::fromGeod(_base_pos); + SGVec3d smgr_position = _smgr->get_position(); SGQuatd hlOr = SGQuatd::fromLonLat(_base_pos); SGQuatd ec2body = hlOr*_orientation; @@ -418,12 +419,14 @@ void SGSampleGroup::update_pos_and_orientation() { sample->set_master_volume( _volume ); sample->set_orientation( _orientation ); sample->set_rotation( ec2body ); - sample->set_position( position ); + sample->set_position(base_position); sample->set_velocity( velocity ); // Test if a sample is farther away than max distance, if so // stop the sound playback and free it's source. if (!_tied_to_listener) { + sample->update_pos_and_orientation(); + SGVec3d position = sample->get_position() - smgr_position; float max2 = sample->get_max_dist() * sample->get_max_dist(); float dist2 = position[0]*position[0] + position[1]*position[1] + position[2]*position[2]; @@ -449,7 +452,7 @@ void SGSampleGroup::update_sample_config( SGSoundSample *sample ) } else { sample->update_pos_and_orientation(); orientation = sample->get_orientation(); - position = sample->get_position(); + position = sample->get_position() - _smgr->get_position(); velocity = sample->get_velocity(); }