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