Modified source engine (2017) developed by valve and leaked in 2020. Not for commercial purporses
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

//========= 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