hl2_src-leak-2017/src/game/shared/tf2/weapon_pistols.cpp

135 lines
4.4 KiB
C++

//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: Recon's dual semi-auto pistols
//
// $NoKeywords: $
//=============================================================================//
#include "cbase.h"
#include "tf_player.h"
#include "tf_basecombatweapon.h"
#include "in_buttons.h"
#include "gamerules.h"
#include "ammodef.h"
#include "basegrenade_shared.h"
ConVar weapon_pistols_damage( "weapon_pistols_damage","0", FCVAR_NONE, "Recon pistols maximum damage" );
ConVar weapon_pistols_range( "weapon_pistols_range","0", FCVAR_NONE, "Recon pistols maximum range" );
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
class CWeaponPistols : public CTFMachineGun
{
DECLARE_CLASS( CWeaponPistols, CTFMachineGun );
public:
virtual float GetFireRate( void );
virtual const Vector& GetBulletSpread( void );
virtual bool Deploy( void );
virtual void PrimaryAttack( void );
virtual void SecondaryAttack( void );
virtual void ItemPostFrame( void );
private:
float m_flSoonestPrimaryAttack;
float m_flLastPrimaryAttack;
};
LINK_ENTITY_TO_CLASS( weapon_pistols, CWeaponPistols );
PRECACHE_WEAPON_REGISTER(weapon_pistols);
//-----------------------------------------------------------------------------
// Purpose: Get the accuracy derived from weapon and player, and return it
//-----------------------------------------------------------------------------
const Vector& CWeaponPistols::GetBulletSpread( void )
{
static Vector cone;
cone = VECTOR_CONE_10DEGREES;
// Modify accuracy based upon firing rate
// Maximum accuracy's used if you're firing at the standard rate of the gun
float flModifier = MIN( GetFireRate(), gpGlobals->curtime - m_flLastPrimaryAttack );
flModifier = 1.0 - RemapVal( flModifier, 0, GetFireRate(), 0, 1.0 );
cone *= flModifier;
return cone;
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
float CWeaponPistols::GetFireRate( void )
{
return 0.5;
}
//-----------------------------------------------------------------------------
// Purpose: Constructor
//-----------------------------------------------------------------------------
bool CWeaponPistols::Deploy( void )
{
m_flSoonestPrimaryAttack = gpGlobals->curtime;
m_flLastPrimaryAttack = gpGlobals->curtime;
return BaseClass::Deploy();
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CWeaponPistols::PrimaryAttack( void )
{
m_flSoonestPrimaryAttack = gpGlobals->curtime + 0.1;
BaseClass::PrimaryAttack();
m_flLastPrimaryAttack = gpGlobals->curtime;
}
//-----------------------------------------------------------------------------
// Purpose: Throw out a sticky bomb
//-----------------------------------------------------------------------------
void CWeaponPistols::SecondaryAttack( void )
{
/* FIXME: Temporarily disabled
CBasePlayer *pPlayer = GetOwner();
if ( pPlayer == NULL )
return;
// Calculate position & velocity
Vector vecForward;
pPlayer->EyeVectors( &vecForward );
Vector vecOrigin = pPlayer->EyePosition();
vecOrigin += (vecForward * 16);
// Create the stickybomb
CBaseGrenade *pGrenade = (CBaseGrenade*)CreateEntityByName("grenade_stickybomb");
UTIL_SetOrigin( pGrenade->pev, vecOrigin );
pGrenade->Spawn();
pGrenade->SetOwnerEntity( pPlayer );
pGrenade->m_hOwner = pPlayer;
pGrenade->m_vecVelocity = vecForward * 1200;
VectorAngles( vecForward, pGrenade->GetAngles() );
// Reduce ammo, setup for refire
pPlayer->m_iAmmo[m_iSecondaryAmmoType]--;
m_flNextSecondaryAttack = gpGlobals->curtime + 0.5;
*/
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CWeaponPistols::ItemPostFrame( void )
{
CBasePlayer *pPlayer = ToBasePlayer( GetOwner() );
if ( pPlayer == NULL )
return;
// Allow a refire as fast as the player can click
if ( ( ( pPlayer->m_nButtons & IN_ATTACK ) == false ) && ( m_flSoonestPrimaryAttack < gpGlobals->curtime )
/* && ( m_flNextSecondaryAttack < gpGlobals->curtime )*/ )
{
m_flNextPrimaryAttack = gpGlobals->curtime - 0.1f;
}
BaseClass::ItemPostFrame();
}