mirror of
https://github.com/alliedmodders/hl2sdk.git
synced 2025-09-20 20:46:03 +08:00
Added original SDK code for Alien Swarm.
This commit is contained in:
132
game/server/basegrenade_concussion.cpp
Normal file
132
game/server/basegrenade_concussion.cpp
Normal file
@ -0,0 +1,132 @@
|
||||
//========= Copyright <20> 1996-2005, Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//=============================================================================//
|
||||
#include "cbase.h"
|
||||
#include "baseentity.h"
|
||||
#include "basegrenade_shared.h"
|
||||
#include "soundent.h"
|
||||
|
||||
// memdbgon must be the last include file in a .cpp file!!!
|
||||
#include "tier0/memdbgon.h"
|
||||
|
||||
class CBaseGrenadeConcussion : public CBaseGrenade
|
||||
{
|
||||
DECLARE_DATADESC();
|
||||
|
||||
public:
|
||||
DECLARE_CLASS( CBaseGrenadeConcussion, CBaseGrenade );
|
||||
|
||||
void Spawn( void );
|
||||
void Precache( void );
|
||||
void FallThink(void);
|
||||
void ExplodeConcussion( CBaseEntity *pOther );
|
||||
|
||||
protected:
|
||||
static int m_nTrailSprite;
|
||||
};
|
||||
|
||||
int CBaseGrenadeConcussion::m_nTrailSprite = 0;
|
||||
|
||||
LINK_ENTITY_TO_CLASS( npc_concussiongrenade, CBaseGrenadeConcussion );
|
||||
|
||||
BEGIN_DATADESC( CBaseGrenadeConcussion )
|
||||
|
||||
DEFINE_THINKFUNC( FallThink ),
|
||||
DEFINE_ENTITYFUNC( ExplodeConcussion ),
|
||||
|
||||
END_DATADESC()
|
||||
|
||||
|
||||
void CBaseGrenadeConcussion::FallThink(void)
|
||||
{
|
||||
if (!IsInWorld())
|
||||
{
|
||||
Remove( );
|
||||
return;
|
||||
}
|
||||
CSoundEnt::InsertSound ( SOUND_DANGER, GetAbsOrigin() + GetAbsVelocity() * 0.5, GetAbsVelocity().Length( ), 0.2 );
|
||||
|
||||
SetNextThink( gpGlobals->curtime + random->RandomFloat(0.05, 0.1) );
|
||||
|
||||
if (GetWaterLevel() != 0)
|
||||
{
|
||||
SetAbsVelocity( GetAbsVelocity() * 0.5 );
|
||||
}
|
||||
|
||||
Vector pos = GetAbsOrigin() + Vector(random->RandomFloat(-4, 4), random->RandomFloat(-4, 4), random->RandomFloat(-4, 4));
|
||||
|
||||
CPVSFilter filter( GetAbsOrigin() );
|
||||
|
||||
te->Sprite( filter, 0.0,
|
||||
&pos,
|
||||
m_nTrailSprite,
|
||||
random->RandomFloat(0.5, 0.8),
|
||||
200 );
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Contact grenade, explode when it touches something
|
||||
//
|
||||
void CBaseGrenadeConcussion::ExplodeConcussion( CBaseEntity *pOther )
|
||||
{
|
||||
trace_t tr;
|
||||
Vector vecSpot;// trace starts here!
|
||||
|
||||
Vector velDir = GetAbsVelocity();
|
||||
VectorNormalize( velDir );
|
||||
vecSpot = GetAbsOrigin() - velDir * 32;
|
||||
UTIL_TraceLine( vecSpot, vecSpot + velDir * 64, MASK_SOLID_BRUSHONLY, this, COLLISION_GROUP_NONE, &tr );
|
||||
|
||||
Explode( &tr, DMG_BLAST );
|
||||
}
|
||||
|
||||
|
||||
void CBaseGrenadeConcussion::Spawn( void )
|
||||
{
|
||||
// point sized, solid, bouncing
|
||||
SetMoveType( MOVETYPE_FLYGRAVITY, MOVECOLLIDE_FLY_BOUNCE );
|
||||
SetSolid( SOLID_BBOX );
|
||||
SetCollisionGroup( COLLISION_GROUP_PROJECTILE );
|
||||
SetModel( "models/weapons/w_grenade.mdl" ); // BUG: wrong model
|
||||
|
||||
UTIL_SetSize(this, vec3_origin, vec3_origin);
|
||||
|
||||
// contact grenades arc lower
|
||||
SetGravity( UTIL_ScaleForGravity( 400 ) ); // use a lower gravity for grenades to make them easier to see
|
||||
QAngle angles;
|
||||
VectorAngles(GetAbsVelocity(), angles );
|
||||
SetLocalAngles( angles );
|
||||
|
||||
m_nRenderFX = kRenderFxGlowShell;
|
||||
SetRenderColor( 200, 200, 20 );
|
||||
SetRenderAlpha( 255 );
|
||||
|
||||
// make NPCs afaid of it while in the air
|
||||
SetThink( &CBaseGrenadeConcussion::FallThink );
|
||||
SetNextThink( gpGlobals->curtime );
|
||||
|
||||
// Tumble in air
|
||||
QAngle vecAngVel( random->RandomFloat ( -100, -500 ), 0, 0 );
|
||||
SetLocalAngularVelocity( vecAngVel );
|
||||
|
||||
// Explode on contact
|
||||
SetTouch( &CBaseGrenadeConcussion::ExplodeConcussion );
|
||||
|
||||
m_flDamage = 80;
|
||||
|
||||
// Allow player to blow this puppy up in the air
|
||||
m_takedamage = DAMAGE_YES;
|
||||
}
|
||||
|
||||
|
||||
void CBaseGrenadeConcussion::Precache( void )
|
||||
{
|
||||
BaseClass::Precache( );
|
||||
|
||||
PrecacheModel("models/weapons/w_grenade.mdl");
|
||||
m_nTrailSprite = PrecacheModel("sprites/twinkle01.vmt");
|
||||
}
|
Reference in New Issue
Block a user