// Remove any envelope commands from the list (dynamically changing envelope) void CSoundControllerImp::CommandClear( CSoundPatch *pSound ) { for ( int i = m_commandList.Count()-1; i >= 0; i-- ) { SoundCommand_t *pCmd = m_commandList.Element( i ); if ( pCmd->m_pPatch == pSound ) { m_commandList.RemoveAt(i); delete pCmd; } } }
//----------------------------------------------------------------------------- // Saves the sound patch + associated commands //----------------------------------------------------------------------------- void CSoundControllerImp::SaveSoundPatch( CSoundPatch *pSoundPatch, ISave *pSave ) { int i; // Write out the sound patch pSave->StartBlock(); pSave->WriteAll( pSoundPatch ); pSave->EndBlock(); // Count the number of commands that refer to the sound patch int nCount = 0; for ( i = m_commandList.Count()-1; i >= 0; i-- ) { SoundCommand_t *pCmd = m_commandList.Element( i ); if ( pCmd->m_pPatch == pSoundPatch ) { nCount++; } } // Write out the number of commands, followed by each command itself pSave->StartBlock(); pSave->WriteInt( &nCount ); for ( i = m_commandList.Count()-1; i >= 0; i-- ) { SoundCommand_t *pCmd = m_commandList.Element( i ); if ( pCmd->m_pPatch == pSoundPatch ) { pSave->StartBlock(); pSave->WriteAll( pCmd ); pSave->EndBlock(); } } pSave->EndBlock(); }