//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // // $NoKeywords: $ //=============================================================================// #ifndef BASEGRENADE_SHARED_H #define BASEGRENADE_SHARED_H #ifdef _WIN32 #pragma once #endif #include "baseprojectile.h" #if defined( CLIENT_DLL ) #define CBaseGrenade C_BaseGrenade #include "c_basecombatcharacter.h" #else #include "basecombatcharacter.h" #include "player_pickup.h" #endif #define BASEGRENADE_EXPLOSION_VOLUME 1024 class CTakeDamageInfo; #if !defined( CLIENT_DLL ) class CBaseGrenade : public CBaseProjectile, public CDefaultPlayerPickupVPhysics #else class CBaseGrenade : public CBaseProjectile #endif { DECLARE_CLASS( CBaseGrenade, CBaseProjectile ); public: CBaseGrenade(void); ~CBaseGrenade(void); DECLARE_PREDICTABLE(); DECLARE_NETWORKCLASS(); #if !defined( CLIENT_DLL ) DECLARE_DATADESC(); #endif virtual void Precache( void ); virtual void Explode( trace_t *pTrace, int bitsDamageType ); void Smoke( void ); void BounceTouch( CBaseEntity *pOther ); void SlideTouch( CBaseEntity *pOther ); void ExplodeTouch( CBaseEntity *pOther ); void DangerSoundThink( void ); void PreDetonate( void ); virtual void Detonate( void ); void DetonateUse( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value ); void TumbleThink( void ); virtual Vector GetBlastForce() { return vec3_origin; } virtual void BounceSound( void ); virtual int BloodColor( void ) { return DONT_BLEED; } virtual void Event_Killed( const CTakeDamageInfo &info ); virtual float GetShakeAmplitude( void ) { return 25.0; } virtual float GetShakeRadius( void ) { return 750.0; } // Damage accessors. virtual float GetDamage() { return m_flDamage; } virtual float GetDamageRadius() { return m_DmgRadius; } virtual void SetDamage(float flDamage) { m_flDamage = flDamage; } virtual void SetDamageRadius(float flDamageRadius) { m_DmgRadius = flDamageRadius; } // Bounce sound accessors. void SetBounceSound( const char *pszBounceSound ) { m_iszBounceSound = MAKE_STRING( pszBounceSound ); } CBaseCombatCharacter *GetThrower( void ); void SetThrower( CBaseCombatCharacter *pThrower ); CBaseEntity *GetOriginalThrower() { return m_hOriginalThrower; } #if !defined( CLIENT_DLL ) // Allow +USE pickup int ObjectCaps() { return (BaseClass::ObjectCaps() | FCAP_IMPULSE_USE | FCAP_USE_IN_RADIUS); } void Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value ); #endif public: IMPLEMENT_NETWORK_VAR_FOR_DERIVED( m_vecVelocity ); IMPLEMENT_NETWORK_VAR_FOR_DERIVED( m_fFlags ); bool m_bHasWarnedAI; // whether or not this grenade has issued its DANGER sound to the world sound list yet. CNetworkVar( bool, m_bIsLive ); // Is this grenade live, or can it be picked up? CNetworkVar( float, m_DmgRadius ); // How far do I do damage? CNetworkVar( float, m_flNextAttack ); float m_flDetonateTime; // Time at which to detonate. float m_flWarnAITime; // Time at which to warn the AI protected: CNetworkVar( float, m_flDamage ); // Damage to inflict. string_t m_iszBounceSound; // The sound to make on bouncing. If not NULL, overrides the BounceSound() function. private: CNetworkHandle( CBaseEntity, m_hThrower ); // Who threw this grenade EHANDLE m_hOriginalThrower; // Who was the original thrower of this grenade CBaseGrenade( const CBaseGrenade & ); // not defined, not accessible }; #endif // BASEGRENADE_SHARED_H