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