mirror of
https://github.com/alliedmodders/hl2sdk.git
synced 2025-09-19 12:06:07 +08:00
First version of the SOurce SDK 2013
This commit is contained in:
114
game/shared/sdk/weapon_grenade.cpp
Normal file
114
game/shared/sdk/weapon_grenade.cpp
Normal file
@ -0,0 +1,114 @@
|
||||
//========= 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
|
||||
|
Reference in New Issue
Block a user