summaryrefslogtreecommitdiff
path: root/game/shared/tf/tf_weaponbase_rocket.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_rocket.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_rocket.h')
-rw-r--r--game/shared/tf/tf_weaponbase_rocket.h152
1 files changed, 152 insertions, 0 deletions
diff --git a/game/shared/tf/tf_weaponbase_rocket.h b/game/shared/tf/tf_weaponbase_rocket.h
new file mode 100644
index 0000000..b90ec1b
--- /dev/null
+++ b/game/shared/tf/tf_weaponbase_rocket.h
@@ -0,0 +1,152 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose: TF Base Rockets.
+//
+//=============================================================================//
+#ifndef TF_WEAPONBASE_ROCKET_H
+#define TF_WEAPONBASE_ROCKET_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "cbase.h"
+#include "tf_shareddefs.h"
+#include "baseprojectile.h"
+
+// Server specific.
+#ifdef GAME_DLL
+#include "smoke_trail.h"
+#endif
+
+#ifdef CLIENT_DLL
+#define CTFBaseRocket C_TFBaseRocket
+#endif
+
+#define TF_ROCKET_RADIUS_FOR_RJS (110.0f * 1.1f) // radius * TF scale up factor (121) - Used when applying damage to attacker.
+#define TF_ROCKET_RADIUS (146) // Radius used when applying damage to others
+#define TF_FLARE_DET_RADIUS (110) // Special version of the flare that can be detonated by the player
+#define TF_FLARE_RADIUS_FOR_FJS (100.0f)
+#define TF_ROCKET_DESTROYABLE_TIMER (0.25)
+
+
+//=============================================================================
+//
+// TF Base Rocket.
+//
+class CTFBaseRocket : public CBaseProjectile
+{
+
+//=============================================================================
+//
+// Shared (client/server).
+//
+public:
+
+ DECLARE_CLASS( CTFBaseRocket, CBaseProjectile );
+ DECLARE_NETWORKCLASS();
+
+ CTFBaseRocket();
+ ~CTFBaseRocket();
+
+ void Precache( void );
+ void Spawn( void );
+
+ virtual int GetWeaponID( void ) const { return TF_WEAPON_ROCKETLAUNCHER; }
+ virtual int GetCustomDamageType() const { return TF_DMG_CUSTOM_NONE; }
+ virtual void IncrementDeflected( void ) { m_iDeflected++; }
+ void ResetDeflected( void ) { m_iDeflected = 0; }
+ int GetDeflected( void ) { return m_iDeflected; }
+
+protected:
+
+ // Networked.
+ CNetworkVector( m_vInitialVelocity );
+ CNetworkVar( int, m_iDeflected );
+
+//=============================================================================
+//
+// Client specific.
+//
+#ifdef CLIENT_DLL
+
+public:
+
+ virtual int DrawModel( int flags );
+ virtual void PostDataUpdate( DataUpdateType_t type );
+ virtual void OnDataChanged(DataUpdateType_t updateType);
+ virtual void CreateTrails( void ) { }
+ CBaseEntity *GetLauncher( void ) { return m_hLauncher; }
+
+protected:
+
+ float m_flSpawnTime;
+ int m_iCachedDeflect;
+ CNetworkHandle( CBaseEntity, m_hLauncher );
+
+//=============================================================================
+//
+// Server specific.
+//
+#else
+
+public:
+
+ DECLARE_DATADESC();
+
+ static CTFBaseRocket *Create( CBaseEntity *pLauncher, const char *szClassname, const Vector &vecOrigin, const QAngle &vecAngles, CBaseEntity *pOwner = NULL );
+
+ virtual void RocketTouch( CBaseEntity *pOther );
+ virtual void Explode( trace_t *pTrace, CBaseEntity *pOther );
+ void CheckForStunOnImpact( CTFPlayer* pTarget );
+ int GetStunLevel( void );
+
+ virtual bool ShouldNotDetonate( void );
+ virtual void Destroy( bool bBlinkOut = true, bool bBreakRocket = false ) OVERRIDE;
+
+ virtual float GetDamage() { return m_flDamage; }
+ virtual int GetDamageType() { return g_aWeaponDamageTypes[ GetWeaponID() ]; }
+ virtual int GetDamageCustom() { return TF_DMG_CUSTOM_NONE; }
+ virtual void SetDamage(float flDamage) { m_flDamage = flDamage; }
+#ifdef STAGING_ONLY
+ void DrawRadius( float flRadius );
+#endif
+ virtual float GetRadius();
+
+ virtual void SetDamageForceScale( float flScale ) { m_flDamageForceScale = flScale; }
+ virtual float GetDamageForceScale() { return m_flDamageForceScale; }
+
+ unsigned int PhysicsSolidMaskForEntity( void ) const;
+
+ void SetupInitialTransmittedGrenadeVelocity( const Vector &velocity ) { m_vInitialVelocity = velocity; }
+
+ virtual CBaseEntity *GetEnemy( void ) { return m_hEnemy; }
+
+ void SetHomingTarget( CBaseEntity *pHomingTarget );
+
+ virtual void SetLauncher( CBaseEntity *pLauncher ) OVERRIDE { m_hLauncher = pLauncher; BaseClass::SetLauncher( pLauncher ); }
+ CBaseEntity *GetLauncher( void ) { return m_hLauncher; }
+
+ virtual bool IsDestroyable( void ){ return gpGlobals->curtime > m_flDestroyableTime; }
+
+ CBaseEntity *GetOwnerPlayer( void ) const;
+
+protected:
+
+ // Not networked.
+ float m_flDamage;
+
+ CNetworkHandle( CBaseEntity, m_hLauncher );
+
+ float m_flDestroyableTime;
+ bool m_bCritical;
+ bool m_bStunOnImpact;
+
+ float m_flDamageForceScale;
+
+ CHandle<CBaseEntity> m_hEnemy;
+
+#endif
+};
+
+
+#endif // TF_WEAPONBASE_ROCKET_H \ No newline at end of file