diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/shared/tf/tf_weapon_grenade_pipebomb.h | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'game/shared/tf/tf_weapon_grenade_pipebomb.h')
| -rw-r--r-- | game/shared/tf/tf_weapon_grenade_pipebomb.h | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/game/shared/tf/tf_weapon_grenade_pipebomb.h b/game/shared/tf/tf_weapon_grenade_pipebomb.h new file mode 100644 index 0000000..1d404d7 --- /dev/null +++ b/game/shared/tf/tf_weapon_grenade_pipebomb.h @@ -0,0 +1,159 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: TF Pipebomb Grenade. +// +//=============================================================================// +#ifndef TF_WEAPON_GRENADE_PIPEBOMB_H +#define TF_WEAPON_GRENADE_PIPEBOMB_H +#ifdef _WIN32 +#pragma once +#endif + +#include "tf_weaponbase_grenadeproj.h" + +// Client specific. +#ifdef CLIENT_DLL +#define CTFGrenadePipebombProjectile C_TFGrenadePipebombProjectile +#endif + +//----------------------------------------------------------------------------- +// Grenade Launcher mode (for pipebombs). +//----------------------------------------------------------------------------- +enum +{ + TF_GL_MODE_REGULAR = 0, + TF_GL_MODE_REMOTE_DETONATE, + TF_GL_MODE_REMOTE_DETONATE_PRACTICE, + TF_GL_MODE_CANNONBALL, + + // + // ADD NEW ITEMS HERE TO AVOID BREAKING DEMOS + // +}; + +//============================================================================= +// +// TF Pipebomb Grenade +// +class CTFGrenadePipebombProjectile : public CTFWeaponBaseGrenadeProj +{ +public: + + DECLARE_CLASS( CTFGrenadePipebombProjectile, CTFWeaponBaseGrenadeProj ); + DECLARE_NETWORKCLASS(); + + CTFGrenadePipebombProjectile(); + ~CTFGrenadePipebombProjectile(); + + // Unique identifier. + virtual int GetWeaponID( void ) const; + + int GetType( void ) const { return m_iType; } + virtual int GetDamageType(); + bool HasStickyEffects() const { return m_iType == TF_GL_MODE_REMOTE_DETONATE || m_iType == TF_GL_MODE_REMOTE_DETONATE_PRACTICE; } + + bool ShouldMiniCritOnReflect() const; + + void SetChargeTime( float flChargeTime ) { m_flChargeTime = flChargeTime; } + + CNetworkVar( bool, m_bTouched ); + CNetworkVar( int, m_iType ); // TF_GL_MODE_REGULAR or TF_GL_MODE_REMOTE_DETONATE + float m_flCreationTime; + float m_flChargeTime; + bool m_bPulsed; + float m_flFullDamage; + + void SetFullDamage( float flFullDamage ) { m_flFullDamage = flFullDamage; } + + CNetworkVar( bool, m_bDefensiveBomb ); + + virtual void UpdateOnRemove( void ); + + virtual void SetCustomPipebombModel() {} + + virtual float GetLiveTime( void ); + virtual float GetDamageRadius() OVERRIDE; + + void SetDetonateOnPulse( bool bDet ) { m_bDetonateOnPulse = bDet; } + +#ifdef CLIENT_DLL + + virtual void OnDataChanged( DataUpdateType_t updateType ); + virtual const char *GetTrailParticleName( void ); + virtual int DrawModel( int flags ); + virtual void Simulate( void ); + virtual void CreateTrailParticles( void ); + + void SetHighlight( bool bHighlight ) { if ( m_bPulsed ) m_bHighlight = bHighlight; } + bool IsHighlighted( void ) { return m_bHighlight; } + + int m_iCachedDeflect; + CNewParticleEffect *pEffectTrail; + CNewParticleEffect *pEffectCrit; + bool m_bHighlight; + bool m_bDetonateOnPulse; + + CGlowObject *m_pGlowEffect; + +#else + + DECLARE_DATADESC(); + + // Creation. + static CTFGrenadePipebombProjectile *Create( const Vector &position, const QAngle &angles, const Vector &velocity, + const AngularImpulse &angVelocity, CBaseCombatCharacter *pOwner, const CTFWeaponInfo &weaponInfo, int iPipeBombType, float flMultDmg ); + + static const char* GetPipebombClass( int iPipeBombType ); + + // Overrides. + virtual void Spawn(); + virtual void Precache(); + + virtual void BounceSound( void ); + virtual void Detonate(); + virtual void Fizzle(); + virtual bool DetonateStickies( void ); + bool CanTakeDamage() const { return m_bCanTakeDamage; } + void SetCanTakeDamage( bool bCanTakeDamage ) { m_bCanTakeDamage = bCanTakeDamage; } + + virtual void SetPipebombMode( int iPipebombMode = TF_GL_MODE_REGULAR ); + bool IsFizzle() { return m_bFizzle; } + + virtual void PipebombTouch( CBaseEntity *pOther ); + virtual void StickybombTouch( CBaseEntity *pOther ); + virtual void VPhysicsCollision( int index, gamevcollisionevent_t *pEvent ); + + virtual int OnTakeDamage( const CTakeDamageInfo &info ); + virtual void IncrementDeflected( void ); + virtual void DetonateThink( void ); + virtual void PreArmThink( void ); + virtual void ArmThink( void ); + + void CreatePipebombGibs( void ); + + virtual bool IsDeflectable( void ) { return true; } + virtual void Deflected( CBaseEntity *pDeflectedBy, Vector& vecDir ); + + virtual int GetDamageCustom(); + float GetTouchedTime() { return m_flTouchedTime; } + bool IsTouched() { return m_bTouched; } +public: + + bool m_bFizzle; + bool m_bWallShatter; +private: + + float m_flMinSleepTime; + float m_flDeflectedTime; + bool m_bSendPlayerDestroyedEvent; + bool m_bDetonateOnPulse; + bool m_bCanTakeDamage; + float m_flTouchedTime; + float GetDamageScaleOnWorldContact(); + + CUtlVector < CHandle <CTFPlayer> > m_CritMedics; + CUtlVector < CHandle <CBaseEntity> > m_penetratedEntities; +#endif +}; + +#endif // TF_WEAPON_GRENADE_PIPEBOMB_H |