mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-11 03:09:36 +00:00
1
This commit is contained in:
@@ -0,0 +1,129 @@
|
||||
//========= 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 );
|
||||
}
|
||||
Reference in New Issue
Block a user