This repository has been archived on 2024-06-13. You can view files and clone it, but cannot push or open issues or pull requests.
2020-08-04 13:13:01 -04:00

164 lines
5.0 KiB
C++

//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#ifndef VEHICLE_APC_H
#define VEHICLE_APC_H
#ifdef _WIN32
#pragma once
#endif
#include "smoke_trail.h"
#include "vehicle_base.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