summaryrefslogtreecommitdiff
path: root/game/shared/tf/tf_weaponbase_grenadeproj.h
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/shared/tf/tf_weaponbase_grenadeproj.h
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'game/shared/tf/tf_weaponbase_grenadeproj.h')
-rw-r--r--game/shared/tf/tf_weaponbase_grenadeproj.h158
1 files changed, 158 insertions, 0 deletions
diff --git a/game/shared/tf/tf_weaponbase_grenadeproj.h b/game/shared/tf/tf_weaponbase_grenadeproj.h
new file mode 100644
index 0000000..e71bb00
--- /dev/null
+++ b/game/shared/tf/tf_weaponbase_grenadeproj.h
@@ -0,0 +1,158 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose: TF basic grenade projectile functionality.
+//
+//=============================================================================//
+#ifndef TF_WEAPONBASE_GRENADEPROJ_H
+#define TF_WEAPONBASE_GRENADEPROJ_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "tf_shareddefs.h"
+#include "tf_weaponbase.h"
+#include "basegrenade_shared.h"
+#include "networkstringtabledefs.h"
+
+#define TF_GRENADE_DESTROYABLE_TIMER (0.25)
+
+// Client specific.
+#ifdef CLIENT_DLL
+#define CTFWeaponBaseGrenadeProj C_TFWeaponBaseGrenadeProj
+#endif
+
+//=============================================================================
+//
+// TF base grenade projectile class.
+//
+class CTFWeaponBaseGrenadeProj : public CBaseGrenade
+{
+public:
+
+ DECLARE_CLASS( CTFWeaponBaseGrenadeProj, CBaseGrenade );
+ DECLARE_NETWORKCLASS();
+
+ CTFWeaponBaseGrenadeProj();
+ virtual ~CTFWeaponBaseGrenadeProj();
+ virtual void Spawn();
+ virtual void Precache();
+
+#ifdef GAME_DLL
+ virtual void InitGrenade( const Vector &velocity, const AngularImpulse &angVelocity, CBaseCombatCharacter *pOwner, const CTFWeaponInfo &weaponInfo );
+ virtual void InitGrenade( const Vector &velocity, const AngularImpulse &angVelocity, CBaseCombatCharacter *pOwner, const int iDamage, const float flRadius );
+
+ virtual int GetBaseProjectileType() const { return TF_BASE_PROJECTILE_GRENADE; }
+#endif
+
+ // Unique identifier.
+ virtual int GetWeaponID( void ) const { return TF_WEAPON_NONE; }
+ virtual int GetCustomDamageType() const { return TF_DMG_CUSTOM_NONE; }
+
+ // This gets sent to the client and placed in the client's interpolation history
+ // so the projectile starts out moving right off the bat.
+ CNetworkVector( m_vInitialVelocity );
+
+ virtual float GetShakeAmplitude( void ) { return 10.0; }
+ virtual float GetShakeRadius( void ) { return 300.0; }
+
+ void SetCritical( bool bCritical ) { m_bCritical = bCritical; }
+ virtual int GetDamageType();
+
+ virtual void SetLauncher( CBaseEntity *pLauncher ) OVERRIDE { m_hLauncher = pLauncher; BaseClass::SetLauncher( pLauncher ); }
+ CBaseEntity *GetLauncher( void ) { return m_hLauncher; }
+ virtual void IncrementDeflected( void ) { m_iDeflected++; }
+ void ResetDeflected( void ) { m_iDeflected = 0; }
+ int GetDeflected( void ) { return m_iDeflected; }
+ void SetDeflectOwner( CBaseEntity *pPlayer ) { m_hDeflectOwner = pPlayer; }
+ CBaseEntity *GetDeflectOwner( void ) { return m_hDeflectOwner; }
+ virtual float GetDamageRadius();
+ virtual int GetDamageCustom();
+ virtual int GetCustomParticleIndex() { return INVALID_STRING_INDEX; }
+ void BounceOff( IPhysicsObject *pPhysics );
+
+protected:
+ CNetworkHandleForDerived( CBaseEntity, m_hLauncher );
+
+private:
+
+ CTFWeaponBaseGrenadeProj( const CTFWeaponBaseGrenadeProj & );
+ CNetworkVar( int, m_iDeflected );
+
+ CNetworkHandle( CBaseEntity, m_hDeflectOwner );
+
+ // Client specific.
+#ifdef CLIENT_DLL
+
+public:
+
+ virtual void OnDataChanged( DataUpdateType_t type );
+
+ float m_flSpawnTime;
+ bool m_bCritical;
+
+ // Server specific.
+#else
+
+public:
+
+ DECLARE_DATADESC();
+
+ static CTFWeaponBaseGrenadeProj *Create( const char *szName, const Vector &position, const QAngle &angles,
+ const Vector &velocity, const AngularImpulse &angVelocity,
+ CBaseCombatCharacter *pOwner, const CTFWeaponInfo &weaponInfo, int iFlags );
+
+ int OnTakeDamage( const CTakeDamageInfo &info );
+
+ virtual void DetonateThink( void );
+ void Detonate( void );
+
+ void SetupInitialTransmittedGrenadeVelocity( const Vector &velocity ) { m_vInitialVelocity = velocity; }
+
+ bool ShouldNotDetonate( void );
+ virtual void Destroy( bool bBlinkOut = true, bool bBreak = false ) OVERRIDE;
+
+ void SetTimer( float time ){ m_flDetonateTime = time; }
+ float GetDetonateTime( void ){ return m_flDetonateTime; }
+
+ void SetDetonateTimerLength( float timer );
+
+ void VPhysicsUpdate( IPhysicsObject *pPhysics );
+
+ virtual bool IsAllowedToExplode( void ) { return true; }
+ void Explode( trace_t *pTrace, int bitsDamageType );
+
+ bool UseImpactNormal() { return m_bUseImpactNormal; }
+ const Vector &GetImpactNormal( void ) const { return m_vecImpactNormal; }
+
+ bool IsCritical() { return m_bCritical; }
+ virtual bool IsDestroyable( void ){ return gpGlobals->curtime > m_flDestroyableTime; }
+
+ virtual CBaseEntity *GetEnemy( void ) { return m_hEnemy; }
+
+protected:
+
+#ifdef STAGING_ONLY
+ void DrawRadius( float flRadius );
+#endif
+
+ bool m_bUseImpactNormal;
+ Vector m_vecImpactNormal;
+
+ // Custom collision to allow for constant elasticity on hit surfaces.
+ virtual void ResolveFlyCollisionCustom( trace_t &trace, Vector &vecVelocity );
+
+ float m_flDetonateTime;
+ CHandle<CBaseEntity> m_hEnemy;
+private:
+
+ bool m_bInSolid;
+
+ CNetworkVar( bool, m_bCritical );
+
+ float m_flDestroyableTime;
+ bool m_bIsMerasmusGrenade;
+
+#endif
+};
+
+#endif // TF_WEAPONBASE_GRENADEPROJ_H