164 lines
5.0 KiB
C++
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
|