You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
129 lines
3.8 KiB
129 lines
3.8 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: Sticky bombs thrown by the recon |
|
// |
|
// $NoKeywords: $ |
|
//=============================================================================// |
|
|
|
#include "cbase.h" |
|
#include "player.h" |
|
#include "basegrenade_shared.h" |
|
#include "tf_shareddefs.h" |
|
#include "Sprite.h" |
|
|
|
|
|
// Damage CVars |
|
ConVar grenade_stickybomb_damage( "grenade_stickybomb_damage","0", 0, "Recon's stickybomb maximum damage" ); |
|
ConVar grenade_stickybomb_radius( "grenade_stickybomb_radius","0", 0, "Recon's stickybomb splash radius" ); |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
class CGrenadeStickyBomb : public CBaseGrenade |
|
{ |
|
DECLARE_CLASS( CGrenadeStickyBomb, CBaseGrenade ); |
|
public: |
|
CGrenadeStickyBomb(); |
|
|
|
DECLARE_DATADESC(); |
|
|
|
void Spawn( void ); |
|
void Precache( void ); |
|
void SetTimer( float timer ); |
|
void StickyTouch( CBaseEntity *pOther ); |
|
virtual void Explode( trace_t *pTrace, int bitsDamageType ); |
|
virtual int GetDamageType() const { return DMG_BLAST; } |
|
|
|
private: |
|
CSprite *m_pLiveSprite; |
|
}; |
|
|
|
// Global Savedata for friction modifier |
|
BEGIN_DATADESC( CGrenadeStickyBomb ) |
|
|
|
// Function Pointers |
|
DEFINE_ENTITYFUNC( StickyTouch ), |
|
|
|
END_DATADESC() |
|
|
|
|
|
LINK_ENTITY_TO_CLASS( grenade_stickybomb, CGrenadeStickyBomb ); |
|
PRECACHE_WEAPON_REGISTER(grenade_stickybomb); |
|
|
|
CGrenadeStickyBomb::CGrenadeStickyBomb() |
|
{ |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CGrenadeStickyBomb::Precache( void ) |
|
{ |
|
PrecacheModel( "models/weapons/w_grenade.mdl" ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CGrenadeStickyBomb::Spawn( void ) |
|
{ |
|
Precache(); |
|
|
|
SetMoveType( MOVETYPE_FLYGRAVITY, MOVECOLLIDE_FLY_BOUNCE ); |
|
SetSolid( SOLID_BBOX ); |
|
SetGravity( 0.6 ); |
|
SetFriction( 1.0 ); |
|
SetModel( "models/weapons/w_grenade.mdl"); |
|
UTIL_SetSize(this, Vector( -4, -4, -4), Vector(4, 4, 4)); |
|
SetTouch( StickyTouch ); |
|
SetCollisionGroup( TFCOLLISION_GROUP_WEAPON ); |
|
|
|
// Create a red light |
|
m_pLiveSprite = CSprite::SpriteCreate( "sprites/redglow1.vmt", GetLocalOrigin(), false ); |
|
m_pLiveSprite->SetTransparency( kRenderGlow, 255, 200, 200, 255, kRenderFxNoDissipation ); |
|
m_pLiveSprite->SetBrightness( 255 ); |
|
m_pLiveSprite->SetScale( 0.3 ); |
|
m_pLiveSprite->SetAttachment( this, 0 ); |
|
|
|
// Set my damages to the cvar values |
|
SetDamage( grenade_stickybomb_damage.GetFloat() ); |
|
SetDamageRadius( grenade_stickybomb_radius.GetFloat() ); |
|
|
|
SetTimer( 2.0 ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CGrenadeStickyBomb::SetTimer( float timer ) |
|
{ |
|
SetThink( Detonate ); |
|
SetNextThink( gpGlobals->curtime + timer ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Make the grenade stick to whatever it touches |
|
//----------------------------------------------------------------------------- |
|
void CGrenadeStickyBomb::StickyTouch( CBaseEntity *pOther ) |
|
{ |
|
if ( pOther->IsBSPModel() == false ) |
|
return; |
|
|
|
BounceSound(); |
|
SetAbsVelocity( vec3_origin ); |
|
SetMoveType( MOVETYPE_NONE ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Remove my glow when I'm removed |
|
//----------------------------------------------------------------------------- |
|
void CGrenadeStickyBomb::Explode( trace_t *pTrace, int bitsDamageType ) |
|
{ |
|
if ( m_pLiveSprite ) |
|
{ |
|
UTIL_Remove( m_pLiveSprite ); |
|
m_pLiveSprite = NULL; |
|
} |
|
|
|
BaseClass::Explode( pTrace, bitsDamageType ); |
|
}
|
|
|