diff options
Diffstat (limited to 'mp/src/game/server/hl2/grenade_energy.cpp')
| -rw-r--r-- | mp/src/game/server/hl2/grenade_energy.cpp | 314 |
1 files changed, 157 insertions, 157 deletions
diff --git a/mp/src/game/server/hl2/grenade_energy.cpp b/mp/src/game/server/hl2/grenade_energy.cpp index fab04f5a..e76265dc 100644 --- a/mp/src/game/server/hl2/grenade_energy.cpp +++ b/mp/src/game/server/hl2/grenade_energy.cpp @@ -1,157 +1,157 @@ -//========= Copyright Valve Corporation, All rights reserved. ============//
-//
-// Purpose: Projectile shot by mortar synth.
-//
-// $NoKeywords: $
-//=============================================================================//
-
-#include "cbase.h"
-#include "grenade_energy.h"
-#include "soundent.h"
-#include "player.h"
-#include "hl2_shareddefs.h"
-
-// memdbgon must be the last include file in a .cpp file!!!
-#include "tier0/memdbgon.h"
-
-#define ENERGY_GRENADE_LIFETIME 1
-
-ConVar sk_dmg_energy_grenade ( "sk_dmg_energy_grenade","0");
-ConVar sk_energy_grenade_radius ( "sk_energy_grenade_radius","0");
-
-BEGIN_DATADESC( CGrenadeEnergy )
-
- DEFINE_FIELD( m_flMaxFrame, FIELD_INTEGER ),
- DEFINE_FIELD( m_nEnergySprite, FIELD_INTEGER ),
- DEFINE_FIELD( m_flLaunchTime, FIELD_TIME ),
-
- // Function pointers
- DEFINE_FUNCTION( Animate ),
- DEFINE_FUNCTION( GrenadeEnergyTouch ),
-
-END_DATADESC()
-
-LINK_ENTITY_TO_CLASS( grenade_energy, CGrenadeEnergy );
-
-void CGrenadeEnergy::Spawn( void )
-{
- Precache( );
- SetSolid( SOLID_BBOX );
- SetMoveType( MOVETYPE_FLY );
-
- SetModel( "Models/weapons/w_energy_grenade.mdl" );
-
- SetUse( DetonateUse );
- SetTouch( GrenadeEnergyTouch );
- SetNextThink( gpGlobals->curtime + 0.1f );
-
- m_flDamage = sk_dmg_energy_grenade.GetFloat();
- m_DmgRadius = sk_energy_grenade_radius.GetFloat();
- m_takedamage = DAMAGE_YES;
- m_iHealth = 1;
-
- m_flCycle = 0;
- m_flLaunchTime = gpGlobals->curtime;
-
- SetCollisionGroup( HL2COLLISION_GROUP_HOUNDEYE );
-
- UTIL_SetSize( this, vec3_origin, vec3_origin );
-
- m_flMaxFrame = (float) modelinfo->GetModelFrameCount( GetModel() ) - 1;
-
-}
-
-//------------------------------------------------------------------------------
-// Purpose :
-// Input :
-// Output :
-//------------------------------------------------------------------------------
-void CGrenadeEnergy::Shoot( CBaseEntity* pOwner, const Vector &vStart, Vector vVelocity )
-{
- CGrenadeEnergy *pEnergy = (CGrenadeEnergy *)CreateEntityByName( "grenade_energy" );
- pEnergy->Spawn();
-
- UTIL_SetOrigin( pEnergy, vStart );
- pEnergy->SetAbsVelocity( vVelocity );
- pEnergy->SetOwnerEntity( pOwner );
-
- pEnergy->SetThink ( Animate );
- pEnergy->SetNextThink( gpGlobals->curtime + 0.1f );
-
- pEnergy->m_nRenderMode = kRenderTransAdd;
- pEnergy->SetRenderColor( 160, 160, 160, 255 );
- pEnergy->m_nRenderFX = kRenderFxNone;
-}
-
-//------------------------------------------------------------------------------
-// Purpose :
-// Input :
-// Output :
-//------------------------------------------------------------------------------
-void CGrenadeEnergy::Animate( void )
-{
- float flLifeLeft = 1-(gpGlobals->curtime - m_flLaunchTime)/ENERGY_GRENADE_LIFETIME;
-
- if (flLifeLeft < 0)
- {
- SetRenderColorA( 0 );
- SetThink(NULL);
- UTIL_Remove(this);
- }
-
- SetNextThink( gpGlobals->curtime + 0.01f );
-
- QAngle angles;
- VectorAngles( GetAbsVelocity(), angles );
- SetLocalAngles( angles );
-
- SetNextThink( gpGlobals->curtime + 0.1f );
-
- StudioFrameAdvance( );
-
- SetRenderColorA( flLifeLeft );
-}
-
-void CGrenadeEnergy::Event_Killed( const CTakeDamageInfo &info )
-{
- Detonate( );
-}
-
-void CGrenadeEnergy::GrenadeEnergyTouch( CBaseEntity *pOther )
-{
- if ( pOther->m_takedamage )
- {
- float flLifeLeft = 1-(gpGlobals->curtime - m_flLaunchTime)/ENERGY_GRENADE_LIFETIME;
-
- if ( pOther->GetFlags() & (FL_CLIENT) )
- {
- CBasePlayer *pPlayer = ( CBasePlayer * )pOther;
- float flKick = 120 * flLifeLeft;
- pPlayer->m_Local.m_vecPunchAngle.SetX( flKick * (random->RandomInt(0,1) == 1) ? -1 : 1 );
- pPlayer->m_Local.m_vecPunchAngle.SetY( flKick * (random->RandomInt(0,1) == 1) ? -1 : 1 );
- }
- float flDamage = m_flDamage * flLifeLeft;
- if (flDamage < 1)
- {
- flDamage = 1;
- }
-
- trace_t tr;
- tr = GetTouchTrace();
- CTakeDamageInfo info( this, GetThrower(), m_flDamage * flLifeLeft, DMG_SONIC );
- CalculateMeleeDamageForce( &info, (tr.endpos - tr.startpos), tr.endpos );
- pOther->TakeDamage( info );
- }
- Detonate();
-}
-
-void CGrenadeEnergy::Detonate(void)
-{
- m_takedamage = DAMAGE_NO;
- UTIL_Remove( this );
-}
-
-void CGrenadeEnergy::Precache( void )
-{
- PrecacheModel("Models/weapons/w_energy_grenade.mdl");
-}
+//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: Projectile shot by mortar synth. +// +// $NoKeywords: $ +//=============================================================================// + +#include "cbase.h" +#include "grenade_energy.h" +#include "soundent.h" +#include "player.h" +#include "hl2_shareddefs.h" + +// memdbgon must be the last include file in a .cpp file!!! +#include "tier0/memdbgon.h" + +#define ENERGY_GRENADE_LIFETIME 1 + +ConVar sk_dmg_energy_grenade ( "sk_dmg_energy_grenade","0"); +ConVar sk_energy_grenade_radius ( "sk_energy_grenade_radius","0"); + +BEGIN_DATADESC( CGrenadeEnergy ) + + DEFINE_FIELD( m_flMaxFrame, FIELD_INTEGER ), + DEFINE_FIELD( m_nEnergySprite, FIELD_INTEGER ), + DEFINE_FIELD( m_flLaunchTime, FIELD_TIME ), + + // Function pointers + DEFINE_FUNCTION( Animate ), + DEFINE_FUNCTION( GrenadeEnergyTouch ), + +END_DATADESC() + +LINK_ENTITY_TO_CLASS( grenade_energy, CGrenadeEnergy ); + +void CGrenadeEnergy::Spawn( void ) +{ + Precache( ); + SetSolid( SOLID_BBOX ); + SetMoveType( MOVETYPE_FLY ); + + SetModel( "Models/weapons/w_energy_grenade.mdl" ); + + SetUse( DetonateUse ); + SetTouch( GrenadeEnergyTouch ); + SetNextThink( gpGlobals->curtime + 0.1f ); + + m_flDamage = sk_dmg_energy_grenade.GetFloat(); + m_DmgRadius = sk_energy_grenade_radius.GetFloat(); + m_takedamage = DAMAGE_YES; + m_iHealth = 1; + + m_flCycle = 0; + m_flLaunchTime = gpGlobals->curtime; + + SetCollisionGroup( HL2COLLISION_GROUP_HOUNDEYE ); + + UTIL_SetSize( this, vec3_origin, vec3_origin ); + + m_flMaxFrame = (float) modelinfo->GetModelFrameCount( GetModel() ) - 1; + +} + +//------------------------------------------------------------------------------ +// Purpose : +// Input : +// Output : +//------------------------------------------------------------------------------ +void CGrenadeEnergy::Shoot( CBaseEntity* pOwner, const Vector &vStart, Vector vVelocity ) +{ + CGrenadeEnergy *pEnergy = (CGrenadeEnergy *)CreateEntityByName( "grenade_energy" ); + pEnergy->Spawn(); + + UTIL_SetOrigin( pEnergy, vStart ); + pEnergy->SetAbsVelocity( vVelocity ); + pEnergy->SetOwnerEntity( pOwner ); + + pEnergy->SetThink ( Animate ); + pEnergy->SetNextThink( gpGlobals->curtime + 0.1f ); + + pEnergy->m_nRenderMode = kRenderTransAdd; + pEnergy->SetRenderColor( 160, 160, 160, 255 ); + pEnergy->m_nRenderFX = kRenderFxNone; +} + +//------------------------------------------------------------------------------ +// Purpose : +// Input : +// Output : +//------------------------------------------------------------------------------ +void CGrenadeEnergy::Animate( void ) +{ + float flLifeLeft = 1-(gpGlobals->curtime - m_flLaunchTime)/ENERGY_GRENADE_LIFETIME; + + if (flLifeLeft < 0) + { + SetRenderColorA( 0 ); + SetThink(NULL); + UTIL_Remove(this); + } + + SetNextThink( gpGlobals->curtime + 0.01f ); + + QAngle angles; + VectorAngles( GetAbsVelocity(), angles ); + SetLocalAngles( angles ); + + SetNextThink( gpGlobals->curtime + 0.1f ); + + StudioFrameAdvance( ); + + SetRenderColorA( flLifeLeft ); +} + +void CGrenadeEnergy::Event_Killed( const CTakeDamageInfo &info ) +{ + Detonate( ); +} + +void CGrenadeEnergy::GrenadeEnergyTouch( CBaseEntity *pOther ) +{ + if ( pOther->m_takedamage ) + { + float flLifeLeft = 1-(gpGlobals->curtime - m_flLaunchTime)/ENERGY_GRENADE_LIFETIME; + + if ( pOther->GetFlags() & (FL_CLIENT) ) + { + CBasePlayer *pPlayer = ( CBasePlayer * )pOther; + float flKick = 120 * flLifeLeft; + pPlayer->m_Local.m_vecPunchAngle.SetX( flKick * (random->RandomInt(0,1) == 1) ? -1 : 1 ); + pPlayer->m_Local.m_vecPunchAngle.SetY( flKick * (random->RandomInt(0,1) == 1) ? -1 : 1 ); + } + float flDamage = m_flDamage * flLifeLeft; + if (flDamage < 1) + { + flDamage = 1; + } + + trace_t tr; + tr = GetTouchTrace(); + CTakeDamageInfo info( this, GetThrower(), m_flDamage * flLifeLeft, DMG_SONIC ); + CalculateMeleeDamageForce( &info, (tr.endpos - tr.startpos), tr.endpos ); + pOther->TakeDamage( info ); + } + Detonate(); +} + +void CGrenadeEnergy::Detonate(void) +{ + m_takedamage = DAMAGE_NO; + UTIL_Remove( this ); +} + +void CGrenadeEnergy::Precache( void ) +{ + PrecacheModel("Models/weapons/w_energy_grenade.mdl"); +} |