void CAmbientGeneric :: Precache( void ) { char* szSoundFile = (char*) STRING(pev->message); if ( !FStringNull( pev->message ) && strlen( szSoundFile ) > 1 ) { if (*szSoundFile != '!') PRECACHE_SOUND(szSoundFile); } // init all dynamic modulation parms InitModulationParms(); if ( !FBitSet (pev->spawnflags, AMBIENT_SOUND_START_SILENT ) ) { // start the sound ASAP if (m_fLooping) m_fActive = TRUE; } if ( m_fActive ) { UTIL_EmitAmbientSound ( ENT(pev), pev->origin, szSoundFile, (m_dpv.vol * 0.01), m_flAttenuation, SND_SPAWNING, m_dpv.pitch); pev->nextthink = gpGlobals->time + 0.1; } }
// this function needs to be called when the game is loaded, not just when the entity spawns. // Don't make this a PostSpawn function. void CAmbientGeneric :: Precache( void ) { char* szSoundFile = (char*) STRING(pev->message); if ( !FStringNull( pev->message ) && strlen( szSoundFile ) > 1 ) { if (*szSoundFile != '!') PRECACHE_SOUND(szSoundFile); } // init all dynamic modulation parms InitModulationParms(); if ( !FBitSet (pev->spawnflags, AMBIENT_SOUND_START_SILENT ) ) { // start the sound ASAP if (m_fLooping) m_fActive = TRUE; } if( pev->target ) { CBaseEntity *pTarget = UTIL_FindEntityByTargetname( NULL, STRING(pev->target)); if( !pTarget ) { ALERT( at_warning, "ambient_generic \"%s\" can't find \"%s\", its entity to play from.\n", STRING(pev->targetname), STRING(pev->target)); } else m_pPlayFrom = ENT( pTarget->pev ); } if ( m_fActive ) { if (m_pPlayFrom) { SetThink(&CAmbientGeneric ::StartPlayFrom); //LRC // EMIT_SOUND_DYN( m_pPlayFrom, m_iChannel, szSoundFile, //LRC // (m_dpv.vol * 0.01), m_flAttenuation, SND_SPAWNING, m_dpv.pitch); // ALERT(at_console, "AMBGEN: spawn start\n"); } else { UTIL_EmitAmbientSound ( ENT(pev), pev->origin, szSoundFile, (m_dpv.vol * 0.01), m_flAttenuation, SND_SPAWNING, m_dpv.pitch); } SetNextThink( 0.1 ); } }
//----------------------------------------------------------------------------- // Spawn //----------------------------------------------------------------------------- void CAmbientGeneric::Spawn( void ) { m_iSoundLevel = ComputeSoundlevel( m_radius, FBitSet( m_spawnflags, SF_AMBIENT_SOUND_EVERYWHERE )?true:false ); ComputeMaxAudibleDistance( ); char *szSoundFile = (char *)STRING( m_iszSound ); if ( !m_iszSound || strlen( szSoundFile ) < 1 ) { Warning( "Empty %s (%s) at %.2f, %.2f, %.2f\n", GetClassname(), GetDebugName(), GetAbsOrigin().x, GetAbsOrigin().y, GetAbsOrigin().z ); UTIL_Remove(this); return; } SetSolid( SOLID_NONE ); SetMoveType( MOVETYPE_NONE ); // Set up think function for dynamic modification // of ambient sound's pitch or volume. Don't // start thinking yet. SetThink(&CAmbientGeneric::RampThink); SetNextThink( TICK_NEVER_THINK ); m_fActive = false; if ( FBitSet ( m_spawnflags, SF_AMBIENT_SOUND_NOT_LOOPING ) ) { m_fLooping = false; } else { m_fLooping = true; } m_hSoundSource = NULL; m_nSoundSourceEntIndex = -1; Precache( ); // init all dynamic modulation parms InitModulationParms(); }
void CAmbientGeneric::Precache( void ) { char *szSoundFile = (char *)STRING( m_iszSound ); if ( m_iszSound != NULL_STRING && strlen( szSoundFile ) > 1 ) { if (*szSoundFile != '!') { PrecacheScriptSound(szSoundFile); } } // init all dynamic modulation parms InitModulationParms(); if ( !FBitSet (m_spawnflags, SF_AMBIENT_SOUND_START_SILENT ) ) { // start the sound ASAP if (m_fLooping) m_fActive = true; } }