mirror of
https://github.com/alliedmodders/hl2sdk.git
synced 2024-12-23 01:59:43 +08:00
115 lines
2.9 KiB
C++
115 lines
2.9 KiB
C++
//========= Copyright Valve Corporation, All rights reserved. ============//
|
|
//
|
|
// Purpose:
|
|
//
|
|
//=============================================================================//
|
|
|
|
#include "cbase.h"
|
|
#include "weapon_sdkbase.h"
|
|
#include "gamerules.h"
|
|
#include "npcevent.h"
|
|
#include "engine/IEngineSound.h"
|
|
#include "weapon_grenade.h"
|
|
|
|
|
|
#ifdef CLIENT_DLL
|
|
|
|
#else
|
|
|
|
#include "sdk_player.h"
|
|
#include "items.h"
|
|
#include "sdk_basegrenade_projectile.h"
|
|
|
|
#endif
|
|
|
|
|
|
#define GRENADE_TIMER 3.0f //Seconds
|
|
|
|
IMPLEMENT_NETWORKCLASS_ALIASED( SDKGrenade, DT_SDKGrenade )
|
|
|
|
BEGIN_NETWORK_TABLE(CSDKGrenade, DT_SDKGrenade)
|
|
END_NETWORK_TABLE()
|
|
|
|
BEGIN_PREDICTION_DATA( CSDKGrenade )
|
|
END_PREDICTION_DATA()
|
|
|
|
LINK_ENTITY_TO_CLASS( weapon_grenade, CSDKGrenade );
|
|
PRECACHE_WEAPON_REGISTER( weapon_grenade );
|
|
|
|
|
|
#ifdef GAME_DLL
|
|
|
|
#define GRENADE_MODEL "models/Weapons/w_eq_fraggrenade_thrown.mdl"
|
|
|
|
class CGrenadeProjectile : public CBaseGrenadeProjectile
|
|
{
|
|
public:
|
|
DECLARE_CLASS( CGrenadeProjectile, CBaseGrenadeProjectile );
|
|
|
|
|
|
// Overrides.
|
|
public:
|
|
virtual void Spawn()
|
|
{
|
|
SetModel( GRENADE_MODEL );
|
|
BaseClass::Spawn();
|
|
}
|
|
|
|
virtual void Precache()
|
|
{
|
|
PrecacheModel( GRENADE_MODEL );
|
|
BaseClass::Precache();
|
|
}
|
|
|
|
// Grenade stuff.
|
|
public:
|
|
|
|
static CGrenadeProjectile* Create(
|
|
const Vector &position,
|
|
const QAngle &angles,
|
|
const Vector &velocity,
|
|
const AngularImpulse &angVelocity,
|
|
CBaseCombatCharacter *pOwner,
|
|
float timer )
|
|
{
|
|
CGrenadeProjectile *pGrenade = (CGrenadeProjectile*)CBaseEntity::Create( "grenade_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( &CGrenadeProjectile::DangerSoundThink );
|
|
pGrenade->SetNextThink( gpGlobals->curtime );
|
|
|
|
return pGrenade;
|
|
}
|
|
};
|
|
|
|
LINK_ENTITY_TO_CLASS( grenade_projectile, CGrenadeProjectile );
|
|
PRECACHE_WEAPON_REGISTER( grenade_projectile );
|
|
|
|
BEGIN_DATADESC( CSDKGrenade )
|
|
END_DATADESC()
|
|
|
|
void CSDKGrenade::EmitGrenade( Vector vecSrc, QAngle vecAngles, Vector vecVel, AngularImpulse angImpulse, CBasePlayer *pPlayer )
|
|
{
|
|
CGrenadeProjectile::Create( vecSrc, vecAngles, vecVel, angImpulse, pPlayer, GRENADE_TIMER );
|
|
}
|
|
|
|
#endif
|
|
|