You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
152 lines
4.2 KiB
152 lines
4.2 KiB
//========= 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
|