diff options
| author | Jørgen P. Tjernø <[email protected]> | 2013-12-02 19:31:46 -0800 |
|---|---|---|
| committer | Jørgen P. Tjernø <[email protected]> | 2013-12-02 19:46:31 -0800 |
| commit | f56bb35301836e56582a575a75864392a0177875 (patch) | |
| tree | de61ddd39de3e7df52759711950b4c288592f0dc /mp/src/public/vphysics/vehicles.h | |
| parent | Mark some more files as text. (diff) | |
| download | source-sdk-2013-f56bb35301836e56582a575a75864392a0177875.tar.xz source-sdk-2013-f56bb35301836e56582a575a75864392a0177875.zip | |
Fix line endings. WHAMMY.
Diffstat (limited to 'mp/src/public/vphysics/vehicles.h')
| -rw-r--r-- | mp/src/public/vphysics/vehicles.h | 500 |
1 files changed, 250 insertions, 250 deletions
diff --git a/mp/src/public/vphysics/vehicles.h b/mp/src/public/vphysics/vehicles.h index cac3d90a..0125aa93 100644 --- a/mp/src/public/vphysics/vehicles.h +++ b/mp/src/public/vphysics/vehicles.h @@ -1,250 +1,250 @@ -//========= Copyright Valve Corporation, All rights reserved. ============//
-//
-// Purpose:
-//
-// $NoKeywords: $
-//=============================================================================//
-
-#ifndef VEHICLES_H
-#define VEHICLES_H
-#ifdef _WIN32
-#pragma once
-#endif
-
-#include "datamap.h"
-
-
-#define VEHICLE_TYPE_CAR_WHEELS (1<<0)
-#define VEHICLE_TYPE_CAR_RAYCAST (1<<1)
-#define VEHICLE_TYPE_JETSKI_RAYCAST (1<<2)
-#define VEHICLE_TYPE_AIRBOAT_RAYCAST (1<<3)
-
-#define VEHICLE_MAX_AXLE_COUNT 4
-#define VEHICLE_MAX_GEAR_COUNT 6
-#define VEHICLE_MAX_WHEEL_COUNT (2*VEHICLE_MAX_AXLE_COUNT)
-
-#define VEHICLE_TIRE_NORMAL 0
-#define VEHICLE_TIRE_BRAKING 1
-#define VEHICLE_TIRE_POWERSLIDE 2
-
-struct vehicle_controlparams_t
-{
- float throttle;
- float steering;
- float brake;
- float boost;
- bool handbrake;
- bool handbrakeLeft;
- bool handbrakeRight;
- bool brakepedal;
- bool bHasBrakePedal;
- bool bAnalogSteering;
-};
-
-struct vehicle_operatingparams_t
-{
- DECLARE_SIMPLE_DATADESC();
-
- float speed;
- float engineRPM;
- int gear;
- float boostDelay;
- int boostTimeLeft;
- float skidSpeed;
- int skidMaterial;
- float steeringAngle;
- int wheelsNotInContact;
- int wheelsInContact;
- bool isTorqueBoosting;
-};
-
-// Debug!
-#define VEHICLE_DEBUGRENDERDATA_MAX_WHEELS 10
-#define VEHICLE_DEBUGRENDERDATA_MAX_AXLES 3
-
-struct vehicle_debugcarsystem_t
-{
- Vector vecAxlePos[VEHICLE_DEBUGRENDERDATA_MAX_AXLES];
-
- Vector vecWheelPos[VEHICLE_DEBUGRENDERDATA_MAX_WHEELS];
- Vector vecWheelRaycasts[VEHICLE_DEBUGRENDERDATA_MAX_WHEELS][2];
- Vector vecWheelRaycastImpacts[VEHICLE_DEBUGRENDERDATA_MAX_WHEELS];
-};
-
-struct vehicleparams_t;
-
-class IPhysicsVehicleController
-{
-public:
- virtual ~IPhysicsVehicleController() {}
- // call this from the game code with the control parameters
- virtual void Update( float dt, vehicle_controlparams_t &controls ) = 0;
- virtual const vehicle_operatingparams_t &GetOperatingParams() = 0;
- virtual const vehicleparams_t &GetVehicleParams() = 0;
- virtual vehicleparams_t &GetVehicleParamsForChange() = 0;
- virtual float UpdateBooster(float dt) = 0;
- virtual int GetWheelCount(void) = 0;
- virtual IPhysicsObject *GetWheel(int index) = 0;
- virtual bool GetWheelContactPoint( int index, Vector *pContactPoint, int *pSurfaceProps ) = 0;
- virtual void SetSpringLength(int wheelIndex, float length) = 0;
- virtual void SetWheelFriction(int wheelIndex, float friction) = 0;
-
- virtual void OnVehicleEnter( void ) = 0;
- virtual void OnVehicleExit( void ) = 0;
-
- virtual void SetEngineDisabled( bool bDisable ) = 0;
- virtual bool IsEngineDisabled( void ) = 0;
-
- // Debug
- virtual void GetCarSystemDebugData( vehicle_debugcarsystem_t &debugCarSystem ) = 0;
- virtual void VehicleDataReload() = 0;
-};
-
-
-// parameters for the body object control of the vehicle
-struct vehicle_bodyparams_t
-{
- DECLARE_SIMPLE_DATADESC();
-
- Vector massCenterOverride; // leave at vec3_origin for no override
- float massOverride; // leave at 0 for no override
- float addGravity; // keeps car down
- float tiltForce; // keeps car down when not on flat ground
- float tiltForceHeight; // where the tilt force pulls relative to center of mass
- float counterTorqueFactor;
- float keepUprightTorque;
- float maxAngularVelocity; // clamp the car angular velocity separately from other objects to keep stable
-};
-
-// wheel objects are created by vphysics, these are the parameters for those objects
-// NOTE: They are paired, so only one set of parameters is necessary per axle
-struct vehicle_wheelparams_t
-{
- DECLARE_SIMPLE_DATADESC();
-
- float radius;
- float mass;
- float inertia;
- float damping; // usually 0
- float rotdamping; // usually 0
- float frictionScale; // 1.5 front, 1.8 rear
- int materialIndex;
- int brakeMaterialIndex;
- int skidMaterialIndex;
- float springAdditionalLength; // 0 means the spring is at it's rest length
-};
-
-struct vehicle_suspensionparams_t
-{
- DECLARE_SIMPLE_DATADESC();
-
- float springConstant;
- float springDamping;
- float stabilizerConstant;
- float springDampingCompression;
- float maxBodyForce;
-};
-
-// NOTE: both raytrace and wheel data here because jetski uses both.
-struct vehicle_axleparams_t
-{
- DECLARE_SIMPLE_DATADESC();
-
- Vector offset; // center of this axle in vehicle object space
- Vector wheelOffset; // offset to wheel (assume other wheel is symmetric at -wheelOffset) from axle center
- Vector raytraceCenterOffset; // offset to center of axle for the raytrace data.
- Vector raytraceOffset; // offset to raytrace for non-wheel (some wheeled) vehicles
- vehicle_wheelparams_t wheels;
- vehicle_suspensionparams_t suspension;
- float torqueFactor; // normalized to 1 across all axles
- // e.g. 0,1 for rear wheel drive - 0.5,0.5 for 4 wheel drive
- float brakeFactor; // normalized to 1 across all axles
-};
-
-struct vehicle_steeringparams_t
-{
- DECLARE_SIMPLE_DATADESC();
-
- float degreesSlow; // angle in degrees of steering at slow speed
- float degreesFast; // angle in degrees of steering at fast speed
- float degreesBoost; // angle in degrees of steering at fast speed
- float steeringRateSlow; // this is the speed the wheels are steered when the vehicle is slow
- float steeringRateFast; // this is the speed the wheels are steered when the vehicle is "fast"
- float steeringRestRateSlow; // this is the speed at which the wheels move toward their resting state (straight ahead) at slow speed
- float steeringRestRateFast; // this is the speed at which the wheels move toward their resting state (straight ahead) at fast speed
- float speedSlow; // this is the max speed of "slow"
- float speedFast; // this is the min speed of "fast"
- float turnThrottleReduceSlow; // this is the amount of throttle reduction to apply at the maximum steering angle
- float turnThrottleReduceFast; // this is the amount of throttle reduction to apply at the maximum steering angle
- float brakeSteeringRateFactor; // this scales the steering rate when the brake/handbrake is down
- float throttleSteeringRestRateFactor; // this scales the steering rest rate when the throttle is down
- float powerSlideAccel; // scale of speed to acceleration
- float boostSteeringRestRateFactor; // this scales the steering rest rate when boosting
- float boostSteeringRateFactor; // this scales the steering rest rate when boosting
- float steeringExponent; // this makes the steering response non-linear. The steering function is linear, then raised to this power
-
- bool isSkidAllowed; // true/false skid flag
- bool dustCloud; // flag for creating a dustcloud behind vehicle
-};
-
-struct vehicle_engineparams_t
-{
- DECLARE_SIMPLE_DATADESC();
-
- float horsepower;
- float maxSpeed;
- float maxRevSpeed;
- float maxRPM; // redline RPM limit
- float axleRatio; // ratio of engine rev to axle rev
- float throttleTime; // time to reach full throttle in seconds
-
- // transmission
- int gearCount; // gear count - max 10
- float gearRatio[VEHICLE_MAX_GEAR_COUNT]; // ratio for each gear
-
- // automatic transmission (simple auto-shifter - switches at fixed RPM limits)
- float shiftUpRPM; // max RPMs to switch to a higher gear
- float shiftDownRPM; // min RPMs to switch to a lower gear
- float boostForce;
- float boostDuration;
- float boostDelay;
- float boostMaxSpeed;
- float autobrakeSpeedGain;
- float autobrakeSpeedFactor;
- bool torqueBoost;
- bool isAutoTransmission; // true for auto, false for manual
-};
-
-struct vehicleparams_t
-{
- DECLARE_SIMPLE_DATADESC();
-
- int axleCount;
- int wheelsPerAxle;
- vehicle_bodyparams_t body;
- vehicle_axleparams_t axles[VEHICLE_MAX_AXLE_COUNT];
- vehicle_engineparams_t engine;
- vehicle_steeringparams_t steering;
-};
-
-// Iterator for queries
-class CPassengerSeatTransition;
-typedef CUtlVector< CPassengerSeatTransition> PassengerSeatAnims_t;
-
-// Seat query types
-enum VehicleSeatQuery_e
-{
- VEHICLE_SEAT_ANY, // Any available seat for our role
- VEHICLE_SEAT_NEAREST, // Seat closest to our starting point
-};
-
-// Seat anim types for return
-enum PassengerSeatAnimType_t
-{
- PASSENGER_SEAT_ENTRY,
- PASSENGER_SEAT_EXIT
-};
-
-#define VEHICLE_SEAT_INVALID -1 // An invalid seat
-
-#endif // VEHICLES_H
+//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// + +#ifndef VEHICLES_H +#define VEHICLES_H +#ifdef _WIN32 +#pragma once +#endif + +#include "datamap.h" + + +#define VEHICLE_TYPE_CAR_WHEELS (1<<0) +#define VEHICLE_TYPE_CAR_RAYCAST (1<<1) +#define VEHICLE_TYPE_JETSKI_RAYCAST (1<<2) +#define VEHICLE_TYPE_AIRBOAT_RAYCAST (1<<3) + +#define VEHICLE_MAX_AXLE_COUNT 4 +#define VEHICLE_MAX_GEAR_COUNT 6 +#define VEHICLE_MAX_WHEEL_COUNT (2*VEHICLE_MAX_AXLE_COUNT) + +#define VEHICLE_TIRE_NORMAL 0 +#define VEHICLE_TIRE_BRAKING 1 +#define VEHICLE_TIRE_POWERSLIDE 2 + +struct vehicle_controlparams_t +{ + float throttle; + float steering; + float brake; + float boost; + bool handbrake; + bool handbrakeLeft; + bool handbrakeRight; + bool brakepedal; + bool bHasBrakePedal; + bool bAnalogSteering; +}; + +struct vehicle_operatingparams_t +{ + DECLARE_SIMPLE_DATADESC(); + + float speed; + float engineRPM; + int gear; + float boostDelay; + int boostTimeLeft; + float skidSpeed; + int skidMaterial; + float steeringAngle; + int wheelsNotInContact; + int wheelsInContact; + bool isTorqueBoosting; +}; + +// Debug! +#define VEHICLE_DEBUGRENDERDATA_MAX_WHEELS 10 +#define VEHICLE_DEBUGRENDERDATA_MAX_AXLES 3 + +struct vehicle_debugcarsystem_t +{ + Vector vecAxlePos[VEHICLE_DEBUGRENDERDATA_MAX_AXLES]; + + Vector vecWheelPos[VEHICLE_DEBUGRENDERDATA_MAX_WHEELS]; + Vector vecWheelRaycasts[VEHICLE_DEBUGRENDERDATA_MAX_WHEELS][2]; + Vector vecWheelRaycastImpacts[VEHICLE_DEBUGRENDERDATA_MAX_WHEELS]; +}; + +struct vehicleparams_t; + +class IPhysicsVehicleController +{ +public: + virtual ~IPhysicsVehicleController() {} + // call this from the game code with the control parameters + virtual void Update( float dt, vehicle_controlparams_t &controls ) = 0; + virtual const vehicle_operatingparams_t &GetOperatingParams() = 0; + virtual const vehicleparams_t &GetVehicleParams() = 0; + virtual vehicleparams_t &GetVehicleParamsForChange() = 0; + virtual float UpdateBooster(float dt) = 0; + virtual int GetWheelCount(void) = 0; + virtual IPhysicsObject *GetWheel(int index) = 0; + virtual bool GetWheelContactPoint( int index, Vector *pContactPoint, int *pSurfaceProps ) = 0; + virtual void SetSpringLength(int wheelIndex, float length) = 0; + virtual void SetWheelFriction(int wheelIndex, float friction) = 0; + + virtual void OnVehicleEnter( void ) = 0; + virtual void OnVehicleExit( void ) = 0; + + virtual void SetEngineDisabled( bool bDisable ) = 0; + virtual bool IsEngineDisabled( void ) = 0; + + // Debug + virtual void GetCarSystemDebugData( vehicle_debugcarsystem_t &debugCarSystem ) = 0; + virtual void VehicleDataReload() = 0; +}; + + +// parameters for the body object control of the vehicle +struct vehicle_bodyparams_t +{ + DECLARE_SIMPLE_DATADESC(); + + Vector massCenterOverride; // leave at vec3_origin for no override + float massOverride; // leave at 0 for no override + float addGravity; // keeps car down + float tiltForce; // keeps car down when not on flat ground + float tiltForceHeight; // where the tilt force pulls relative to center of mass + float counterTorqueFactor; + float keepUprightTorque; + float maxAngularVelocity; // clamp the car angular velocity separately from other objects to keep stable +}; + +// wheel objects are created by vphysics, these are the parameters for those objects +// NOTE: They are paired, so only one set of parameters is necessary per axle +struct vehicle_wheelparams_t +{ + DECLARE_SIMPLE_DATADESC(); + + float radius; + float mass; + float inertia; + float damping; // usually 0 + float rotdamping; // usually 0 + float frictionScale; // 1.5 front, 1.8 rear + int materialIndex; + int brakeMaterialIndex; + int skidMaterialIndex; + float springAdditionalLength; // 0 means the spring is at it's rest length +}; + +struct vehicle_suspensionparams_t +{ + DECLARE_SIMPLE_DATADESC(); + + float springConstant; + float springDamping; + float stabilizerConstant; + float springDampingCompression; + float maxBodyForce; +}; + +// NOTE: both raytrace and wheel data here because jetski uses both. +struct vehicle_axleparams_t +{ + DECLARE_SIMPLE_DATADESC(); + + Vector offset; // center of this axle in vehicle object space + Vector wheelOffset; // offset to wheel (assume other wheel is symmetric at -wheelOffset) from axle center + Vector raytraceCenterOffset; // offset to center of axle for the raytrace data. + Vector raytraceOffset; // offset to raytrace for non-wheel (some wheeled) vehicles + vehicle_wheelparams_t wheels; + vehicle_suspensionparams_t suspension; + float torqueFactor; // normalized to 1 across all axles + // e.g. 0,1 for rear wheel drive - 0.5,0.5 for 4 wheel drive + float brakeFactor; // normalized to 1 across all axles +}; + +struct vehicle_steeringparams_t +{ + DECLARE_SIMPLE_DATADESC(); + + float degreesSlow; // angle in degrees of steering at slow speed + float degreesFast; // angle in degrees of steering at fast speed + float degreesBoost; // angle in degrees of steering at fast speed + float steeringRateSlow; // this is the speed the wheels are steered when the vehicle is slow + float steeringRateFast; // this is the speed the wheels are steered when the vehicle is "fast" + float steeringRestRateSlow; // this is the speed at which the wheels move toward their resting state (straight ahead) at slow speed + float steeringRestRateFast; // this is the speed at which the wheels move toward their resting state (straight ahead) at fast speed + float speedSlow; // this is the max speed of "slow" + float speedFast; // this is the min speed of "fast" + float turnThrottleReduceSlow; // this is the amount of throttle reduction to apply at the maximum steering angle + float turnThrottleReduceFast; // this is the amount of throttle reduction to apply at the maximum steering angle + float brakeSteeringRateFactor; // this scales the steering rate when the brake/handbrake is down + float throttleSteeringRestRateFactor; // this scales the steering rest rate when the throttle is down + float powerSlideAccel; // scale of speed to acceleration + float boostSteeringRestRateFactor; // this scales the steering rest rate when boosting + float boostSteeringRateFactor; // this scales the steering rest rate when boosting + float steeringExponent; // this makes the steering response non-linear. The steering function is linear, then raised to this power + + bool isSkidAllowed; // true/false skid flag + bool dustCloud; // flag for creating a dustcloud behind vehicle +}; + +struct vehicle_engineparams_t +{ + DECLARE_SIMPLE_DATADESC(); + + float horsepower; + float maxSpeed; + float maxRevSpeed; + float maxRPM; // redline RPM limit + float axleRatio; // ratio of engine rev to axle rev + float throttleTime; // time to reach full throttle in seconds + + // transmission + int gearCount; // gear count - max 10 + float gearRatio[VEHICLE_MAX_GEAR_COUNT]; // ratio for each gear + + // automatic transmission (simple auto-shifter - switches at fixed RPM limits) + float shiftUpRPM; // max RPMs to switch to a higher gear + float shiftDownRPM; // min RPMs to switch to a lower gear + float boostForce; + float boostDuration; + float boostDelay; + float boostMaxSpeed; + float autobrakeSpeedGain; + float autobrakeSpeedFactor; + bool torqueBoost; + bool isAutoTransmission; // true for auto, false for manual +}; + +struct vehicleparams_t +{ + DECLARE_SIMPLE_DATADESC(); + + int axleCount; + int wheelsPerAxle; + vehicle_bodyparams_t body; + vehicle_axleparams_t axles[VEHICLE_MAX_AXLE_COUNT]; + vehicle_engineparams_t engine; + vehicle_steeringparams_t steering; +}; + +// Iterator for queries +class CPassengerSeatTransition; +typedef CUtlVector< CPassengerSeatTransition> PassengerSeatAnims_t; + +// Seat query types +enum VehicleSeatQuery_e +{ + VEHICLE_SEAT_ANY, // Any available seat for our role + VEHICLE_SEAT_NEAREST, // Seat closest to our starting point +}; + +// Seat anim types for return +enum PassengerSeatAnimType_t +{ + PASSENGER_SEAT_ENTRY, + PASSENGER_SEAT_EXIT +}; + +#define VEHICLE_SEAT_INVALID -1 // An invalid seat + +#endif // VEHICLES_H |