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.
165 lines
4.0 KiB
165 lines
4.0 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
//============================================================================= |
|
#ifndef TF_WEAPON_FLAREGUN_H |
|
#define TF_WEAPON_FLAREGUN_H |
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
#include "tf_weaponbase_gun.h" |
|
#ifdef GAME_DLL |
|
#include "tf_projectile_flare.h" |
|
#endif |
|
|
|
// Client specific. |
|
#ifdef CLIENT_DLL |
|
#define CTFFlareGun C_TFFlareGun |
|
#define CTFFlareGun_Revenge C_TFFlareGun_Revenge |
|
#endif |
|
|
|
enum FlareGunTypes_t |
|
{ |
|
FLAREGUN_NORMAL = 0, |
|
FLAREGUN_DETONATE, |
|
FLAREGUN_GRORDBORT, |
|
FLAREGUN_SCORCHSHOT |
|
}; |
|
|
|
//============================================================================= |
|
// |
|
// TF Weapon Flare gun. |
|
// |
|
class CTFFlareGun : public CTFWeaponBaseGun |
|
{ |
|
public: |
|
|
|
DECLARE_CLASS( CTFFlareGun, CTFWeaponBaseGun ); |
|
DECLARE_NETWORKCLASS(); |
|
DECLARE_PREDICTABLE(); |
|
|
|
// Server specific. |
|
#ifdef GAME_DLL |
|
DECLARE_DATADESC(); |
|
#endif |
|
|
|
CTFFlareGun(); |
|
~CTFFlareGun(); |
|
|
|
virtual void Precache(); |
|
virtual void DestroySounds( void ); |
|
|
|
virtual int GetWeaponID( void ) const { return TF_WEAPON_FLAREGUN; } |
|
virtual void PrimaryAttack(); |
|
virtual void SecondaryAttack(); |
|
|
|
virtual bool Holster( CBaseCombatWeapon *pSwitchingTo ); |
|
virtual bool Deploy( void ); |
|
virtual void ItemPostFrame( void ); |
|
virtual void WeaponReset( void ); |
|
|
|
int GetFlareGunType( void ) const { int iMode = 0; CALL_ATTRIB_HOOK_INT( iMode, set_weapon_mode ); return iMode; } |
|
|
|
#ifdef GAME_DLL |
|
void AddFlare( CTFProjectile_Flare *pFlare ); |
|
void DeathNotice( CBaseEntity *pVictim ); |
|
void DetonateFlare( void ); |
|
#endif |
|
|
|
virtual void StartCharge( void ); |
|
virtual void StopCharge( void ); |
|
virtual void ChargePostFrame( void ) {} // Derived weapons can figure out what to do with this |
|
virtual const char* GetChargeEffect( void ) const { return "drg_cowmangler_muzzleflash_chargeup"; } |
|
|
|
float GetChargeBeginTime( void ) const { return m_flChargeBeginTime; } |
|
|
|
protected: |
|
|
|
#ifdef GAME_DLL |
|
typedef CHandle<CTFProjectile_Flare> FlareHandle; |
|
CUtlVector <FlareHandle> m_Flares; |
|
int m_iFlareCount; |
|
#endif |
|
|
|
protected: |
|
void StartChargeStartTime() { m_flChargeBeginTime = gpGlobals->curtime; } |
|
|
|
#ifdef CLIENT_DLL |
|
virtual void DispatchMuzzleFlash( const char* effectName, C_BaseEntity* pAttachEnt ); |
|
void ClientEffectsThink( void ); |
|
void StartChargeEffects(); |
|
void StopChargeEffects(); |
|
virtual bool ShouldPlayClientReloadSound() { return true; } |
|
#endif |
|
|
|
private: |
|
|
|
CNetworkVar( float, m_flChargeBeginTime ); |
|
|
|
bool m_bEffectsThinking; |
|
float m_flLastDenySoundTime; |
|
|
|
#if defined( CLIENT_DLL ) |
|
CSoundPatch *m_pChargeLoop; |
|
bool m_bReadyToFire; |
|
#endif |
|
|
|
CTFFlareGun( const CTFFlareGun & ) {} |
|
}; |
|
|
|
|
|
//--------------------------------------------------------- |
|
class CTFFlareGun_Revenge : public CTFFlareGun |
|
{ |
|
public: |
|
DECLARE_CLASS( CTFFlareGun_Revenge, CTFFlareGun ); |
|
DECLARE_NETWORKCLASS(); |
|
DECLARE_PREDICTABLE(); |
|
|
|
CTFFlareGun_Revenge(); |
|
|
|
virtual void Precache(); |
|
|
|
virtual int GetWeaponID( void ) const { return TF_WEAPON_FLAREGUN_REVENGE; } |
|
virtual bool IsEnergyWeapon( void ) const { return true; } |
|
|
|
virtual int GetCustomDamageType() const; |
|
|
|
virtual bool Holster( CBaseCombatWeapon *pSwitchingTo = NULL ); |
|
virtual bool Deploy( void ); |
|
|
|
#ifdef GAME_DLL |
|
virtual void Detach(); |
|
#endif |
|
|
|
int GetCount( void ); |
|
float GetProgress( void ) { return 0.0f; } |
|
const char* GetEffectLabelText( void ) { return "#TF_CRITS"; } |
|
|
|
const char* GetMuzzleFlashParticleEffect( void ) { return "drg_manmelter_muzzleflash"; } |
|
|
|
virtual void PrimaryAttack(); |
|
virtual void SecondaryAttack( void ); |
|
virtual void ChargePostFrame( void ); |
|
virtual const char* GetChargeEffect( void ) const { return "drg_manmelter_vacuum"; } |
|
virtual const char* ReadyToFireSound( void ) const { return "Weapon_SniperRailgun.NonScoped"; } |
|
|
|
#ifdef CLIENT_DLL |
|
virtual void OnDataChanged( DataUpdateType_t type ); |
|
void DoAbsorbEffect( void ); |
|
#endif |
|
|
|
private: |
|
bool ExtinguishPlayerInternal( CTFPlayer *pTarget, CTFPlayer *pOwner ); |
|
|
|
CNetworkVar( float, m_fLastExtinguishTime ); |
|
|
|
#ifdef CLIENT_DLL |
|
int m_nOldRevengeCrits; |
|
#endif |
|
|
|
}; |
|
|
|
#endif // TF_WEAPON_FLAREGUN_H
|
|
|