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.
134 lines
4.4 KiB
134 lines
4.4 KiB
//========= 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(); |
|
} |
|
|
|
|