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.
182 lines
3.4 KiB
182 lines
3.4 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
//=============================================================================// |
|
|
|
#include "cbase.h" |
|
#include "basehlcombatweapon.h" |
|
#include "NPCevent.h" |
|
#include "basecombatcharacter.h" |
|
#include "ai_basenpc.h" |
|
#include "player.h" |
|
#include "in_buttons.h" |
|
|
|
// memdbgon must be the last include file in a .cpp file!!! |
|
#include "tier0/memdbgon.h" |
|
|
|
#define DAMAGE_PER_SECOND 10 |
|
|
|
#define MAX_SETTINGS 5 |
|
|
|
float RateOfFire[ MAX_SETTINGS ] = |
|
{ |
|
0.1, |
|
0.2, |
|
0.5, |
|
0.7, |
|
1.0, |
|
}; |
|
|
|
float Damage[ MAX_SETTINGS ] = |
|
{ |
|
2, |
|
4, |
|
10, |
|
14, |
|
20, |
|
}; |
|
|
|
|
|
//========================================================= |
|
//========================================================= |
|
class CWeaponAR1 : public CHLMachineGun |
|
{ |
|
DECLARE_DATADESC(); |
|
public: |
|
DECLARE_CLASS( CWeaponAR1, CHLMachineGun ); |
|
|
|
DECLARE_SERVERCLASS(); |
|
|
|
CWeaponAR1(); |
|
|
|
int m_ROF; |
|
|
|
void Precache( void ); |
|
bool Deploy( void ); |
|
|
|
float GetFireRate( void ) {return RateOfFire[ m_ROF ];} |
|
|
|
int CapabilitiesGet( void ) { return bits_CAP_WEAPON_RANGE_ATTACK1; } |
|
|
|
void SecondaryAttack( void ); |
|
|
|
virtual void FireBullets( const FireBulletsInfo_t &info ); |
|
|
|
virtual const Vector& GetBulletSpread( void ) |
|
{ |
|
static const Vector cone = VECTOR_CONE_10DEGREES; |
|
return cone; |
|
} |
|
|
|
void Operator_HandleAnimEvent( animevent_t *pEvent, CBaseCombatCharacter *pOperator ) |
|
{ |
|
switch( pEvent->event ) |
|
{ |
|
case EVENT_WEAPON_AR1: |
|
{ |
|
Vector vecShootOrigin, vecShootDir; |
|
vecShootOrigin = pOperator->Weapon_ShootPosition( ); |
|
|
|
CAI_BaseNPC *npc = pOperator->MyNPCPointer(); |
|
ASSERT( npc != NULL ); |
|
|
|
vecShootDir = npc->GetActualShootTrajectory( vecShootOrigin ); |
|
|
|
WeaponSound(SINGLE_NPC); |
|
pOperator->FireBullets( 1, vecShootOrigin, vecShootDir, VECTOR_CONE_PRECALCULATED, MAX_TRACE_LENGTH, m_iPrimaryAmmoType, 2 ); |
|
pOperator->DoMuzzleFlash(); |
|
} |
|
break; |
|
default: |
|
CBaseCombatWeapon::Operator_HandleAnimEvent( pEvent, pOperator ); |
|
break; |
|
} |
|
} |
|
DECLARE_ACTTABLE(); |
|
}; |
|
|
|
IMPLEMENT_SERVERCLASS_ST(CWeaponAR1, DT_WeaponAR1) |
|
END_SEND_TABLE() |
|
|
|
LINK_ENTITY_TO_CLASS( weapon_ar1, CWeaponAR1 ); |
|
PRECACHE_WEAPON_REGISTER(weapon_ar1); |
|
|
|
acttable_t CWeaponAR1::m_acttable[] = |
|
{ |
|
{ ACT_RANGE_ATTACK1, ACT_RANGE_ATTACK_AR1, true }, |
|
}; |
|
|
|
IMPLEMENT_ACTTABLE(CWeaponAR1); |
|
|
|
//--------------------------------------------------------- |
|
// Save/Restore |
|
//--------------------------------------------------------- |
|
BEGIN_DATADESC( CWeaponAR1 ) |
|
|
|
DEFINE_FIELD( m_ROF, FIELD_INTEGER ), |
|
|
|
END_DATADESC() |
|
|
|
|
|
CWeaponAR1::CWeaponAR1( ) |
|
{ |
|
m_ROF = 0; |
|
} |
|
|
|
void CWeaponAR1::Precache( void ) |
|
{ |
|
BaseClass::Precache(); |
|
} |
|
|
|
bool CWeaponAR1::Deploy( void ) |
|
{ |
|
//CBaseCombatCharacter *pOwner = m_hOwner; |
|
return BaseClass::Deploy(); |
|
} |
|
|
|
|
|
//========================================================= |
|
//========================================================= |
|
void CWeaponAR1::FireBullets( const FireBulletsInfo_t &info ) |
|
{ |
|
if(CBasePlayer *pPlayer = ToBasePlayer( GetOwner() )) |
|
{ |
|
pPlayer->FireBullets( info ); |
|
} |
|
} |
|
|
|
|
|
void CWeaponAR1::SecondaryAttack( void ) |
|
{ |
|
CBasePlayer *pPlayer = ToBasePlayer( GetOwner() ); |
|
if ( pPlayer ) |
|
{ |
|
pPlayer->m_nButtons &= ~IN_ATTACK2; |
|
} |
|
|
|
m_flNextSecondaryAttack = gpGlobals->curtime + 0.1; |
|
|
|
m_ROF += 1; |
|
|
|
if( m_ROF == MAX_SETTINGS ) |
|
{ |
|
m_ROF = 0; |
|
} |
|
|
|
int i; |
|
|
|
Msg( "\n" ); |
|
for( i = 0 ; i < MAX_SETTINGS ; i++ ) |
|
{ |
|
if( i == m_ROF ) |
|
{ |
|
Msg( "|" ); |
|
} |
|
else |
|
{ |
|
Msg( "-" ); |
|
} |
|
} |
|
Msg( "\n" ); |
|
}
|
|
|