/*** * * Copyright (c) 2016-2019 Marco 'eukara' Hladik. All rights reserved. * * See the file LICENSE attached with the sources for usage details. * ****/ enumflags { AS_ARADIUS, AS_SRADIUS, AS_MRADIUS, AS_LRADIUS, AS_SILENT, AS_NOTTOGGLED }; class ambient_generic : CBaseTrigger { string m_strActivePath; string m_strSoundPath; float m_flVolume; float m_flRadius; int m_iToggleSwitch; float m_flPitch; int m_iLoop; /* int m_iPreset; float m_flVolume_Start; float m_flFadeIn; float m_flFadeOut;*/ // TODO: Do this in CSQC void() ambient_generic; }; static float ambient_generic::Network(entity ePEnt, float fChanged) { WriteByte( MSG_ENTITY, ENT_AMBIENTSOUND ); WriteCoord( MSG_ENTITY, origin[0] ); WriteCoord( MSG_ENTITY, origin[1] ); WriteCoord( MSG_ENTITY, origin[2] ); WriteString( MSG_ENTITY, m_strActivePath ); WriteFloat( MSG_ENTITY, m_flVolume ); WriteByte( MSG_ENTITY, m_flRadius ); WriteByte( MSG_ENTITY, m_iLoop ); WriteByte( MSG_ENTITY, 0 ); return TRUE; } void ambient_generic::UseNormal( void ) { sound(this, CHAN_VOICE, m_strActivePath, m_flVolume, m_flRadius, m_flPitch); } void ambient_generic::UseLoop( void ) { if ( m_iToggleSwitch == TRUE ) { m_strActivePath = "common/null.wav"; SendFlags = 128; m_iToggleSwitch = FALSE; } else { m_strActivePath = m_strSoundPath; SendFlags = 128; m_iToggleSwitch = TRUE; } } void ambient_generic::ambient_generic ( void ) { for ( int i = 1; i < ( tokenize( __fullspawndata ) - 1 ); i += 2 ) { switch ( argv( i ) ) { case "message": m_strSoundPath = argv( i + 1 ); m_strActivePath = m_strSoundPath; message = __NULL__; break; case "health": m_flVolume = stof( argv( i + 1 ) ) * 0.1f; health = __NULL__; break; case "volume": m_flVolume = stof( argv( i + 1 ) ); //volume = __NULL__; break; case "pitch": m_flPitch = stof( argv( i + 1 ) ); break; default: break; } } if ( !m_strSoundPath ) { objerror( "ambient_generic: No sound file specified. Aborting." ); } precache_sound( m_strSoundPath ); if ( !m_flVolume ) { m_flVolume = 1.0f; } // There can be only one if ( spawnflags & AS_ARADIUS ) { m_flRadius = ATTN_NONE; } else if ( spawnflags & AS_SRADIUS ) { m_flRadius = ATTN_IDLE; } else if ( spawnflags & AS_MRADIUS ) { m_flRadius = ATTN_STATIC; } else if ( spawnflags & AS_LRADIUS ) { m_flRadius = ATTN_NORM; } else { m_flRadius = ATTN_STATIC; } if ( spawnflags & AS_NOTTOGGLED ) { m_iLoop = FALSE; } else { m_iLoop = TRUE; } if( spawnflags & AS_SILENT ) { Trigger = UseNormal; } else { pvsflags = PVSF_NOREMOVE | PVSF_IGNOREPVS; Trigger = UseLoop; SendEntity = Network; m_iToggleSwitch = FALSE; } CBaseTrigger::CBaseTrigger(); }