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.
162 lines
4.7 KiB
162 lines
4.7 KiB
//========= 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 |
|
|
|
|