Still work on #886.
- fixed resume sound after that when speed was near to 0 (broken in previous commit) - pause sound while explosion animation Tested on bridges in hacienda and snowmountain. git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/trunk@14171 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
parent
b1c375528e
commit
4673c41987
@ -938,8 +938,9 @@ void Material::initParticlesEffect(const XMLNode *node)
|
||||
/** Adjusts the pitch of the given sfx depending on the given speed.
|
||||
* \param sfx The sound effect to adjust.
|
||||
* \param speed The speed of the kart.
|
||||
* \param should_be_paused Pause for other reasons, i.e. kart is rescued.
|
||||
*/
|
||||
void Material::setSFXSpeed(SFXBase *sfx, float speed) const
|
||||
void Material::setSFXSpeed(SFXBase *sfx, float speed, bool should_be_paused) const
|
||||
{
|
||||
// Still make a sound when driving backwards on the material.
|
||||
if (speed < 0) speed = -speed;
|
||||
@ -947,14 +948,14 @@ void Material::setSFXSpeed(SFXBase *sfx, float speed) const
|
||||
// If we paused it due to too low speed earlier, we can continue now.
|
||||
if (sfx->getStatus() == SFXManager::SFX_PAUSED)
|
||||
{
|
||||
if (speed<m_sfx_min_speed) return;
|
||||
if (speed<m_sfx_min_speed || should_be_paused == 1) return;
|
||||
// TODO: Do we first need to stop the sound completely so it
|
||||
// starts over?
|
||||
sfx->play();
|
||||
}
|
||||
else if (sfx->getStatus() == SFXManager::SFX_PLAYING)
|
||||
{
|
||||
if (speed<m_sfx_min_speed)
|
||||
if (speed<m_sfx_min_speed || should_be_paused == 1)
|
||||
{
|
||||
// Pausing it to differentiate with sounds that ended etc
|
||||
sfx->pause();
|
||||
|
@ -253,7 +253,7 @@ public:
|
||||
bool complain_if_not_found=true);
|
||||
~Material ();
|
||||
|
||||
void setSFXSpeed(SFXBase *sfx, float speed) const;
|
||||
void setSFXSpeed(SFXBase *sfx, float speed, bool should_be_paused) const;
|
||||
void setMaterialProperties(video::SMaterial *m, scene::IMeshBuffer* mb);
|
||||
void adjustForFog(scene::ISceneNode* parent, video::SMaterial *m, bool use_fog) const;
|
||||
|
||||
|
@ -1406,20 +1406,6 @@ void Kart::handleMaterialSFX(const Material *material)
|
||||
}
|
||||
}
|
||||
|
||||
if(m_terrain_sound)
|
||||
{
|
||||
if((m_flying || dynamic_cast<RescueAnimation*>(getKartAnimation())) &&
|
||||
m_terrain_sound->getStatus()!=SFXManager::SFX_PAUSED)
|
||||
{
|
||||
m_terrain_sound->pause();
|
||||
}
|
||||
else if(m_terrain_sound->getStatus()==SFXManager::SFX_PAUSED &&
|
||||
!m_flying && !dynamic_cast<RescueAnimation*>(getKartAnimation()))
|
||||
{
|
||||
m_terrain_sound->resume();
|
||||
}
|
||||
}
|
||||
|
||||
if(m_previous_terrain_sound &&
|
||||
m_previous_terrain_sound->getStatus()==SFXManager::SFX_STOPPED)
|
||||
{
|
||||
@ -1430,12 +1416,18 @@ void Kart::handleMaterialSFX(const Material *material)
|
||||
m_previous_terrain_sound = NULL;
|
||||
}
|
||||
|
||||
bool m_schedule_pause = m_flying ||
|
||||
dynamic_cast<RescueAnimation*>(getKartAnimation()) ||
|
||||
dynamic_cast<ExplosionAnimation*>(getKartAnimation());
|
||||
|
||||
// terrain sound is not necessarily a looping sound so check its status before
|
||||
// setting its speed, to avoid 'ressuscitating' sounds that had already stopped
|
||||
if(m_terrain_sound && m_terrain_sound->getStatus()==SFXManager::SFX_PLAYING)
|
||||
if(m_terrain_sound &&
|
||||
(m_terrain_sound->getStatus()==SFXManager::SFX_PLAYING ||
|
||||
m_terrain_sound->getStatus()==SFXManager::SFX_PAUSED))
|
||||
{
|
||||
m_terrain_sound->position(getXYZ());
|
||||
material->setSFXSpeed(m_terrain_sound, m_speed);
|
||||
material->setSFXSpeed(m_terrain_sound, m_speed, m_schedule_pause);
|
||||
}
|
||||
|
||||
} // handleMaterialSFX
|
||||
|
Loading…
Reference in New Issue
Block a user