diff options
| author | Jørgen P. Tjernø <[email protected]> | 2013-12-02 19:31:46 -0800 |
|---|---|---|
| committer | Jørgen P. Tjernø <[email protected]> | 2013-12-02 19:46:31 -0800 |
| commit | f56bb35301836e56582a575a75864392a0177875 (patch) | |
| tree | de61ddd39de3e7df52759711950b4c288592f0dc /mp/src/game/server/hl2/grenade_ar2.cpp | |
| parent | Mark some more files as text. (diff) | |
| download | source-sdk-2013-f56bb35301836e56582a575a75864392a0177875.tar.xz source-sdk-2013-f56bb35301836e56582a575a75864392a0177875.zip | |
Fix line endings. WHAMMY.
Diffstat (limited to 'mp/src/game/server/hl2/grenade_ar2.cpp')
| -rw-r--r-- | mp/src/game/server/hl2/grenade_ar2.cpp | 506 |
1 files changed, 253 insertions, 253 deletions
diff --git a/mp/src/game/server/hl2/grenade_ar2.cpp b/mp/src/game/server/hl2/grenade_ar2.cpp index 6e5c67f2..70841c66 100644 --- a/mp/src/game/server/hl2/grenade_ar2.cpp +++ b/mp/src/game/server/hl2/grenade_ar2.cpp @@ -1,253 +1,253 @@ -//========= Copyright Valve Corporation, All rights reserved. ============//
-//
-// Purpose:
-//
-// $NoKeywords: $
-//=============================================================================//
-
-#include "cbase.h"
-#include "grenade_ar2.h"
-#include "weapon_ar2.h"
-#include "soundent.h"
-#include "decals.h"
-#include "shake.h"
-#include "smoke_trail.h"
-#include "ar2_explosion.h"
-#include "vstdlib/random.h"
-#include "engine/IEngineSound.h"
-#include "world.h"
-
-#ifdef PORTAL
- #include "portal_util_shared.h"
-#endif
-
-// memdbgon must be the last include file in a .cpp file!!!
-#include "tier0/memdbgon.h"
-
-#define AR2_GRENADE_MAX_DANGER_RADIUS 300
-
-extern short g_sModelIndexFireball; // (in combatweapon.cpp) holds the index for the smoke cloud
-
-// Moved to HL2_SharedGameRules because these are referenced by shared AmmoDef functions
-extern ConVar sk_plr_dmg_smg1_grenade;
-extern ConVar sk_npc_dmg_smg1_grenade;
-extern ConVar sk_max_smg1_grenade;
-
-ConVar sk_smg1_grenade_radius ( "sk_smg1_grenade_radius","0");
-
-ConVar g_CV_SmokeTrail("smoke_trail", "1", 0); // temporary dust explosion switch
-
-BEGIN_DATADESC( CGrenadeAR2 )
-
- DEFINE_FIELD( m_hSmokeTrail, FIELD_EHANDLE ),
- DEFINE_FIELD( m_fSpawnTime, FIELD_TIME ),
- DEFINE_FIELD( m_fDangerRadius, FIELD_FLOAT ),
-
- // Function pointers
- DEFINE_ENTITYFUNC( GrenadeAR2Touch ),
- DEFINE_THINKFUNC( GrenadeAR2Think ),
-
-END_DATADESC()
-
-LINK_ENTITY_TO_CLASS( grenade_ar2, CGrenadeAR2 );
-
-void CGrenadeAR2::Spawn( void )
-{
- Precache( );
- SetSolid( SOLID_BBOX );
- SetMoveType( MOVETYPE_FLYGRAVITY, MOVECOLLIDE_FLY_BOUNCE );
-
- // Hits everything but debris
- SetCollisionGroup( COLLISION_GROUP_PROJECTILE );
-
- SetModel( "models/Weapons/ar2_grenade.mdl");
- UTIL_SetSize(this, Vector(-3, -3, -3), Vector(3, 3, 3));
-// UTIL_SetSize(this, Vector(0, 0, 0), Vector(0, 0, 0));
-
- SetUse( &CGrenadeAR2::DetonateUse );
- SetTouch( &CGrenadeAR2::GrenadeAR2Touch );
- SetThink( &CGrenadeAR2::GrenadeAR2Think );
- SetNextThink( gpGlobals->curtime + 0.1f );
-
- if( GetOwnerEntity() && GetOwnerEntity()->IsPlayer() )
- {
- m_flDamage = sk_plr_dmg_smg1_grenade.GetFloat();
- }
- else
- {
- m_flDamage = sk_npc_dmg_smg1_grenade.GetFloat();
- }
-
- m_DmgRadius = sk_smg1_grenade_radius.GetFloat();
- m_takedamage = DAMAGE_YES;
- m_bIsLive = true;
- m_iHealth = 1;
-
- SetGravity( UTIL_ScaleForGravity( 400 ) ); // use a lower gravity for grenades to make them easier to see
- SetFriction( 0.8 );
- SetSequence( 0 );
-
- m_fDangerRadius = 100;
-
- m_fSpawnTime = gpGlobals->curtime;
-
- // -------------
- // Smoke trail.
- // -------------
- if( g_CV_SmokeTrail.GetInt() && !IsXbox() )
- {
- m_hSmokeTrail = SmokeTrail::CreateSmokeTrail();
-
- if( m_hSmokeTrail )
- {
- m_hSmokeTrail->m_SpawnRate = 48;
- m_hSmokeTrail->m_ParticleLifetime = 1;
- m_hSmokeTrail->m_StartColor.Init(0.1f, 0.1f, 0.1f);
- m_hSmokeTrail->m_EndColor.Init(0,0,0);
- m_hSmokeTrail->m_StartSize = 12;
- m_hSmokeTrail->m_EndSize = m_hSmokeTrail->m_StartSize * 4;
- m_hSmokeTrail->m_SpawnRadius = 4;
- m_hSmokeTrail->m_MinSpeed = 4;
- m_hSmokeTrail->m_MaxSpeed = 24;
- m_hSmokeTrail->m_Opacity = 0.2f;
-
- m_hSmokeTrail->SetLifetime(10.0f);
- m_hSmokeTrail->FollowEntity(this);
- }
- }
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: The grenade has a slight delay before it goes live. That way the
-// person firing it can bounce it off a nearby wall. However if it
-// hits another character it blows up immediately
-// Input :
-// Output :
-//-----------------------------------------------------------------------------
-void CGrenadeAR2::GrenadeAR2Think( void )
-{
- SetNextThink( gpGlobals->curtime + 0.05f );
-
- if (!m_bIsLive)
- {
- // Go live after a short delay
- if (m_fSpawnTime + MAX_AR2_NO_COLLIDE_TIME < gpGlobals->curtime)
- {
- m_bIsLive = true;
- }
- }
-
- // If I just went solid and my velocity is zero, it means I'm resting on
- // the floor already when I went solid so blow up
- if (m_bIsLive)
- {
- if (GetAbsVelocity().Length() == 0.0 ||
- GetGroundEntity() != NULL )
- {
- Detonate();
- }
- }
-
- // The old way of making danger sounds would scare the crap out of EVERYONE between you and where the grenade
- // was going to hit. The radius of the danger sound now 'blossoms' over the grenade's lifetime, making it seem
- // dangerous to a larger area downrange than it does from where it was fired.
- if( m_fDangerRadius <= AR2_GRENADE_MAX_DANGER_RADIUS )
- {
- m_fDangerRadius += ( AR2_GRENADE_MAX_DANGER_RADIUS * 0.05 );
- }
-
- CSoundEnt::InsertSound( SOUND_DANGER, GetAbsOrigin() + GetAbsVelocity() * 0.5, m_fDangerRadius, 0.2, this, SOUNDENT_CHANNEL_REPEATED_DANGER );
-}
-
-void CGrenadeAR2::Event_Killed( const CTakeDamageInfo &info )
-{
- Detonate( );
-}
-
-void CGrenadeAR2::GrenadeAR2Touch( CBaseEntity *pOther )
-{
- Assert( pOther );
- if ( !pOther->IsSolid() )
- return;
-
- // If I'm live go ahead and blow up
- if (m_bIsLive)
- {
- Detonate();
- }
- else
- {
- // If I'm not live, only blow up if I'm hitting an chacter that
- // is not the owner of the weapon
- CBaseCombatCharacter *pBCC = ToBaseCombatCharacter( pOther );
- if (pBCC && GetThrower() != pBCC)
- {
- m_bIsLive = true;
- Detonate();
- }
- }
-}
-
-void CGrenadeAR2::Detonate(void)
-{
- if (!m_bIsLive)
- {
- return;
- }
- m_bIsLive = false;
- m_takedamage = DAMAGE_NO;
-
- if(m_hSmokeTrail)
- {
- UTIL_Remove(m_hSmokeTrail);
- m_hSmokeTrail = NULL;
- }
-
- CPASFilter filter( GetAbsOrigin() );
-
- te->Explosion( filter, 0.0,
- &GetAbsOrigin(),
- g_sModelIndexFireball,
- 2.0,
- 15,
- TE_EXPLFLAG_NONE,
- m_DmgRadius,
- m_flDamage );
-
- Vector vecForward = GetAbsVelocity();
- VectorNormalize(vecForward);
- trace_t tr;
- UTIL_TraceLine ( GetAbsOrigin(), GetAbsOrigin() + 60*vecForward, MASK_SHOT,
- this, COLLISION_GROUP_NONE, &tr);
-
-
- if ((tr.m_pEnt != GetWorldEntity()) || (tr.hitbox != 0))
- {
- // non-world needs smaller decals
- if( tr.m_pEnt && !tr.m_pEnt->IsNPC() )
- {
- UTIL_DecalTrace( &tr, "SmallScorch" );
- }
- }
- else
- {
- UTIL_DecalTrace( &tr, "Scorch" );
- }
-
- UTIL_ScreenShake( GetAbsOrigin(), 25.0, 150.0, 1.0, 750, SHAKE_START );
-
- RadiusDamage ( CTakeDamageInfo( this, GetThrower(), m_flDamage, DMG_BLAST ), GetAbsOrigin(), m_DmgRadius, CLASS_NONE, NULL );
-
- UTIL_Remove( this );
-}
-
-void CGrenadeAR2::Precache( void )
-{
- PrecacheModel("models/Weapons/ar2_grenade.mdl");
-}
-
-
-CGrenadeAR2::CGrenadeAR2(void)
-{
- m_hSmokeTrail = NULL;
-}
+//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// + +#include "cbase.h" +#include "grenade_ar2.h" +#include "weapon_ar2.h" +#include "soundent.h" +#include "decals.h" +#include "shake.h" +#include "smoke_trail.h" +#include "ar2_explosion.h" +#include "vstdlib/random.h" +#include "engine/IEngineSound.h" +#include "world.h" + +#ifdef PORTAL + #include "portal_util_shared.h" +#endif + +// memdbgon must be the last include file in a .cpp file!!! +#include "tier0/memdbgon.h" + +#define AR2_GRENADE_MAX_DANGER_RADIUS 300 + +extern short g_sModelIndexFireball; // (in combatweapon.cpp) holds the index for the smoke cloud + +// Moved to HL2_SharedGameRules because these are referenced by shared AmmoDef functions +extern ConVar sk_plr_dmg_smg1_grenade; +extern ConVar sk_npc_dmg_smg1_grenade; +extern ConVar sk_max_smg1_grenade; + +ConVar sk_smg1_grenade_radius ( "sk_smg1_grenade_radius","0"); + +ConVar g_CV_SmokeTrail("smoke_trail", "1", 0); // temporary dust explosion switch + +BEGIN_DATADESC( CGrenadeAR2 ) + + DEFINE_FIELD( m_hSmokeTrail, FIELD_EHANDLE ), + DEFINE_FIELD( m_fSpawnTime, FIELD_TIME ), + DEFINE_FIELD( m_fDangerRadius, FIELD_FLOAT ), + + // Function pointers + DEFINE_ENTITYFUNC( GrenadeAR2Touch ), + DEFINE_THINKFUNC( GrenadeAR2Think ), + +END_DATADESC() + +LINK_ENTITY_TO_CLASS( grenade_ar2, CGrenadeAR2 ); + +void CGrenadeAR2::Spawn( void ) +{ + Precache( ); + SetSolid( SOLID_BBOX ); + SetMoveType( MOVETYPE_FLYGRAVITY, MOVECOLLIDE_FLY_BOUNCE ); + + // Hits everything but debris + SetCollisionGroup( COLLISION_GROUP_PROJECTILE ); + + SetModel( "models/Weapons/ar2_grenade.mdl"); + UTIL_SetSize(this, Vector(-3, -3, -3), Vector(3, 3, 3)); +// UTIL_SetSize(this, Vector(0, 0, 0), Vector(0, 0, 0)); + + SetUse( &CGrenadeAR2::DetonateUse ); + SetTouch( &CGrenadeAR2::GrenadeAR2Touch ); + SetThink( &CGrenadeAR2::GrenadeAR2Think ); + SetNextThink( gpGlobals->curtime + 0.1f ); + + if( GetOwnerEntity() && GetOwnerEntity()->IsPlayer() ) + { + m_flDamage = sk_plr_dmg_smg1_grenade.GetFloat(); + } + else + { + m_flDamage = sk_npc_dmg_smg1_grenade.GetFloat(); + } + + m_DmgRadius = sk_smg1_grenade_radius.GetFloat(); + m_takedamage = DAMAGE_YES; + m_bIsLive = true; + m_iHealth = 1; + + SetGravity( UTIL_ScaleForGravity( 400 ) ); // use a lower gravity for grenades to make them easier to see + SetFriction( 0.8 ); + SetSequence( 0 ); + + m_fDangerRadius = 100; + + m_fSpawnTime = gpGlobals->curtime; + + // ------------- + // Smoke trail. + // ------------- + if( g_CV_SmokeTrail.GetInt() && !IsXbox() ) + { + m_hSmokeTrail = SmokeTrail::CreateSmokeTrail(); + + if( m_hSmokeTrail ) + { + m_hSmokeTrail->m_SpawnRate = 48; + m_hSmokeTrail->m_ParticleLifetime = 1; + m_hSmokeTrail->m_StartColor.Init(0.1f, 0.1f, 0.1f); + m_hSmokeTrail->m_EndColor.Init(0,0,0); + m_hSmokeTrail->m_StartSize = 12; + m_hSmokeTrail->m_EndSize = m_hSmokeTrail->m_StartSize * 4; + m_hSmokeTrail->m_SpawnRadius = 4; + m_hSmokeTrail->m_MinSpeed = 4; + m_hSmokeTrail->m_MaxSpeed = 24; + m_hSmokeTrail->m_Opacity = 0.2f; + + m_hSmokeTrail->SetLifetime(10.0f); + m_hSmokeTrail->FollowEntity(this); + } + } +} + +//----------------------------------------------------------------------------- +// Purpose: The grenade has a slight delay before it goes live. That way the +// person firing it can bounce it off a nearby wall. However if it +// hits another character it blows up immediately +// Input : +// Output : +//----------------------------------------------------------------------------- +void CGrenadeAR2::GrenadeAR2Think( void ) +{ + SetNextThink( gpGlobals->curtime + 0.05f ); + + if (!m_bIsLive) + { + // Go live after a short delay + if (m_fSpawnTime + MAX_AR2_NO_COLLIDE_TIME < gpGlobals->curtime) + { + m_bIsLive = true; + } + } + + // If I just went solid and my velocity is zero, it means I'm resting on + // the floor already when I went solid so blow up + if (m_bIsLive) + { + if (GetAbsVelocity().Length() == 0.0 || + GetGroundEntity() != NULL ) + { + Detonate(); + } + } + + // The old way of making danger sounds would scare the crap out of EVERYONE between you and where the grenade + // was going to hit. The radius of the danger sound now 'blossoms' over the grenade's lifetime, making it seem + // dangerous to a larger area downrange than it does from where it was fired. + if( m_fDangerRadius <= AR2_GRENADE_MAX_DANGER_RADIUS ) + { + m_fDangerRadius += ( AR2_GRENADE_MAX_DANGER_RADIUS * 0.05 ); + } + + CSoundEnt::InsertSound( SOUND_DANGER, GetAbsOrigin() + GetAbsVelocity() * 0.5, m_fDangerRadius, 0.2, this, SOUNDENT_CHANNEL_REPEATED_DANGER ); +} + +void CGrenadeAR2::Event_Killed( const CTakeDamageInfo &info ) +{ + Detonate( ); +} + +void CGrenadeAR2::GrenadeAR2Touch( CBaseEntity *pOther ) +{ + Assert( pOther ); + if ( !pOther->IsSolid() ) + return; + + // If I'm live go ahead and blow up + if (m_bIsLive) + { + Detonate(); + } + else + { + // If I'm not live, only blow up if I'm hitting an chacter that + // is not the owner of the weapon + CBaseCombatCharacter *pBCC = ToBaseCombatCharacter( pOther ); + if (pBCC && GetThrower() != pBCC) + { + m_bIsLive = true; + Detonate(); + } + } +} + +void CGrenadeAR2::Detonate(void) +{ + if (!m_bIsLive) + { + return; + } + m_bIsLive = false; + m_takedamage = DAMAGE_NO; + + if(m_hSmokeTrail) + { + UTIL_Remove(m_hSmokeTrail); + m_hSmokeTrail = NULL; + } + + CPASFilter filter( GetAbsOrigin() ); + + te->Explosion( filter, 0.0, + &GetAbsOrigin(), + g_sModelIndexFireball, + 2.0, + 15, + TE_EXPLFLAG_NONE, + m_DmgRadius, + m_flDamage ); + + Vector vecForward = GetAbsVelocity(); + VectorNormalize(vecForward); + trace_t tr; + UTIL_TraceLine ( GetAbsOrigin(), GetAbsOrigin() + 60*vecForward, MASK_SHOT, + this, COLLISION_GROUP_NONE, &tr); + + + if ((tr.m_pEnt != GetWorldEntity()) || (tr.hitbox != 0)) + { + // non-world needs smaller decals + if( tr.m_pEnt && !tr.m_pEnt->IsNPC() ) + { + UTIL_DecalTrace( &tr, "SmallScorch" ); + } + } + else + { + UTIL_DecalTrace( &tr, "Scorch" ); + } + + UTIL_ScreenShake( GetAbsOrigin(), 25.0, 150.0, 1.0, 750, SHAKE_START ); + + RadiusDamage ( CTakeDamageInfo( this, GetThrower(), m_flDamage, DMG_BLAST ), GetAbsOrigin(), m_DmgRadius, CLASS_NONE, NULL ); + + UTIL_Remove( this ); +} + +void CGrenadeAR2::Precache( void ) +{ + PrecacheModel("models/Weapons/ar2_grenade.mdl"); +} + + +CGrenadeAR2::CGrenadeAR2(void) +{ + m_hSmokeTrail = NULL; +} |