Team Fortress 2 Source Code as on 22/4/2020
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.
 
 
 
 
 
 

131 lines
3.8 KiB

//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
//=============================================================================
#ifndef TF_WEAPON_PIPEBOMBLAUNCHER_H
#define TF_WEAPON_PIPEBOMBLAUNCHER_H
#ifdef _WIN32
#pragma once
#endif
#include "tf_weaponbase_gun.h"
#include "tf_weapon_grenade_pipebomb.h"
// Client specific.
#ifdef CLIENT_DLL
#define CTFPipebombLauncher C_TFPipebombLauncher
#endif
#define TF_PIPEBOMB_MAX_CHARGE_TIME 4.0f
#define TF_DETONATE_MODE_STANDARD 0
#define TF_DETONATE_MODE_DOT 1
#define TF_DETONATE_MODE_AIR 2
// hard code these eventually
#define TF_PIPEBOMB_MIN_CHARGE_VEL 900
#define TF_PIPEBOMB_MAX_CHARGE_VEL 2400
//=============================================================================
//
// TF Weapon Pipebomb Launcher.
//
#ifdef GAME_DLL
class CTFPipebombLauncher : public CTFWeaponBaseGun, public ITFChargeUpWeapon, public IEntityListener
#else
class CTFPipebombLauncher : public CTFWeaponBaseGun, public ITFChargeUpWeapon
#endif
{
public:
DECLARE_CLASS( CTFPipebombLauncher, CTFWeaponBaseGun );
DECLARE_NETWORKCLASS();
DECLARE_PREDICTABLE();
// Server specific.
#ifdef GAME_DLL
DECLARE_DATADESC();
#endif
CTFPipebombLauncher();
~CTFPipebombLauncher();
virtual void Spawn( void );
virtual int GetWeaponID( void ) const { return TF_WEAPON_PIPEBOMBLAUNCHER; }
virtual CBaseEntity *FireProjectile( CTFPlayer *pPlayer );
virtual void ItemBusyFrame( void );
virtual void ItemPostFrame( void );
virtual void SecondaryAttack();
virtual bool Holster( CBaseCombatWeapon *pSwitchingTo );
virtual bool Deploy( void );
virtual void PrimaryAttack( void );
virtual void WeaponIdle( void );
virtual float GetProjectileSpeed( void );
virtual bool Reload( void );
virtual void WeaponReset( void );
public:
// ITFChargeUpWeapon
virtual bool CanCharge() { return true; }
virtual float GetChargeBeginTime( void ) { return m_flChargeBeginTime; }
virtual float GetChargeMaxTime( void ) { float flChargeTime = TF_PIPEBOMB_MAX_CHARGE_TIME; CALL_ATTRIB_HOOK_FLOAT( flChargeTime, stickybomb_charge_rate ) return flChargeTime; }
virtual float GetChargeForceReleaseTime( void ) { return GetChargeMaxTime(); }
int GetPipeBombCount( void ) { return m_iPipebombCount; }
const CUtlVector< CHandle< CTFGrenadePipebombProjectile > > &GetPipeBombVector( void ) const;
int GetDetonateMode( void ) const { int iMode = 0; CALL_ATTRIB_HOOK_INT( iMode, set_detonate_mode ); return iMode; };
bool CanDestroyStickies( void ) const { int iMode = 0; CALL_ATTRIB_HOOK_INT( iMode, stickies_detonate_stickies ); return (iMode == 1); };
virtual void LaunchGrenade( void );
virtual void ForceLaunchGrenade( void ) { LaunchGrenade(); }
virtual bool DetonateRemotePipebombs( bool bFizzle );
virtual bool ModifyPipebombsInView( int iEffect );
virtual void AddPipeBomb( CTFGrenadePipebombProjectile *pBomb );
void DeathNotice( CBaseEntity *pVictim );
#ifdef CLIENT_DLL
void BombHighlightThink( void );
#endif
#ifdef GAME_DLL
void UpdateOnRemove( void );
virtual void ApplyPostHitEffects( const CTakeDamageInfo &inputInfo, CTFPlayer *pPlayer );
protected:
// This is here so we can network the pipebomb count for prediction purposes
CNetworkVar( int, m_iPipebombCount );
#endif
#ifdef CLIENT_DLL
int m_iPipebombCount;
float m_flNextBombCheckTime;
bool m_bBombThinking;
#endif
// List of active pipebombs
typedef CHandle<CTFGrenadePipebombProjectile> PipebombHandle;
CUtlVector<PipebombHandle> m_Pipebombs;
CNetworkVar( float, m_flChargeBeginTime );
float m_flLastDenySoundTime;
bool m_bNoAutoRelease;
bool m_bWantsToShoot;
private:
CTFPipebombLauncher( const CTFPipebombLauncher & ) {}
};
inline const CUtlVector< CHandle< CTFGrenadePipebombProjectile > > &CTFPipebombLauncher::GetPipeBombVector( void ) const
{
return m_Pipebombs;
}
#endif // TF_WEAPON_PIPEBOMBLAUNCHER_H