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.
135 lines
4.4 KiB
135 lines
4.4 KiB
5 years ago
|
//========= 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();
|
||
|
}
|
||
|
|