This repository has been archived on 2024-06-13. You can view files and clone it, but cannot push or open issues or pull requests.
2020-08-04 13:13:01 -04:00

167 lines
7.1 KiB
C++

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