mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-08 01:39:36 +00:00
1
This commit is contained in:
@@ -0,0 +1,182 @@
|
||||
//========= 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" );
|
||||
}
|
||||
Reference in New Issue
Block a user