mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-04 10:54:24 -04:00
woo! make a copy of the cursed set to use durring update. so there!
This commit is contained in:
parent
abf03aa012
commit
4b6fc4dba0
@ -21,7 +21,10 @@ INLINE void AudioManager::play(AudioSound* sound, float start_time) {
|
||||
INLINE void AudioManager::update(void) {
|
||||
if (!audio_is_active)
|
||||
return;
|
||||
mutex_lock l(_manager_mutex);
|
||||
{
|
||||
mutex_lock l(_manager_mutex);
|
||||
get_ptr()->copy_loopset();
|
||||
}
|
||||
if (_update_func != (UpdateFunc*)0L)
|
||||
(*_update_func)();
|
||||
get_ptr()->ns_update();
|
||||
|
@ -15,6 +15,7 @@ mutex AudioManager::_manager_mutex;
|
||||
bool* AudioManager::_quit = (bool*)0L;
|
||||
thread* AudioManager::_spawned = (thread*)0L;
|
||||
AudioManager::LoopSet* AudioManager::_loopset = (AudioManager::LoopSet*)0L;
|
||||
AudioManager::LoopSet* AudioManager::_loopcopy = (AudioManager::LoopSet*)0L;
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: AudioManager::destructor
|
||||
@ -39,6 +40,19 @@ void AudioManager::set_update_func(AudioManager::UpdateFunc* func) {
|
||||
_update_func = func;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: AudioManager::copy_loopset
|
||||
// Access: Public, Static
|
||||
// Description: make a copy of the loopset to use for the rest of
|
||||
// update
|
||||
////////////////////////////////////////////////////////////////////
|
||||
void AudioManager::copy_loopset(void) {
|
||||
if (_loopcopy == (LoopSet*)0L)
|
||||
_loopcopy = new LoopSet;
|
||||
if (_loopset != (LoopSet*)0L)
|
||||
*_loopcopy = *_loopset;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: AudioManager::ns_update
|
||||
// Access: Public, Static
|
||||
@ -46,10 +60,9 @@ void AudioManager::set_update_func(AudioManager::UpdateFunc* func) {
|
||||
////////////////////////////////////////////////////////////////////
|
||||
void AudioManager::ns_update(void) {
|
||||
// handle looping
|
||||
if (_loopset != (LoopSet*)0L)
|
||||
for (LoopSet::iterator i=_loopset->begin(); i!=_loopset->end();) {
|
||||
if (_loopcopy != (LoopSet*)0L)
|
||||
for (LoopSet::iterator i=_loopcopy->begin(); i!=_loopcopy->end(); ++i) {
|
||||
AudioSound* sound = *i;
|
||||
++i; // because the sound may be removed from the set durring this
|
||||
if (sound->status() == AudioSound::READY) {
|
||||
if (audio_cat->is_debug())
|
||||
audio_cat->debug() << "AudioManager::ns_update looping '"
|
||||
|
@ -18,6 +18,7 @@ class EXPCL_PANDA AudioManager {
|
||||
private:
|
||||
INLINE AudioManager(void);
|
||||
|
||||
void copy_loopset(void);
|
||||
void ns_play(AudioSound*, float);
|
||||
void ns_stop(AudioSound*);
|
||||
void ns_set_loop(AudioSound*, bool);
|
||||
@ -41,6 +42,7 @@ private:
|
||||
static bool* _quit;
|
||||
static thread* _spawned;
|
||||
static LoopSet* _loopset;
|
||||
static LoopSet* _loopcopy;
|
||||
public:
|
||||
virtual ~AudioManager(void);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user