mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-17 14:07:48 +00:00
1
This commit is contained in:
@@ -0,0 +1,327 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
//
|
||||
//=============================================================================
|
||||
#ifndef TF_WEAPON_FLAMETHROWER_H
|
||||
#define TF_WEAPON_FLAMETHROWER_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "tf_weaponbase_gun.h"
|
||||
#include "tf_weaponbase_rocket.h"
|
||||
#ifdef STAGING_ONLY
|
||||
#include "tf_weapon_jar.h"
|
||||
#endif // STAGING_ONLY
|
||||
|
||||
// Client specific.
|
||||
#ifdef CLIENT_DLL
|
||||
#include "particlemgr.h"
|
||||
#include "particle_util.h"
|
||||
#include "particles_simple.h"
|
||||
#include "c_tf_projectile_rocket.h"
|
||||
|
||||
#define CTFFlameThrower C_TFFlameThrower
|
||||
#define CTFFlameRocket C_TFFlameRocket
|
||||
#ifdef STAGING_ONLY
|
||||
#define CTFProjectile_Napalm C_TFProjectile_Napalm
|
||||
#endif // STAGING_ONLY
|
||||
#else
|
||||
#include "tf_projectile_rocket.h"
|
||||
#include "baseentity.h"
|
||||
#include "iscorer.h"
|
||||
#endif
|
||||
|
||||
enum FlameThrowerState_t
|
||||
{
|
||||
// Firing states.
|
||||
FT_STATE_IDLE = 0,
|
||||
FT_STATE_STARTFIRING,
|
||||
FT_STATE_FIRING,
|
||||
FT_STATE_SECONDARY,
|
||||
};
|
||||
|
||||
enum EFlameThrowerAirblastFunction
|
||||
{
|
||||
TF_FUNCTION_AIRBLAST_PUSHBACK = 0x01,
|
||||
TF_FUNCTION_AIRBLAST_PUT_OUT_TEAMMATES = 0x02,
|
||||
TF_FUNCTION_AIRBLAST_REFLECT_PROJECTILES = 0x04,
|
||||
|
||||
TF_FUNCTION_AIRBLAST_PUSHBACK__STUN = 0x08, // dependent on TF_FUNCTION_AIRBLAST_PUSHBACK
|
||||
TF_FUNCTION_AIRBLAST_PUSHBACK__VIEW_PUNCH = 0x10, // dependent on TF_FUNCTION_AIRBLAST_PUSHBACK
|
||||
};
|
||||
|
||||
//=========================================================
|
||||
// Flamethrower Weapon
|
||||
//=========================================================
|
||||
#ifdef GAME_DLL
|
||||
class CTFFlameThrower : public CTFWeaponBaseGun, public CGameEventListener
|
||||
#else
|
||||
class CTFFlameThrower : public CTFWeaponBaseGun
|
||||
#endif // GAME_DLL
|
||||
{
|
||||
DECLARE_CLASS( CTFFlameThrower, CTFWeaponBaseGun );
|
||||
public:
|
||||
DECLARE_DATADESC();
|
||||
DECLARE_NETWORKCLASS();
|
||||
DECLARE_PREDICTABLE();
|
||||
|
||||
CTFFlameThrower();
|
||||
~CTFFlameThrower();
|
||||
|
||||
virtual void Spawn( void );
|
||||
|
||||
virtual int GetWeaponID( void ) const { return TF_WEAPON_FLAMETHROWER; }
|
||||
|
||||
virtual bool Holster( CBaseCombatWeapon *pSwitchingTo );
|
||||
virtual void ItemPostFrame( void );
|
||||
virtual void PrimaryAttack();
|
||||
virtual void SecondaryAttack();
|
||||
virtual bool Lower( void );
|
||||
virtual void WeaponReset( void );
|
||||
|
||||
virtual void DestroySounds( void );
|
||||
virtual void Precache( void );
|
||||
|
||||
bool CanAirBlast() const;
|
||||
|
||||
bool SupportsAirBlastFunction( EFlameThrowerAirblastFunction eFunction ) const;
|
||||
void FireAirBlast( int iAmmoPerShot );
|
||||
|
||||
float GetSpinUpTime( void ) const;
|
||||
virtual bool IsFiring( void ) const OVERRIDE { return m_iWeaponState == FT_STATE_FIRING; }
|
||||
void SetWeaponState( int nWeaponState );
|
||||
|
||||
void UseRage( void );
|
||||
|
||||
Vector GetVisualMuzzlePos();
|
||||
Vector GetFlameOriginPos();
|
||||
|
||||
void IncrementFlameDamageCount( void );
|
||||
void DecrementFlameDamageCount( void );
|
||||
void IncrementActiveFlameCount( void );
|
||||
void DecrementActiveFlameCount( void );
|
||||
void ResetFlameHitCount( void );
|
||||
|
||||
virtual int GetBuffType() { int iBuffType = 0; CALL_ATTRIB_HOOK_INT( iBuffType, set_buff_type ); return iBuffType; }
|
||||
|
||||
float GetProgress( void );
|
||||
bool IsRageFull( void ); // same as GetProgress() without the division by 100.0f
|
||||
const char* GetEffectLabelText( void ) { return "#TF_PYRORAGE"; }
|
||||
bool EffectMeterShouldFlash( void );
|
||||
|
||||
virtual bool Deploy( void );
|
||||
|
||||
#if defined( CLIENT_DLL )
|
||||
|
||||
virtual void OnDataChanged(DataUpdateType_t updateType);
|
||||
virtual void UpdateOnRemove( void );
|
||||
virtual void SetDormant( bool bDormant );
|
||||
virtual int GetWorldModelIndex( void );
|
||||
|
||||
// Start/stop flame sound and particle effects
|
||||
void StartFlame();
|
||||
void StopFlame( bool bAbrupt = false );
|
||||
|
||||
virtual void RestartParticleEffect();
|
||||
virtual const char* FlameEffectName( bool bIsFirstPersonView );
|
||||
virtual const char* FlameCritEffectName( bool bIsFirstPersonView );
|
||||
virtual const char* FullCritChargedEffectName( void );
|
||||
|
||||
void ClientEffectsThink( void );
|
||||
|
||||
// constant pilot light sound
|
||||
void StartPilotLight();
|
||||
void StopPilotLight();
|
||||
void StopFullCritEffect();
|
||||
|
||||
// burning sound when you hit a player/building
|
||||
void StopHitSound();
|
||||
|
||||
float GetFlameHitRatio( void );
|
||||
|
||||
#else
|
||||
void SetHitTarget( void );
|
||||
void HitTargetThink( void );
|
||||
|
||||
virtual Vector GetDeflectionSize();
|
||||
virtual bool DeflectPlayer( CTFPlayer *pTarget, CTFPlayer *pOwner, Vector &vecForward, Vector &vecCenter, Vector &vecSize );
|
||||
virtual bool DeflectEntity( CBaseEntity *pTarget, CTFPlayer *pOwner, Vector &vecForward, Vector &vecCenter, Vector &vecSize );
|
||||
virtual void PlayDeflectionSound( bool bPlayer );
|
||||
#endif
|
||||
|
||||
#ifdef STAGING_ONLY
|
||||
bool RocketPackCanActivate( int nAmmoCost );
|
||||
bool RocketPackLaunch( int nAmmoCost );
|
||||
bool ShootsNapalm( void );
|
||||
#endif // STAGING_ONLY
|
||||
|
||||
virtual void FireGameEvent( IGameEvent *event );
|
||||
|
||||
void CalculateHalloweenSpell( void );
|
||||
|
||||
private:
|
||||
Vector GetMuzzlePosHelper( bool bVisualPos );
|
||||
CNetworkVar( int, m_iWeaponState );
|
||||
CNetworkVar( bool, m_bCritFire );
|
||||
CNetworkVar( bool, m_bHitTarget );
|
||||
CNetworkVar( int, m_iActiveFlames ); // Number of flames we have in the world
|
||||
CNetworkVar( int, m_iDamagingFlames ); // Number of flames that have done damage
|
||||
CNetworkVar( float, m_flChargeBeginTime );
|
||||
CNetworkVar( float, m_flSpinupBeginTime );
|
||||
CNetworkVar( bool, m_bHasHalloweenSpell );
|
||||
|
||||
float m_flStartFiringTime;
|
||||
float m_flNextPrimaryAttackAnim;
|
||||
|
||||
int m_iParticleWaterLevel;
|
||||
float m_flAmmoUseRemainder;
|
||||
float m_flResetBurstEffect;
|
||||
bool m_bFiredSecondary;
|
||||
bool m_bFiredBothAttacks;
|
||||
|
||||
#if defined( CLIENT_DLL )
|
||||
CSoundPatch *m_pFiringStartSound;
|
||||
CSoundPatch *m_pFiringLoop;
|
||||
CSoundPatch *m_pFiringAccuracyLoop;
|
||||
CSoundPatch *m_pFiringHitLoop;
|
||||
bool m_bFiringLoopCritical;
|
||||
bool m_bFiringHitTarget;
|
||||
CSoundPatch *m_pPilotLightSound;
|
||||
CSoundPatch *m_pSpinUpSound;
|
||||
float m_flFlameHitRatio;
|
||||
float m_flPrevFlameHitRatio;
|
||||
const char *m_szAccuracySound;
|
||||
bool m_bEffectsThinking;
|
||||
bool m_bFullRageEffect;
|
||||
|
||||
class FlameEffect_t
|
||||
{
|
||||
public:
|
||||
FlameEffect_t( CTFWeaponBase* pOwner ) : m_pFlameEffect(NULL), m_pOwner(pOwner), m_hEffectWeapon(NULL)
|
||||
{}
|
||||
|
||||
void StartEffects( const char* pszEffectName);
|
||||
bool StopEffects();
|
||||
|
||||
private:
|
||||
CNewParticleEffect* m_pFlameEffect;
|
||||
CTFWeaponBase* m_pOwner;
|
||||
EHANDLE m_hEffectWeapon;
|
||||
};
|
||||
|
||||
FlameEffect_t m_FlameEffects;
|
||||
FlameEffect_t m_MmmmphEffect;
|
||||
#else
|
||||
float m_flTimeToStopHitSound;
|
||||
#endif
|
||||
|
||||
CTFFlameThrower( const CTFFlameThrower & );
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Flame rocket. Not used in TF2, but is a part of data tables in demos and
|
||||
// must live on forever.
|
||||
//-----------------------------------------------------------------------------
|
||||
class CTFFlameRocket : public CTFBaseRocket
|
||||
{
|
||||
DECLARE_CLASS( CTFFlameRocket, CTFBaseRocket );
|
||||
public:
|
||||
DECLARE_NETWORKCLASS();
|
||||
};
|
||||
|
||||
#ifdef GAME_DLL
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
DECLARE_AUTO_LIST( ITFFlameEntityAutoList );
|
||||
class CTFFlameEntity : public CBaseEntity, public ITFFlameEntityAutoList
|
||||
{
|
||||
DECLARE_CLASS( CTFFlameEntity, CBaseEntity );
|
||||
public:
|
||||
|
||||
CTFFlameEntity();
|
||||
virtual void Spawn( void );
|
||||
|
||||
public:
|
||||
static CTFFlameEntity *Create( const Vector &vecOrigin, const QAngle &vecAngles, CBaseEntity *pOwner, float flSpeed, int iDmgType, float m_flDmgAmount, bool bAlwaysCritFromBehind, bool bRandomize=true );
|
||||
|
||||
void FlameThink( void );
|
||||
void SetCritFromBehind( bool bState ) { m_bCritFromBehind = bState; }
|
||||
bool IsEntityAttacker( CBaseEntity *pEnt ) { return m_hAttacker.Get() == pEnt; }
|
||||
|
||||
private:
|
||||
void RemoveFlame();
|
||||
void OnCollide( CBaseEntity *pOther );
|
||||
void OnCollideWithTeammate( CTFPlayer *pPlayer );
|
||||
void SetHitTarget( void );
|
||||
bool IsBehindTarget( CBaseEntity *pTarget );
|
||||
float DotProductToTarget( CBaseEntity *pTarget );
|
||||
void UpdateFlameThrowerHitRatio( void );
|
||||
float GetFlameFloat( void );
|
||||
float GetFlameDrag( void );
|
||||
|
||||
Vector m_vecInitialPos; // position the flame was fired from
|
||||
Vector m_vecPrevPos; // position from previous frame
|
||||
Vector m_vecBaseVelocity; // base velocity vector of the flame (ignoring rise effect)
|
||||
Vector m_vecAttackerVelocity; // velocity of attacking player at time flame was fired
|
||||
float m_flTimeRemove; // time at which the flame should be removed
|
||||
int m_iDmgType; // damage type
|
||||
float m_flDmgAmount; // amount of base damage
|
||||
CUtlVector<EHANDLE> m_hEntitiesBurnt; // list of entities this flame has burnt
|
||||
EHANDLE m_hAttacker; // attacking player
|
||||
int m_iAttackerTeam; // team of attacking player
|
||||
bool m_bCritFromBehind; // Always crits from behind.
|
||||
bool m_bBurnedEnemy; // We track hitting to calculate hit/miss ratio in the Flamethrower
|
||||
|
||||
CHandle< CTFFlameThrower > m_hFlameThrower;
|
||||
};
|
||||
#endif // GAME_DLL
|
||||
|
||||
|
||||
#ifdef STAGING_ONLY
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
class CTFProjectile_Napalm : public CTFProjectile_Jar
|
||||
{
|
||||
DECLARE_CLASS( CTFProjectile_Napalm, CTFProjectile_Jar );
|
||||
DECLARE_NETWORKCLASS();
|
||||
DECLARE_PREDICTABLE();
|
||||
DECLARE_DATADESC();
|
||||
|
||||
public:
|
||||
CTFProjectile_Napalm();
|
||||
~CTFProjectile_Napalm();
|
||||
|
||||
virtual void Precache();
|
||||
virtual void Spawn();
|
||||
#ifdef GAME_DLL
|
||||
static CTFProjectile_Napalm *Create( CBaseCombatCharacter *pOwner, CTFFlameThrower *pLauncher );
|
||||
virtual int UpdateTransmitState();
|
||||
void NapalmThink( void );
|
||||
virtual void Explode( trace_t *pTrace, int bitsDamageType );
|
||||
virtual void PipebombTouch( CBaseEntity *pOther );
|
||||
virtual void ApplyBlastDamage( CTFPlayer *pThrower, Vector vecOrigin );
|
||||
virtual bool InitialExplodeEffects( CTFPlayer *pThrower, const trace_t *pTrace );
|
||||
virtual void ExplodeEffectOnTarget( CTFPlayer *pThrower, CTFPlayer *pTarget, CBaseCombatCharacter *pBaseTarget );
|
||||
virtual const char *GetImpactEffect( void );
|
||||
virtual void SetCustomPipebombModel( void );
|
||||
#endif
|
||||
|
||||
#ifdef CLIENT_DLL
|
||||
virtual void OnDataChanged( DataUpdateType_t updateType );
|
||||
virtual const char *GetTrailParticleName( void );
|
||||
#endif // CLIENT_DLL
|
||||
|
||||
CNetworkHandle( CTFFlameThrower, m_hFlameThrower );
|
||||
|
||||
#ifdef GAME_DLL
|
||||
Vector m_vecBaseVelocity;
|
||||
float m_flRemoveTime;
|
||||
int m_nHitCount;
|
||||
float m_flLastBurnTime;
|
||||
#endif // CLIENT_DLL
|
||||
};
|
||||
#endif // STAGING_ONLY
|
||||
#endif // TF_WEAPON_FLAMETHROWER_H
|
||||
Reference in New Issue
Block a user