diff options
| author | Choupom <andycootlapin@hotmail.fr> | 2011-07-02 13:11:32 +0200 |
|---|---|---|
| committer | oy <Tom_Adams@web.de> | 2011-07-02 19:24:21 +0200 |
| commit | 520683c0aa605ea67135ce536978fd4496bbaf54 (patch) | |
| tree | 951cfcd11ee6d99b23e23bf36f0375fc1b45b257 /src/engine/client/sound.cpp | |
| parent | 199a1d8d1df6097d166a32897348fa3eec0aca2e (diff) | |
| download | zcatch-520683c0aa605ea67135ce536978fd4496bbaf54.tar.gz zcatch-520683c0aa605ea67135ce536978fd4496bbaf54.zip | |
made so background musics restart where they got stopped
Diffstat (limited to 'src/engine/client/sound.cpp')
| -rw-r--r-- | src/engine/client/sound.cpp | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/src/engine/client/sound.cpp b/src/engine/client/sound.cpp index 52f51bcb..c2ca91f7 100644 --- a/src/engine/client/sound.cpp +++ b/src/engine/client/sound.cpp @@ -31,6 +31,7 @@ struct CSample int m_Channels; int m_LoopStart; int m_LoopEnd; + int m_PausedAt; }; struct CChannel @@ -393,6 +394,7 @@ int CSound::LoadWV(const char *pFilename) pSample->m_NumFrames = m_aSamples; pSample->m_LoopStart = -1; pSample->m_LoopEnd = -1; + pSample->m_PausedAt = 0; } else { @@ -446,7 +448,10 @@ int CSound::Play(int ChannelID, int SampleID, int Flags, float x, float y) { m_aVoices[VoiceID].m_pSample = &m_aSamples[SampleID]; m_aVoices[VoiceID].m_pChannel = &m_aChannels[ChannelID]; - m_aVoices[VoiceID].m_Tick = 0; + if(Flags & FLAG_LOOP) + m_aVoices[VoiceID].m_Tick = m_aSamples[SampleID].m_PausedAt; + else + m_aVoices[VoiceID].m_Tick = 0; m_aVoices[VoiceID].m_Vol = 255; m_aVoices[VoiceID].m_Flags = Flags; m_aVoices[VoiceID].m_X = (int)x; @@ -475,7 +480,13 @@ void CSound::Stop(int SampleID) for(int i = 0; i < NUM_VOICES; i++) { if(m_aVoices[i].m_pSample == pSample) + { + if(m_aVoices[i].m_Flags & FLAG_LOOP) + m_aVoices[i].m_pSample->m_PausedAt = m_aVoices[i].m_Tick; + else + m_aVoices[i].m_pSample->m_PausedAt = 0; m_aVoices[i].m_pSample = 0; + } } lock_release(m_SoundLock); } @@ -486,6 +497,13 @@ void CSound::StopAll() lock_wait(m_SoundLock); for(int i = 0; i < NUM_VOICES; i++) { + if(m_aVoices[i].m_pSample) + { + if(m_aVoices[i].m_Flags & FLAG_LOOP) + m_aVoices[i].m_pSample->m_PausedAt = m_aVoices[i].m_Tick; + else + m_aVoices[i].m_pSample->m_PausedAt = 0; + } m_aVoices[i].m_pSample = 0; } lock_release(m_SoundLock); |