source-engine/game/server/hl2/vehicle_jeep.h

168 lines
5.2 KiB
C
Raw Permalink Normal View History

2020-04-22 16:56:21 +00:00
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
//=============================================================================
#ifndef VEHICLE_JEEP_H
#define VEHICLE_JEEP_H
#ifdef _WIN32
#pragma once
#endif
#include "vehicle_base.h"
#define JEEP_WHEEL_COUNT 4
struct JeepWaterData_t
{
bool m_bWheelInWater[JEEP_WHEEL_COUNT];
bool m_bWheelWasInWater[JEEP_WHEEL_COUNT];
Vector m_vecWheelContactPoints[JEEP_WHEEL_COUNT];
float m_flNextRippleTime[JEEP_WHEEL_COUNT];
bool m_bBodyInWater;
bool m_bBodyWasInWater;
DECLARE_SIMPLE_DATADESC();
};
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
class CPropJeep : public CPropVehicleDriveable
{
public:
DECLARE_CLASS( CPropJeep, CPropVehicleDriveable );
DECLARE_SERVERCLASS();
DECLARE_DATADESC();
CPropJeep( void );
// CPropVehicle
virtual void ProcessMovement( CBasePlayer *pPlayer, CMoveData *pMoveData );
virtual void DriveVehicle( float flFrameTime, CUserCmd *ucmd, int iButtonsDown, int iButtonsReleased );
virtual void SetupMove( CBasePlayer *player, CUserCmd *ucmd, IMoveHelper *pHelper, CMoveData *move );
virtual void Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value );
virtual void DampenEyePosition( Vector &vecVehicleEyePos, QAngle &vecVehicleEyeAngles );
virtual bool AllowBlockedExit( CBasePlayer *pPlayer, int nRole ) { return false; }
virtual bool CanExitVehicle( CBaseEntity *pEntity );
virtual bool IsVehicleBodyInWater() { return m_WaterData.m_bBodyInWater; }
// Passengers do not directly receive damage from blasts or radiation damage
virtual bool PassengerShouldReceiveDamage( CTakeDamageInfo &info )
{
if ( GetServerVehicle() && GetServerVehicle()->IsPassengerExiting() )
return false;
if ( info.GetDamageType() & DMG_VEHICLE )
return true;
return (info.GetDamageType() & (DMG_RADIATION|DMG_BLAST) ) == 0;
}
// CBaseEntity
void Think(void);
void Precache( void );
void Spawn( void );
void Activate( void );
virtual void CreateServerVehicle( void );
virtual Vector BodyTarget( const Vector &posSrc, bool bNoisy = true );
virtual void TraceAttack( const CTakeDamageInfo &info, const Vector &vecDir, trace_t *ptr, CDmgAccumulator *pAccumulator );
virtual int OnTakeDamage( const CTakeDamageInfo &info );
virtual float PassengerDamageModifier( const CTakeDamageInfo &info );
virtual void EnterVehicle( CBaseCombatCharacter *pPassenger );
virtual void ExitVehicle( int nRole );
void AimGunAt( Vector *endPos, float flInterval );
bool TauCannonHasBeenCutOff( void ) { return m_bGunHasBeenCutOff; }
// NPC Driving
bool NPC_HasPrimaryWeapon( void ) { return true; }
void NPC_AimPrimaryWeapon( Vector vecTarget );
const char *GetTracerType( void ) { return "AR2Tracer"; }
void DoImpactEffect( trace_t &tr, int nDamageType );
bool HeadlightIsOn( void ) { return m_bHeadlightIsOn; }
void HeadlightTurnOn( void ) { m_bHeadlightIsOn = true; }
void HeadlightTurnOff( void ) { m_bHeadlightIsOn = false; }
private:
void FireCannon( void );
void ChargeCannon( void );
void FireChargedCannon( void );
void DrawBeam( const Vector &startPos, const Vector &endPos, float width );
void StopChargeSound( void );
void GetCannonAim( Vector *resultDir );
void InitWaterData( void );
void CheckWaterLevel( void );
void CreateSplash( const Vector &vecPosition );
void CreateRipple( const Vector &vecPosition );
void CreateDangerSounds( void );
void ComputePDControllerCoefficients( float *pCoefficientsOut, float flFrequency, float flDampening, float flDeltaTime );
void DampenForwardMotion( Vector &vecVehicleEyePos, QAngle &vecVehicleEyeAngles, float flFrameTime );
void DampenUpMotion( Vector &vecVehicleEyePos, QAngle &vecVehicleEyeAngles, float flFrameTime );
void JeepSeagullThink( void );
void SpawnPerchedSeagull( void );
void AddSeagullPoop( const Vector &vecOrigin );
void InputShowHudHint( inputdata_t &inputdata );
void InputStartRemoveTauCannon( inputdata_t &inputdata );
void InputFinishRemoveTauCannon( inputdata_t &inputdata );
protected:
virtual void HandleWater( void );
bool CheckWater( void );
bool m_bGunHasBeenCutOff;
float m_flDangerSoundTime;
int m_nBulletType;
bool m_bCannonCharging;
float m_flCannonTime;
float m_flCannonChargeStartTime;
Vector m_vecGunOrigin;
CSoundPatch *m_sndCannonCharge;
int m_nSpinPos;
float m_aimYaw;
float m_aimPitch;
float m_throttleDisableTime;
float m_flAmmoCrateCloseTime;
// handbrake after the fact to keep vehicles from rolling
float m_flHandbrakeTime;
bool m_bInitialHandbrake;
float m_flOverturnedTime;
Vector m_vecLastEyePos;
Vector m_vecLastEyeTarget;
Vector m_vecEyeSpeed;
Vector m_vecTargetSpeed;
JeepWaterData_t m_WaterData;
int m_iNumberOfEntries;
int m_nAmmoType;
// Seagull perching
float m_flPlayerExitedTime; // Time at which the player last left this vehicle
float m_flLastSawPlayerAt; // Time at which we last saw the player
EHANDLE m_hLastPlayerInVehicle;
EHANDLE m_hSeagull;
bool m_bHasPoop;
CNetworkVar( bool, m_bHeadlightIsOn );
};
#endif // VEHICLE_JEEP_H