summaryrefslogtreecommitdiff
path: root/game/shared/cstrike/hegrenade_projectile.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'game/shared/cstrike/hegrenade_projectile.cpp')
-rw-r--r--game/shared/cstrike/hegrenade_projectile.cpp94
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 );
+ }
+ }
+}