You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
139 lines
6.3 KiB
139 lines
6.3 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
// $NoKeywords: $ |
|
//=============================================================================// |
|
|
|
#ifndef ISERVERVEHICLE_H |
|
#define ISERVERVEHICLE_H |
|
|
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
#include "IVehicle.h" |
|
#include "vphysics/vehicles.h" |
|
|
|
class CBaseEntity; |
|
class CBasePlayer; |
|
class CBaseCombatCharacter; |
|
class CNPC_VehicleDriver; |
|
enum VehicleSeatQuery_e; |
|
|
|
// This is used by the player to access vehicles. It's an interface so the |
|
// vehicles are not restricted in what they can derive from. |
|
abstract_class IServerVehicle : public IVehicle |
|
{ |
|
public: |
|
// Get the entity associated with the vehicle. |
|
virtual CBaseEntity* GetVehicleEnt() = 0; |
|
|
|
// Get and set the current driver. Use PassengerRole_t enum in shareddefs.h for adding passengers |
|
virtual void SetPassenger( int nRole, CBaseCombatCharacter *pPassenger ) = 0; |
|
|
|
// Is the player visible while in the vehicle? (this is a constant the vehicle) |
|
virtual bool IsPassengerVisible( int nRole = VEHICLE_ROLE_DRIVER ) = 0; |
|
|
|
// Can a given passenger take damage? |
|
virtual bool IsPassengerDamagable( int nRole = VEHICLE_ROLE_DRIVER ) = 0; |
|
virtual bool PassengerShouldReceiveDamage( CTakeDamageInfo &info ) = 0; |
|
|
|
// Is the vehicle upright? |
|
virtual bool IsVehicleUpright( void ) = 0; |
|
|
|
// Whether or not we're in a transitional phase |
|
virtual bool IsPassengerEntering( void ) = 0; |
|
virtual bool IsPassengerExiting( void ) = 0; |
|
|
|
// Get a position in *world space* inside the vehicle for the player to start at |
|
virtual void GetPassengerSeatPoint( int nRole, Vector *pPoint, QAngle *pAngles ) = 0; |
|
|
|
virtual void HandlePassengerEntry( CBaseCombatCharacter *pPassenger, bool bAllowEntryOutsideZone = false ) = 0; |
|
virtual bool HandlePassengerExit( CBaseCombatCharacter *pPassenger ) = 0; |
|
|
|
// Get a point in *world space* to leave the vehicle from (may be in solid) |
|
virtual bool GetPassengerExitPoint( int nRole, Vector *pPoint, QAngle *pAngles ) = 0; |
|
virtual int GetEntryAnimForPoint( const Vector &vecPoint ) = 0; |
|
virtual int GetExitAnimToUse( Vector &vecEyeExitEndpoint, bool &bAllPointsBlocked ) = 0; |
|
virtual void HandleEntryExitFinish( bool bExitAnimOn, bool bResetAnim ) = 0; |
|
|
|
virtual Class_T ClassifyPassenger( CBaseCombatCharacter *pPassenger, Class_T defaultClassification ) = 0; |
|
virtual float PassengerDamageModifier( const CTakeDamageInfo &info ) = 0; |
|
|
|
// Get me the parameters for this vehicle |
|
virtual const vehicleparams_t *GetVehicleParams( void ) = 0; |
|
// If I'm a physics vehicle, get the controller |
|
virtual IPhysicsVehicleController *GetVehicleController() = 0; |
|
|
|
virtual int NPC_GetAvailableSeat( CBaseCombatCharacter *pPassenger, string_t strRoleName, VehicleSeatQuery_e nQueryType ) = 0; |
|
virtual bool NPC_AddPassenger( CBaseCombatCharacter *pPassenger, string_t strRoleName, int nSeat ) = 0; |
|
virtual bool NPC_RemovePassenger( CBaseCombatCharacter *pPassenger ) = 0; |
|
virtual bool NPC_GetPassengerSeatPosition( CBaseCombatCharacter *pPassenger, Vector *vecResultPos, QAngle *vecResultAngle ) = 0; |
|
virtual bool NPC_GetPassengerSeatPositionLocal( CBaseCombatCharacter *pPassenger, Vector *vecResultPos, QAngle *vecResultAngle ) = 0; |
|
virtual int NPC_GetPassengerSeatAttachment( CBaseCombatCharacter *pPassenger ) = 0; |
|
virtual bool NPC_HasAvailableSeat( string_t strRoleName ) = 0; |
|
|
|
virtual const PassengerSeatAnims_t *NPC_GetPassengerSeatAnims( CBaseCombatCharacter *pPassenger, PassengerSeatAnimType_t nType ) = 0; |
|
virtual CBaseCombatCharacter *NPC_GetPassengerInSeat( int nRoleID, int nSeatID ) = 0; |
|
|
|
virtual void RestorePassengerInfo( void ) = 0; |
|
|
|
// NPC Driving |
|
virtual bool NPC_CanDrive( void ) = 0; |
|
virtual void NPC_SetDriver( CNPC_VehicleDriver *pDriver ) = 0; |
|
virtual void NPC_DriveVehicle( void ) = 0; |
|
virtual void NPC_ThrottleCenter( void ) = 0; |
|
virtual void NPC_ThrottleReverse( void ) = 0; |
|
virtual void NPC_ThrottleForward( void ) = 0; |
|
virtual void NPC_Brake( void ) = 0; |
|
virtual void NPC_TurnLeft( float flDegrees ) = 0; |
|
virtual void NPC_TurnRight( float flDegrees ) = 0; |
|
virtual void NPC_TurnCenter( void ) = 0; |
|
virtual void NPC_PrimaryFire( void ) = 0; |
|
virtual void NPC_SecondaryFire( void ) = 0; |
|
virtual bool NPC_HasPrimaryWeapon( void ) = 0; |
|
virtual bool NPC_HasSecondaryWeapon( void ) = 0; |
|
virtual void NPC_AimPrimaryWeapon( Vector vecTarget ) = 0; |
|
virtual void NPC_AimSecondaryWeapon( Vector vecTarget ) = 0; |
|
|
|
// Weapon handling |
|
virtual void Weapon_PrimaryRanges( float *flMinRange, float *flMaxRange ) = 0; |
|
virtual void Weapon_SecondaryRanges( float *flMinRange, float *flMaxRange ) = 0; |
|
virtual float Weapon_PrimaryCanFireAt( void ) = 0; // Return the time at which this vehicle's primary weapon can fire again |
|
virtual float Weapon_SecondaryCanFireAt( void ) = 0; // Return the time at which this vehicle's secondary weapon can fire again |
|
|
|
// debugging, script file flushed |
|
virtual void ReloadScript() = 0; |
|
}; |
|
|
|
// This is an interface to derive from if your class contains an IServerVehicle |
|
// handler (i.e. something derived CBaseServerVehicle. |
|
abstract_class IDrivableVehicle |
|
{ |
|
public: |
|
virtual CBaseEntity *GetDriver( void ) = 0; |
|
|
|
// Process movement |
|
virtual void ItemPostFrame( CBasePlayer *pPlayer ) = 0; |
|
virtual void SetupMove( CBasePlayer *player, CUserCmd *ucmd, IMoveHelper *pHelper, CMoveData *move ) = 0; |
|
virtual void ProcessMovement( CBasePlayer *pPlayer, CMoveData *pMoveData ) = 0; |
|
virtual void FinishMove( CBasePlayer *player, CUserCmd *ucmd, CMoveData *move ) = 0; |
|
|
|
// Entering / Exiting |
|
virtual bool CanEnterVehicle( CBaseEntity *pEntity ) = 0; |
|
virtual bool CanExitVehicle( CBaseEntity *pEntity ) = 0; |
|
virtual void SetVehicleEntryAnim( bool bOn ) = 0; |
|
virtual void SetVehicleExitAnim( bool bOn, Vector vecEyeExitEndpoint ) = 0; |
|
virtual void EnterVehicle( CBaseCombatCharacter *pPassenger ) = 0; |
|
|
|
virtual void PreExitVehicle( CBaseCombatCharacter *pPassenger, int nRole ) = 0; |
|
virtual void ExitVehicle( int nRole ) = 0; |
|
virtual bool AllowBlockedExit( CBaseCombatCharacter *pPassenger, int nRole ) = 0; |
|
virtual bool AllowMidairExit( CBaseCombatCharacter *pPassenger, int nRole ) = 0; |
|
virtual string_t GetVehicleScriptName() = 0; |
|
|
|
virtual bool PassengerShouldReceiveDamage( CTakeDamageInfo &info ) = 0; |
|
}; |
|
|
|
#endif // IVEHICLE_H
|
|
|