guiaudio crashfix on exit

further ensure sound playback isn't even started unless the test condition is true and the gui element is awake
remove redundant sfx->stop(). already does so with SFX_DELETE(source)
This commit is contained in:
AzaezelX 2024-08-07 21:51:36 -05:00
parent 35e50b54b9
commit 1055dc8415

View file

@ -150,40 +150,41 @@ void GuiAudioCtrl::initPersistFields()
void GuiAudioCtrl::_update() void GuiAudioCtrl::_update()
{ {
bool useTrackDescriptionOnly = (mUseTrackDescriptionOnly && getSoundProfile());
if (getSoundProfile()) if (testCondition() && isAwake())
{ {
if (mSoundPlaying == NULL) bool useTrackDescriptionOnly = (mUseTrackDescriptionOnly && getSoundProfile());
{
mSoundPlaying = SFX->createSource(getSoundProfile(), &(SFX->getListener().getTransform()));
}
}
// The rest only applies if we have a source. if (getSoundProfile())
if (mSoundPlaying && !useTrackDescriptionOnly)
{
// Set the volume irrespective of the profile.
if (mSourceGroup)
{ {
mSourceGroup->addObject(mSoundPlaying); if (mSoundPlaying == NULL)
mSoundPlaying->setVolume(mSourceGroup->getVolume() * mVolume); {
} mSoundPlaying = SFX->createSource(getSoundProfile(), &(SFX->getListener().getTransform()));
else }
{
mSoundPlaying->setVolume(mVolume);
} }
mSoundPlaying->setPitch(mPitch); if ( mSoundPlaying && !mSoundPlaying->isPlaying())
mSoundPlaying->setFadeTimes(mFadeInTime, mFadeOutTime);
}
if (isAwake())
{
if (testCondition() && mSoundPlaying && !mSoundPlaying->isPlaying())
{ {
// The rest only applies if we have a source.
if (!useTrackDescriptionOnly)
{
// Set the volume irrespective of the profile.
if (mSourceGroup)
{
mSourceGroup->addObject(mSoundPlaying);
mSoundPlaying->setVolume(mSourceGroup->getVolume() * mVolume);
}
else
{
mSoundPlaying->setVolume(mVolume);
}
mSoundPlaying->setPitch(mPitch);
mSoundPlaying->setFadeTimes(mFadeInTime, mFadeOutTime);
}
mSoundPlaying->play(); mSoundPlaying->play();
} }
} }
@ -191,7 +192,6 @@ void GuiAudioCtrl::_update()
{ {
if (mSoundPlaying != NULL) if (mSoundPlaying != NULL)
{ {
mSoundPlaying->stop();
SFX_DELETE(mSoundPlaying); SFX_DELETE(mSoundPlaying);
setProcessTicks(false); setProcessTicks(false);
} }