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.
163 lines
4.7 KiB
163 lines
4.7 KiB
5 years ago
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||
|
//
|
||
|
// Purpose:
|
||
|
//
|
||
|
// $NoKeywords: $
|
||
|
//=============================================================================//
|
||
|
|
||
|
#ifndef VEHICLE_APC_H
|
||
|
#define VEHICLE_APC_H
|
||
|
|
||
|
#ifdef _WIN32
|
||
|
#pragma once
|
||
|
#endif
|
||
|
|
||
|
#include "vehicle_base.h"
|
||
|
#include "smoke_trail.h"
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose: Four wheel physics vehicle server vehicle with weaponry
|
||
|
//-----------------------------------------------------------------------------
|
||
|
class CAPCFourWheelServerVehicle : public CFourWheelServerVehicle
|
||
|
{
|
||
|
typedef CFourWheelServerVehicle BaseClass;
|
||
|
// IServerVehicle
|
||
|
public:
|
||
|
bool NPC_HasPrimaryWeapon( void ) { return true; }
|
||
|
void NPC_AimPrimaryWeapon( Vector vecTarget );
|
||
|
bool NPC_HasSecondaryWeapon( void ) { return true; }
|
||
|
void NPC_AimSecondaryWeapon( Vector vecTarget );
|
||
|
|
||
|
// Weaponry
|
||
|
void Weapon_PrimaryRanges( float *flMinRange, float *flMaxRange );
|
||
|
void Weapon_SecondaryRanges( float *flMinRange, float *flMaxRange );
|
||
|
float Weapon_PrimaryCanFireAt( void ); // Return the time at which this vehicle's primary weapon can fire again
|
||
|
float Weapon_SecondaryCanFireAt( void ); // Return the time at which this vehicle's secondary weapon can fire again
|
||
|
};
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// A driveable vehicle with a gun that shoots wherever the driver looks.
|
||
|
//-----------------------------------------------------------------------------
|
||
|
class CPropAPC : public CPropVehicleDriveable
|
||
|
{
|
||
|
DECLARE_CLASS( CPropAPC, CPropVehicleDriveable );
|
||
|
public:
|
||
|
// CBaseEntity
|
||
|
virtual void Precache( void );
|
||
|
void Think( void );
|
||
|
virtual void Spawn(void);
|
||
|
virtual void Activate();
|
||
|
virtual void UpdateOnRemove( void );
|
||
|
virtual void OnRestore( void );
|
||
|
|
||
|
// CPropVehicle
|
||
|
virtual void CreateServerVehicle( void );
|
||
|
virtual void DriveVehicle( float flFrameTime, CUserCmd *ucmd, int iButtonsDown, int iButtonsReleased );
|
||
|
virtual void ProcessMovement( CBasePlayer *pPlayer, CMoveData *pMoveData );
|
||
|
virtual Class_T ClassifyPassenger( CBaseCombatCharacter *pPassenger, Class_T defaultClassification );
|
||
|
virtual int OnTakeDamage( const CTakeDamageInfo &info );
|
||
|
virtual float PassengerDamageModifier( const CTakeDamageInfo &info );
|
||
|
|
||
|
// Weaponry
|
||
|
const Vector &GetPrimaryGunOrigin( void );
|
||
|
void AimPrimaryWeapon( const Vector &vecForward );
|
||
|
void AimSecondaryWeaponAt( CBaseEntity *pTarget );
|
||
|
float PrimaryWeaponFireTime( void ) { return m_flMachineGunTime; }
|
||
|
float SecondaryWeaponFireTime( void ) { return m_flRocketTime; }
|
||
|
float MaxAttackRange() const;
|
||
|
bool IsInPrimaryFiringCone() const { return m_bInFiringCone; }
|
||
|
|
||
|
// Muzzle flashes
|
||
|
const char *GetTracerType( void ) ;
|
||
|
void DoImpactEffect( trace_t &tr, int nDamageType );
|
||
|
void DoMuzzleFlash( void );
|
||
|
|
||
|
virtual Vector EyePosition( ); // position of eyes
|
||
|
Vector BodyTarget( const Vector &posSrc, bool bNoisy );
|
||
|
|
||
|
|
||
|
virtual void Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value );
|
||
|
|
||
|
private:
|
||
|
enum
|
||
|
{
|
||
|
MAX_SMOKE_TRAILS = 4,
|
||
|
MAX_EXPLOSIONS = 4,
|
||
|
};
|
||
|
|
||
|
// Should we trigger a damage effect?
|
||
|
bool ShouldTriggerDamageEffect( int nPrevHealth, int nEffectCount ) const;
|
||
|
|
||
|
// Add a smoke trail since we've taken more damage
|
||
|
void AddSmokeTrail( const Vector &vecPos );
|
||
|
|
||
|
// Creates the breakable husk of an attack chopper
|
||
|
void CreateChopperHusk();
|
||
|
|
||
|
// Pow!
|
||
|
void ExplodeAndThrowChunk( const Vector &vecExplosionPos );
|
||
|
|
||
|
void Event_Killed( const CTakeDamageInfo &info );
|
||
|
|
||
|
// Purpose:
|
||
|
void GetRocketShootPosition( Vector *pPosition );
|
||
|
|
||
|
void FireMachineGun( void );
|
||
|
void FireRocket( void );
|
||
|
|
||
|
// Death volley
|
||
|
void FireDying( );
|
||
|
|
||
|
// Create a corpse
|
||
|
void CreateCorpse( );
|
||
|
|
||
|
// Blows da shizzle up
|
||
|
void InputDestroy( inputdata_t &inputdata );
|
||
|
void InputFireMissileAt( inputdata_t &inputdata );
|
||
|
|
||
|
void CreateAPCLaserDot( void );
|
||
|
|
||
|
virtual bool ShouldAttractAutoAim( CBaseEntity *pAimingEnt );
|
||
|
|
||
|
|
||
|
private:
|
||
|
// Danger sounds made by the APC
|
||
|
float m_flDangerSoundTime;
|
||
|
|
||
|
// handbrake after the fact to keep vehicles from rolling
|
||
|
float m_flHandbrakeTime;
|
||
|
bool m_bInitialHandbrake;
|
||
|
|
||
|
// Damage effects
|
||
|
int m_nSmokeTrailCount;
|
||
|
|
||
|
// Machine gun attacks
|
||
|
int m_nMachineGunMuzzleAttachment;
|
||
|
int m_nMachineGunBaseAttachment;
|
||
|
float m_flMachineGunTime;
|
||
|
int m_iMachineGunBurstLeft;
|
||
|
Vector m_vecBarrelPos;
|
||
|
bool m_bInFiringCone;
|
||
|
|
||
|
// Rocket attacks
|
||
|
EHANDLE m_hLaserDot;
|
||
|
EHANDLE m_hRocketTarget;
|
||
|
int m_iRocketSalvoLeft;
|
||
|
float m_flRocketTime;
|
||
|
int m_nRocketAttachment;
|
||
|
int m_nRocketSide;
|
||
|
EHANDLE m_hSpecificRocketTarget;
|
||
|
string_t m_strMissileHint;
|
||
|
|
||
|
COutputEvent m_OnDeath;
|
||
|
COutputEvent m_OnFiredMissile;
|
||
|
COutputEvent m_OnDamaged;
|
||
|
COutputEvent m_OnDamagedByPlayer;
|
||
|
|
||
|
DECLARE_DATADESC();
|
||
|
};
|
||
|
|
||
|
#endif // VEHICLE_APC_H
|
||
|
|