You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
182 lines
5.5 KiB
182 lines
5.5 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
// $NoKeywords: $ |
|
//=============================================================================// |
|
|
|
#include "cbase.h" |
|
#include "c_ai_basenpc.h" |
|
#include "soundenvelope.h" |
|
|
|
// memdbgon must be the last include file in a .cpp file!!! |
|
#include "tier0/memdbgon.h" |
|
|
|
class C_NPC_Manhack : public C_AI_BaseNPC |
|
{ |
|
public: |
|
C_NPC_Manhack() {} |
|
|
|
DECLARE_CLASS( C_NPC_Manhack, C_AI_BaseNPC ); |
|
DECLARE_CLIENTCLASS(); |
|
DECLARE_DATADESC(); |
|
|
|
// Purpose: Start the manhack's engine sound. |
|
virtual void OnDataChanged( DataUpdateType_t type ); |
|
virtual void UpdateOnRemove( void ); |
|
virtual void OnRestore(); |
|
|
|
private: |
|
C_NPC_Manhack( const C_NPC_Manhack & ); |
|
|
|
// Purpose: Start + stop the manhack's engine sound. |
|
void SoundInit( void ); |
|
void SoundShutdown( void ); |
|
|
|
CSoundPatch *m_pEngineSound1; |
|
CSoundPatch *m_pEngineSound2; |
|
CSoundPatch *m_pBladeSound; |
|
|
|
int m_nEnginePitch1; |
|
int m_nEnginePitch2; |
|
float m_flEnginePitch1Time; |
|
float m_flEnginePitch2Time; |
|
}; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Save/restore |
|
//----------------------------------------------------------------------------- |
|
BEGIN_DATADESC( C_NPC_Manhack ) |
|
|
|
// DEFINE_SOUNDPATCH( m_pEngineSound1 ), |
|
// DEFINE_SOUNDPATCH( m_pEngineSound2 ), |
|
// DEFINE_SOUNDPATCH( m_pBladeSound ), |
|
|
|
// DEFINE_FIELD( m_nEnginePitch1, FIELD_INTEGER ), |
|
// DEFINE_FIELD( m_nEnginePitch2, FIELD_INTEGER ), |
|
// DEFINE_FIELD( m_flEnginePitch1Time, FIELD_FLOAT ), |
|
// DEFINE_FIELD( m_flEnginePitch2Time, FIELD_FLOAT ), |
|
|
|
END_DATADESC() |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Networking |
|
//----------------------------------------------------------------------------- |
|
IMPLEMENT_CLIENTCLASS_DT(C_NPC_Manhack, DT_NPC_Manhack, CNPC_Manhack) |
|
RecvPropIntWithMinusOneFlag(RECVINFO(m_nEnginePitch1)), |
|
RecvPropFloat(RECVINFO(m_flEnginePitch1Time)), |
|
RecvPropIntWithMinusOneFlag(RECVINFO(m_nEnginePitch2)), |
|
RecvPropFloat(RECVINFO(m_flEnginePitch2Time)), |
|
END_RECV_TABLE() |
|
|
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Start the manhack's engine sound. |
|
//----------------------------------------------------------------------------- |
|
void C_NPC_Manhack::OnDataChanged( DataUpdateType_t type ) |
|
{ |
|
BaseClass::OnDataChanged( type ); |
|
|
|
if (( m_nEnginePitch1 < 0 ) || ( m_nEnginePitch2 < 0 ) ) |
|
{ |
|
SoundShutdown(); |
|
} |
|
else |
|
{ |
|
SoundInit(); |
|
if ( m_pEngineSound1 && m_pEngineSound2 ) |
|
{ |
|
float dt = ( m_flEnginePitch1Time >= gpGlobals->curtime ) ? m_flEnginePitch1Time - gpGlobals->curtime : 0.0f; |
|
CSoundEnvelopeController::GetController().SoundChangePitch( m_pEngineSound1, m_nEnginePitch1, dt ); |
|
dt = ( m_flEnginePitch2Time >= gpGlobals->curtime ) ? m_flEnginePitch2Time - gpGlobals->curtime : 0.0f; |
|
CSoundEnvelopeController::GetController().SoundChangePitch( m_pEngineSound2, m_nEnginePitch2, dt ); |
|
} |
|
} |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Restore |
|
//----------------------------------------------------------------------------- |
|
void C_NPC_Manhack::OnRestore() |
|
{ |
|
BaseClass::OnRestore(); |
|
SoundInit(); |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Start the manhack's engine sound. |
|
//----------------------------------------------------------------------------- |
|
void C_NPC_Manhack::UpdateOnRemove( void ) |
|
{ |
|
BaseClass::UpdateOnRemove(); |
|
SoundShutdown(); |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Start the manhack's engine sound. |
|
//----------------------------------------------------------------------------- |
|
void C_NPC_Manhack::SoundInit( void ) |
|
{ |
|
if (( m_nEnginePitch1 < 0 ) || ( m_nEnginePitch2 < 0 ) ) |
|
return; |
|
|
|
// play an engine start sound!! |
|
CPASAttenuationFilter filter( this ); |
|
|
|
// Bring up the engine looping sound. |
|
if( !m_pEngineSound1 ) |
|
{ |
|
m_pEngineSound1 = CSoundEnvelopeController::GetController().SoundCreate( filter, entindex(), "NPC_Manhack.EngineSound1" ); |
|
CSoundEnvelopeController::GetController().Play( m_pEngineSound1, 0.0, m_nEnginePitch1 ); |
|
CSoundEnvelopeController::GetController().SoundChangeVolume( m_pEngineSound1, 0.7, 2.0 ); |
|
} |
|
|
|
if( !m_pEngineSound2 ) |
|
{ |
|
m_pEngineSound2 = CSoundEnvelopeController::GetController().SoundCreate( filter, entindex(), "NPC_Manhack.EngineSound2" ); |
|
CSoundEnvelopeController::GetController().Play( m_pEngineSound2, 0.0, m_nEnginePitch2 ); |
|
CSoundEnvelopeController::GetController().SoundChangeVolume( m_pEngineSound2, 0.7, 2.0 ); |
|
} |
|
|
|
if( !m_pBladeSound ) |
|
{ |
|
m_pBladeSound = CSoundEnvelopeController::GetController().SoundCreate( filter, entindex(), "NPC_Manhack.BladeSound" ); |
|
CSoundEnvelopeController::GetController().Play( m_pBladeSound, 0.0, m_nEnginePitch1 ); |
|
CSoundEnvelopeController::GetController().SoundChangeVolume( m_pBladeSound, 0.7, 2.0 ); |
|
} |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void C_NPC_Manhack::SoundShutdown(void) |
|
{ |
|
// Kill the engine! |
|
if ( m_pEngineSound1 ) |
|
{ |
|
CSoundEnvelopeController::GetController().SoundDestroy( m_pEngineSound1 ); |
|
m_pEngineSound1 = NULL; |
|
} |
|
|
|
// Kill the engine! |
|
if ( m_pEngineSound2 ) |
|
{ |
|
CSoundEnvelopeController::GetController().SoundDestroy( m_pEngineSound2 ); |
|
m_pEngineSound2 = NULL; |
|
} |
|
|
|
// Kill the blade! |
|
if ( m_pBladeSound ) |
|
{ |
|
CSoundEnvelopeController::GetController().SoundDestroy( m_pBladeSound ); |
|
m_pBladeSound = NULL; |
|
} |
|
} |
|
|
|
|