Ambient generic: stop and toggle fix: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
(fix code)
 
mNo edit summary
Line 14: Line 14:
  (m_dpv.vol * 0.01), m_iSoundLevel, flags, m_dpv.pitch);
  (m_dpv.vol * 0.01), m_iSoundLevel, flags, m_dpv.pitch);
   
   
  <span style="color:red">// only mark active if this is a looping sound.  If not looping, each
  <span style="color:red">// Only mark active if this is a looping sound.  If not looping, each
  // trigger will cause the sound to play.  If the sound is still
  // trigger will cause the sound to play.  If the sound is still
  // playing from a previous trigger press, it will be shut off
  // playing from a previous trigger press, it will be shut off

Revision as of 14:31, 2 March 2008

Insert code in red into CAmbientGeneric::SendSound to overcome "unstoppable sound" issues:

	if ( pSoundSource )
	{
		if ( flags == SND_STOP )
		{
			UTIL_EmitAmbientSound(pSoundSource->GetSoundSourceIndex(), pSoundSource->GetAbsOrigin(), szSoundFile, 
						0, SNDLVL_NONE, flags, 0);
			m_fActive = false;
		}
		else
		{
			UTIL_EmitAmbientSound(pSoundSource->GetSoundSourceIndex(), pSoundSource->GetAbsOrigin(), szSoundFile, 
				(m_dpv.vol * 0.01), m_iSoundLevel, flags, m_dpv.pitch);

			// Only mark active if this is a looping sound.  If not looping, each
			// trigger will cause the sound to play.  If the sound is still
			// playing from a previous trigger press, it will be shut off
			// and then restarted.

			if (m_fLooping)
				m_fActive = true;
		}
	}	
	else
	{
		if ( ( flags == SND_STOP ) && 
			( m_nSoundSourceEntIndex != -1 ) )
		{
			UTIL_EmitAmbientSound(m_nSoundSourceEntIndex, GetAbsOrigin(), szSoundFile, 
					0, SNDLVL_NONE, flags, 0);
			m_fActive = false;
		}
	}

This moves the job of setting m_fActive to the very top of the chain, denying any ambient_generic function wriggle room to escape it! This opens up the use of the volume and pitch inputs, and allows you to safely start a sound with a map.

See also