|
|
//========= 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" ); }
|