sqwarmed/sdk_src/game/server/swarm/asw_jeep.h

165 lines
5.6 KiB
C++

#ifndef _INCLUDED_ASW_VEHICLE_JEEP_H
#define _INCLUDED_ASW_VEHICLE_JEEP_H
#ifdef _WIN32
#pragma once
#endif
#include "vehicle_base.h"
#include "iasw_vehicle.h"
#include "asw_marine.h"
#define ASW_JEEP_WHEEL_COUNT 4
struct ASWJeepWaterData_t
{
bool m_bWheelInWater[ASW_JEEP_WHEEL_COUNT];
bool m_bWheelWasInWater[ASW_JEEP_WHEEL_COUNT];
Vector m_vecWheelContactPoints[ASW_JEEP_WHEEL_COUNT];
float m_flNextRippleTime[ASW_JEEP_WHEEL_COUNT];
bool m_bBodyInWater;
bool m_bBodyWasInWater;
DECLARE_SIMPLE_DATADESC();
};
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
class CASW_PropJeep : public CPropVehicleDriveable, public IASW_Vehicle
{
DECLARE_CLASS( CASW_PropJeep, CPropVehicleDriveable );
public:
DECLARE_SERVERCLASS();
DECLARE_DATADESC();
CASW_PropJeep( 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; }
// CBaseEntity
void Think(void);
virtual void ThinkTick(); // asw
void Precache( void );
void Spawn( 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 );
virtual int OnTakeDamage( const CTakeDamageInfo &info );
virtual void EnterVehicle( CBasePlayer *pPlayer );
virtual void ExitVehicle( int iRole );
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; }
void DestroyAndReplace(); // asw
// implement our asw vehicle interface
virtual int ASWGetNumPassengers() { return 0; } // todo: implement
virtual void ASWSetDriver(CASW_Marine* pDriver) { m_hDriver = pDriver; }
virtual CASW_Marine* ASWGetDriver();
virtual CASW_Marine* ASWGetPassenger(int i) { return NULL; } // todo: implement
virtual void ActivateUseIcon( CASW_Marine* pMarine, int nHoldType );
virtual CBaseEntity* GetEntity() { return this; }
virtual void ASWStartEngine() { StartEngine(); }
virtual void ASWStopEngine() { StopEngine(); }
CNetworkHandle(CASW_Marine, m_hDriver);
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 HandleWater( void );
bool CheckWater( void );
void CheckWaterLevel( void );
void CreateSplash( const Vector &vecPosition );
void CreateRipple( const Vector &vecPosition );
void UpdateSteeringAngle( void );
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 InputStartRemoveTauCannon( inputdata_t &inputdata );
void InputFinishRemoveTauCannon( inputdata_t &inputdata );
private:
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;
ASWJeepWaterData_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;
CNetworkVar( bool, m_bHeadlightIsOn );
// IASW_Server_Usable_Entity
virtual bool IsUsable(CBaseEntity *pUser);
virtual void MarineStartedUsing(CASW_Marine* pMarine) { }
virtual void MarineStoppedUsing(CASW_Marine* pMarine) { }
virtual void MarineUsing(CASW_Marine* pMarine, float fDeltaTime) { }
virtual bool NeedsLOSCheck() { return false; }
};
#endif // _INCLUDED_ASW_VEHICLE_JEEP_H