void PlayLockSounds(entvars_t *pev, locksound_t *pls, int flocked, int fbutton) { // LOCKED SOUND // CONSIDER: consolidate the locksound_t struct (all entries are duplicates for lock/unlock) // CONSIDER: and condense this code. float flsoundwait; if (fbutton) flsoundwait = BUTTON_SOUNDWAIT; else flsoundwait = DOOR_SOUNDWAIT; if (flocked) { int fplaysound = (pls->sLockedSound && gpGlobals->time > pls->flwaitSound); int fplaysentence = (pls->sLockedSentence && !pls->bEOFLocked && gpGlobals->time > pls->flwaitSentence); float fvol; if (fplaysound && fplaysentence) fvol = 0.25; else fvol = 1.0; // if there is a locked sound, and we've debounced, play sound if (fplaysound) { // play 'door locked' sound EMIT_SOUND(ENT(pev), CHAN_ITEM, (char*)STRING(pls->sLockedSound), fvol, ATTN_NORM); pls->flwaitSound = gpGlobals->time + flsoundwait; } // if there is a sentence, we've not played all in list, and we've debounced, play sound if (fplaysentence) { // play next 'door locked' sentence in group int iprev = pls->iLockedSentence; pls->iLockedSentence = SENTENCEG_PlaySequentialSz(ENT(pev), STRING(pls->sLockedSentence), 0.85, ATTN_NORM, 0, 100, pls->iLockedSentence, FALSE); pls->iUnlockedSentence = 0; // make sure we don't keep calling last sentence in list pls->bEOFLocked = (iprev == pls->iLockedSentence); pls->flwaitSentence = gpGlobals->time + DOOR_SENTENCEWAIT; } } else { // UNLOCKED SOUND int fplaysound = (pls->sUnlockedSound && gpGlobals->time > pls->flwaitSound); int fplaysentence = (pls->sUnlockedSentence && !pls->bEOFUnlocked && gpGlobals->time > pls->flwaitSentence); float fvol; // if playing both sentence and sound, lower sound volume so we hear sentence if (fplaysound && fplaysentence) fvol = 0.25; else fvol = 1.0; // play 'door unlocked' sound if set if (fplaysound) { EMIT_SOUND(ENT(pev), CHAN_ITEM, (char*)STRING(pls->sUnlockedSound), fvol, ATTN_NORM); pls->flwaitSound = gpGlobals->time + flsoundwait; } // play next 'door unlocked' sentence in group if (fplaysentence) { int iprev = pls->iUnlockedSentence; pls->iUnlockedSentence = SENTENCEG_PlaySequentialSz(ENT(pev), STRING(pls->sUnlockedSentence), 0.85, ATTN_NORM, 0, 100, pls->iUnlockedSentence, FALSE); pls->iLockedSentence = 0; // make sure we don't keep calling last sentence in list pls->bEOFUnlocked = (iprev == pls->iUnlockedSentence); pls->flwaitSentence = gpGlobals->time + DOOR_SENTENCEWAIT; } } }
//----------------------------------------------------------------------------- // Purpose: play door or button locked or unlocked sounds. // NOTE: this routine is shared by doors and buttons // Input : pEdict - // pls - // flocked - if true, play 'door is locked' sound, otherwise play 'door // is unlocked' sound. // fbutton - //----------------------------------------------------------------------------- void PlayLockSounds(CBaseEntity *pEdict, locksound_t *pls, int flocked, int fbutton) { if ( pEdict->HasSpawnFlags( SF_DOOR_SILENT ) ) { return; } float flsoundwait = ( fbutton ) ? BUTTON_SOUNDWAIT : DOOR_SOUNDWAIT; if ( flocked ) { int fplaysound = (pls->sLockedSound != NULL_STRING && gpGlobals->curtime > pls->flwaitSound); int fplaysentence = (pls->sLockedSentence != NULL_STRING && !pls->bEOFLocked && gpGlobals->curtime > pls->flwaitSentence); float fvol = ( fplaysound && fplaysentence ) ? 0.25f : 1.0f; // if there is a locked sound, and we've debounced, play sound if (fplaysound) { // play 'door locked' sound CPASAttenuationFilter filter( pEdict ); EmitSound_t ep; ep.m_nChannel = CHAN_ITEM; ep.m_pSoundName = (char*)STRING(pls->sLockedSound); ep.m_flVolume = fvol; ep.m_SoundLevel = SNDLVL_NORM; CBaseEntity::EmitSound( filter, pEdict->entindex(), ep ); pls->flwaitSound = gpGlobals->curtime + flsoundwait; } // if there is a sentence, we've not played all in list, and we've debounced, play sound if (fplaysentence) { // play next 'door locked' sentence in group int iprev = pls->iLockedSentence; pls->iLockedSentence = SENTENCEG_PlaySequentialSz( pEdict->edict(), STRING(pls->sLockedSentence), 0.85f, SNDLVL_NORM, 0, 100, pls->iLockedSentence, FALSE); pls->iUnlockedSentence = 0; // make sure we don't keep calling last sentence in list pls->bEOFLocked = (iprev == pls->iLockedSentence); pls->flwaitSentence = gpGlobals->curtime + DOOR_SENTENCEWAIT; } } else { // UNLOCKED SOUND int fplaysound = (pls->sUnlockedSound != NULL_STRING && gpGlobals->curtime > pls->flwaitSound); int fplaysentence = (pls->sUnlockedSentence != NULL_STRING && !pls->bEOFUnlocked && gpGlobals->curtime > pls->flwaitSentence); float fvol; // if playing both sentence and sound, lower sound volume so we hear sentence fvol = ( fplaysound && fplaysentence ) ? 0.25f : 1.0f; // play 'door unlocked' sound if set if (fplaysound) { CPASAttenuationFilter filter( pEdict ); EmitSound_t ep; ep.m_nChannel = CHAN_ITEM; ep.m_pSoundName = (char*)STRING(pls->sUnlockedSound); ep.m_flVolume = fvol; ep.m_SoundLevel = SNDLVL_NORM; CBaseEntity::EmitSound( filter, pEdict->entindex(), ep ); pls->flwaitSound = gpGlobals->curtime + flsoundwait; } // play next 'door unlocked' sentence in group if (fplaysentence) { int iprev = pls->iUnlockedSentence; pls->iUnlockedSentence = SENTENCEG_PlaySequentialSz(pEdict->edict(), STRING(pls->sUnlockedSentence), 0.85, SNDLVL_NORM, 0, 100, pls->iUnlockedSentence, FALSE); pls->iLockedSentence = 0; // make sure we don't keep calling last sentence in list pls->bEOFUnlocked = (iprev == pls->iUnlockedSentence); pls->flwaitSentence = gpGlobals->curtime + DOOR_SENTENCEWAIT; } } }