mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-18 14:31:58 +00:00
1
This commit is contained in:
@@ -0,0 +1,272 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose: A base vehicle class
|
||||
//
|
||||
//=============================================================================//
|
||||
|
||||
#ifndef BASETFVEHICLE_H
|
||||
#define BASETFVEHICLE_H
|
||||
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "basetfplayer_shared.h"
|
||||
#include "baseobject_shared.h"
|
||||
#include "tf_obj_basedrivergun_shared.h"
|
||||
|
||||
#if defined( CLIENT_DLL )
|
||||
#include "iclientvehicle.h"
|
||||
#else
|
||||
#include "IServerVehicle.h"
|
||||
#endif
|
||||
|
||||
|
||||
class CMoveData;
|
||||
class CUserCmd;
|
||||
class CBasePlayer;
|
||||
|
||||
#if defined( CLIENT_DLL )
|
||||
#define CBaseTFVehicle C_BaseTFVehicle
|
||||
#endif
|
||||
|
||||
class CBaseTFVehicle;
|
||||
class CBaseObjectDriverGun;
|
||||
|
||||
struct VehicleBaseMoveData_t
|
||||
{
|
||||
CBaseTFVehicle *m_pVehicle;
|
||||
};
|
||||
|
||||
// ------------------------------------------------------------------------ //
|
||||
// The base class that all vehicles in tf2 will derive from
|
||||
// ------------------------------------------------------------------------ //
|
||||
#if defined( CLIENT_DLL )
|
||||
class CBaseTFVehicle : public CBaseObject, public IClientVehicle
|
||||
#else
|
||||
class CBaseTFVehicle : public CBaseObject, public IServerVehicle
|
||||
#endif
|
||||
{
|
||||
DECLARE_CLASS( CBaseTFVehicle, CBaseObject );
|
||||
|
||||
public:
|
||||
|
||||
DECLARE_NETWORKCLASS();
|
||||
DECLARE_PREDICTABLE();
|
||||
|
||||
CBaseTFVehicle();
|
||||
|
||||
#if !defined (CLIENT_DLL)
|
||||
// CBaseEntity overrides
|
||||
virtual void FinishedBuilding( void );
|
||||
virtual void DestroyObject( );
|
||||
virtual void Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value );
|
||||
virtual bool UseAttachedItem( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value );
|
||||
virtual void GetVectors(Vector* pForward, Vector* pRight, Vector* pUp) const;
|
||||
|
||||
virtual bool ClientCommand( CBaseTFPlayer *pPlayer, const CCommand &args );
|
||||
|
||||
// IVehicle overrides
|
||||
virtual IServerVehicle* GetServerVehicle() { return this; }
|
||||
|
||||
virtual CBaseEntity* GetVehicleEnt();
|
||||
|
||||
// Get and set the current driver.
|
||||
virtual void SetPassenger( int nRole, CBasePlayer *pEnt );
|
||||
|
||||
// Where do we get out of the vehicle?
|
||||
virtual bool GetPassengerExitPoint( int nRole, Vector *pExitPoint, QAngle *pAngles );
|
||||
|
||||
virtual Class_T ClassifyPassenger( CBasePlayer *pPassenger, Class_T defaultClassification ) { return defaultClassification; }
|
||||
virtual float DamageModifier ( CTakeDamageInfo &info ) { return 1.0; }
|
||||
virtual const vehicleparams_t *GetVehicleParams( void ) { return NULL; }
|
||||
|
||||
virtual bool IsVehicleUpright( void ) { return true; }
|
||||
virtual bool IsPassengerEntering( void ) { Assert( 0 ); return true; }
|
||||
virtual bool IsPassengerExiting( void ) { Assert( 0 ); return true; }
|
||||
|
||||
// NPC Driving
|
||||
virtual bool NPC_CanDrive( void ) { return true; }
|
||||
virtual void NPC_SetDriver( CNPC_VehicleDriver *pDriver ) { return; }
|
||||
virtual void NPC_DriveVehicle( void ) { return; }
|
||||
virtual void NPC_ThrottleCenter( void ) { return; }
|
||||
virtual void NPC_ThrottleReverse( void ) { return; }
|
||||
virtual void NPC_ThrottleForward( void ) { return; }
|
||||
virtual void NPC_Brake( void ) { return; }
|
||||
virtual void NPC_TurnLeft( float flDegrees ) { return; }
|
||||
virtual void NPC_TurnRight( float flDegrees ) { return; }
|
||||
virtual void NPC_TurnCenter( void ) { return; }
|
||||
virtual void NPC_PrimaryFire( void ) { return; }
|
||||
virtual void NPC_SecondaryFire( void ) { return; }
|
||||
virtual bool NPC_HasPrimaryWeapon( void ) { return false; }
|
||||
virtual bool NPC_HasSecondaryWeapon( void ) { return false; }
|
||||
virtual void NPC_AimPrimaryWeapon( Vector vecTarget ) { return; }
|
||||
virtual void NPC_AimSecondaryWeapon( Vector vecTarget ) { return; }
|
||||
|
||||
// Weapon handling
|
||||
virtual void Weapon_PrimaryRanges( float *flMinRange, float *flMaxRange ) { *flMinRange = 0; *flMaxRange = 0; }
|
||||
virtual void Weapon_SecondaryRanges( float *flMinRange, float *flMaxRange ) { *flMinRange = 0; *flMaxRange = 0; }
|
||||
virtual float Weapon_PrimaryCanFireAt( void ) { return gpGlobals->curtime; } // Return the time at which this vehicle's primary weapon can fire again
|
||||
virtual float Weapon_SecondaryCanFireAt( void ) { return gpGlobals->curtime; } // Return the time at which this vehicle's secondary weapon can fire again
|
||||
|
||||
// Vehicles dont want to attach to anything they're built upon
|
||||
virtual bool ShouldAttachToParent( void ) { return false; }
|
||||
|
||||
virtual bool MustNotBeBuiltInConstructionYard( void ) const { return false; }
|
||||
|
||||
// Purpose: Try to board the vehicle
|
||||
void AttemptToBoardVehicle( CBaseTFPlayer *pPlayer );
|
||||
|
||||
// Figure out which role of a parent vehicle this vehicle is sitting in..
|
||||
int GetParentVehicleRole();
|
||||
|
||||
// Purpose:
|
||||
void GetPassengerExitPoint( CBasePlayer *pPlayer, int nRole, Vector *pAbsPosition, QAngle *pAbsAngles );
|
||||
int GetEntryAnimForPoint( const Vector &vecPoint );
|
||||
int GetExitAnimToUse( Vector &vecEyeExitEndpoint, bool &bAllPointsBlocked );
|
||||
void HandleEntryExitFinish( bool bExitAnimOn, bool bResetAnim );
|
||||
void HandlePassengerEntry( CBasePlayer *pPlayer, bool bAllowEntryOutsideZone = false );
|
||||
bool HandlePassengerExit( CBasePlayer *pPlayer );
|
||||
|
||||
// Deterioration
|
||||
void VehicleDeteriorationThink( void );
|
||||
void VehiclePassengerThink( void );
|
||||
|
||||
#endif
|
||||
|
||||
bool IsReadyToDrive( void );
|
||||
|
||||
virtual bool IsAVehicle( void ) { return true; }
|
||||
|
||||
// Get a position in *local space* inside the vehicle for the player to start at
|
||||
virtual void GetPassengerStartPoint( int nRole, Vector *pPoint, QAngle *pAngles );
|
||||
|
||||
#if defined( CLIENT_DLL )
|
||||
// C_BaseEntity overrides
|
||||
virtual IClientVehicle* GetClientVehicle() { return this; }
|
||||
|
||||
virtual C_BaseEntity *GetVehicleEnt();
|
||||
|
||||
virtual void ClientThink();
|
||||
|
||||
// Fills in the unperterbed view position for a particular role.
|
||||
|
||||
// Prediction
|
||||
virtual bool ShouldPredict( void );
|
||||
virtual bool IsPredicted( void ) const { return true; }
|
||||
|
||||
// IClientVehicle
|
||||
|
||||
// Called at time player enters vehicle
|
||||
virtual void GetVehicleFOV( float &flFOV ) { return; }
|
||||
virtual void DrawHudElements( void );
|
||||
|
||||
// Get the angles that a player in the specified role should be using for visuals
|
||||
virtual QAngle GetPassengerAngles( QAngle angCurrent, int nRole );
|
||||
|
||||
// Allows the vehicle to restrict view angles
|
||||
virtual void UpdateViewAngles( C_BasePlayer *pLocalPlayer, CUserCmd *pCmd ) {}
|
||||
virtual void GetVehicleClipPlanes( float &flZNear, float &flZFar ) const {}
|
||||
|
||||
bool IsBoostable( void ) { return m_bBoostUpgrade; }
|
||||
|
||||
// Hud
|
||||
virtual void DrawHudBoostData( void );
|
||||
virtual void SetupCrosshair( void );
|
||||
|
||||
#endif
|
||||
|
||||
int LocateEntryPoint( CBaseTFPlayer *pPlayer, float* fBest2dDistanceSqr= NULL );
|
||||
|
||||
// This lets the object decide whether or not it wants to use the ThirdPersonCameraOrigin attachment for its view.
|
||||
// The manned guns use first-person when they're on the ground and third-person when they're in a vehicle.
|
||||
virtual bool ShouldUseThirdPersonVehicleView();
|
||||
virtual void GetVehicleViewPosition( int nRole, Vector *pOrigin, QAngle *pAngles, float *pFOV = NULL );
|
||||
virtual bool GetRoleViewPosition( int nRole, Vector *pVehicleEyeOrigin, QAngle *pVehicleEyeAngles );
|
||||
virtual bool GetRoleAbsViewPosition( int nRole, Vector *pAbsVehicleEyeOrigin, QAngle *pAbsVehicleEyeAngles );
|
||||
|
||||
// Can a given passenger take damage?
|
||||
virtual bool IsPassengerDamagable( int nRole ) { return (nRole != VEHICLE_DRIVER); }
|
||||
|
||||
|
||||
virtual void Spawn();
|
||||
virtual void SetupMove( CBasePlayer *player, CUserCmd *ucmd, IMoveHelper *pHelper, CMoveData *move );
|
||||
virtual void ProcessMovement( CBasePlayer *pPlayer, CMoveData *pMove ) {}
|
||||
virtual void FinishMove( CBasePlayer *player, CUserCmd *ucmd, CMoveData *move );
|
||||
virtual void ItemPostFrame( CBasePlayer *pPassenger );
|
||||
|
||||
virtual CBasePlayer* GetPassenger( int nRole = VEHICLE_DRIVER );
|
||||
virtual int GetPassengerRole( CBasePlayer *pEnt );
|
||||
|
||||
// Does the player use his normal weapons while in this mode?
|
||||
virtual bool IsPassengerUsingStandardWeapons( int nRole = VEHICLE_DRIVER ) { return false; }
|
||||
|
||||
virtual Vector GetSoundEmissionOrigin() const;
|
||||
|
||||
// Returns the driver as a tfplayer pointer
|
||||
CBaseTFPlayer *GetDriverPlayer();
|
||||
|
||||
int GetMaxPassengerCount() const;
|
||||
int GetPassengerCount() const;
|
||||
|
||||
// Is a particular player in the vehicle?
|
||||
bool IsPlayerInVehicle( CBaseTFPlayer *pPlayer );
|
||||
|
||||
void ResetDeteriorationTime( void );
|
||||
|
||||
// Driver controlled guns
|
||||
void SetDriverGun( CBaseObjectDriverGun *pGun );
|
||||
void VehicleDriverGunThink( void );
|
||||
|
||||
protected:
|
||||
enum
|
||||
{
|
||||
MAX_PASSENGERS = 4,
|
||||
MAX_PASSENGER_BITS = 3
|
||||
};
|
||||
|
||||
// Can we get into the vehicle?
|
||||
virtual bool CanGetInVehicle( CBaseTFPlayer *pPlayer );
|
||||
|
||||
// Here's where we deal with weapons
|
||||
virtual void OnItemPostFrame( CBaseTFPlayer *pDriver );
|
||||
|
||||
// Specify the number of roles we can have
|
||||
void SetMaxPassengerCount( int nMaxPassengers );
|
||||
|
||||
bool IsValidExitPoint( int nRole, Vector *pExitPoint, QAngle *pAngles );
|
||||
int GetEmptyRole( void );
|
||||
|
||||
private:
|
||||
#if !defined (CLIENT_DLL)
|
||||
// Get the parent vehicle of this vehicle..
|
||||
CBaseTFVehicle *GetParentVehicle();
|
||||
|
||||
// Get a position in *world space* inside the vehicle for the player to exit at
|
||||
void GetInitialPassengerExitPoint( int nRole, Vector *pAbsPoint, QAngle *pAbsAngles );
|
||||
|
||||
// Figure out which role of a vehicle a child vehicle is sitting in..
|
||||
int GetChildVehicleRole( CBaseTFVehicle *pChild );
|
||||
#endif
|
||||
|
||||
private:
|
||||
typedef CHandle<CBaseTFPlayer> CPlayerHandle;
|
||||
CNetworkArray( CPlayerHandle, m_hPassengers, MAX_PASSENGERS );
|
||||
CNetworkVar( int, m_nMaxPassengers );
|
||||
|
||||
// Driver controlled gun
|
||||
CNetworkHandle( CBaseObjectDriverGun, m_hDriverGun );
|
||||
|
||||
#if defined( CLIENT_DLL )
|
||||
|
||||
CHudTexture *m_pIconDefaultCrosshair;
|
||||
|
||||
bool m_bBoostUpgrade;
|
||||
int m_nBoostTimeLeft;
|
||||
|
||||
private:
|
||||
CBaseTFVehicle( const CBaseTFVehicle & ); // not defined, not accessible
|
||||
#endif
|
||||
};
|
||||
|
||||
#endif // BASETFVEHICLE_H
|
||||
Reference in New Issue
Block a user