diff options
Diffstat (limited to 'game/shared/cstrike/hegrenade_projectile.cpp')
| -rw-r--r-- | game/shared/cstrike/hegrenade_projectile.cpp | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/game/shared/cstrike/hegrenade_projectile.cpp b/game/shared/cstrike/hegrenade_projectile.cpp new file mode 100644 index 0000000..bd80239 --- /dev/null +++ b/game/shared/cstrike/hegrenade_projectile.cpp @@ -0,0 +1,94 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +//=============================================================================// + +#include "cbase.h" +#include "hegrenade_projectile.h" +#include "soundent.h" +#include "cs_player.h" +#include "KeyValues.h" +#include "weapon_csbase.h" + +#define GRENADE_MODEL "models/Weapons/w_eq_fraggrenade_thrown.mdl" + + +LINK_ENTITY_TO_CLASS( hegrenade_projectile, CHEGrenadeProjectile ); +PRECACHE_WEAPON_REGISTER( hegrenade_projectile ); + +CHEGrenadeProjectile* CHEGrenadeProjectile::Create( + const Vector &position, + const QAngle &angles, + const Vector &velocity, + const AngularImpulse &angVelocity, + CBaseCombatCharacter *pOwner, + float timer ) +{ + CHEGrenadeProjectile *pGrenade = (CHEGrenadeProjectile*)CBaseEntity::Create( "hegrenade_projectile", position, angles, pOwner ); + + // Set the timer for 1 second less than requested. We're going to issue a SOUND_DANGER + // one second before detonation. + + pGrenade->SetDetonateTimerLength( 1.5 ); + pGrenade->SetAbsVelocity( velocity ); + pGrenade->SetupInitialTransmittedGrenadeVelocity( velocity ); + pGrenade->SetThrower( pOwner ); + + pGrenade->SetGravity( BaseClass::GetGrenadeGravity() ); + pGrenade->SetFriction( BaseClass::GetGrenadeFriction() ); + pGrenade->SetElasticity( BaseClass::GetGrenadeElasticity() ); + + pGrenade->m_flDamage = 100; + pGrenade->m_DmgRadius = pGrenade->m_flDamage * 3.5f; + pGrenade->ChangeTeam( pOwner->GetTeamNumber() ); + pGrenade->ApplyLocalAngularVelocityImpulse( angVelocity ); + + // make NPCs afaid of it while in the air + pGrenade->SetThink( &CHEGrenadeProjectile::DangerSoundThink ); + pGrenade->SetNextThink( gpGlobals->curtime ); + + pGrenade->m_pWeaponInfo = GetWeaponInfo( WEAPON_HEGRENADE ); + + return pGrenade; +} + +void CHEGrenadeProjectile::Spawn() +{ + SetModel( GRENADE_MODEL ); + BaseClass::Spawn(); +} + +void CHEGrenadeProjectile::Precache() +{ + PrecacheModel( GRENADE_MODEL ); + + PrecacheScriptSound( "HEGrenade.Bounce" ); + + BaseClass::Precache(); +} + +void CHEGrenadeProjectile::BounceSound( void ) +{ + EmitSound( "HEGrenade.Bounce" ); +} + +void CHEGrenadeProjectile::Detonate() +{ + BaseClass::Detonate(); + + // tell the bots an HE grenade has exploded + CCSPlayer *player = ToCSPlayer(GetThrower()); + if ( player ) + { + IGameEvent * event = gameeventmanager->CreateEvent( "hegrenade_detonate" ); + if ( event ) + { + event->SetInt( "userid", player->GetUserID() ); + event->SetFloat( "x", GetAbsOrigin().x ); + event->SetFloat( "y", GetAbsOrigin().y ); + event->SetFloat( "z", GetAbsOrigin().z ); + gameeventmanager->FireEvent( event ); + } + } +} |