Jolt Physics
A multi core friendly Game Physics Engine
Loading...
Searching...
No Matches
WheeledVehicleController.h
Go to the documentation of this file.
1// Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
2// SPDX-FileCopyrightText: 2021 Jorrit Rouwe
3// SPDX-License-Identifier: MIT
4
5#pragma once
6
13
15
16class PhysicsSystem;
17
20{
21public:
23
24
26
27 // See: WheelSettings
28 virtual void SaveBinaryState(StreamOut &inStream) const override;
29 virtual void RestoreBinaryState(StreamIn &inStream) override;
30
31 float mInertia = 0.9f;
32 float mAngularDamping = 0.2f;
33 float mMaxSteerAngle = DegreesToRadians(70.0f);
36 float mMaxBrakeTorque = 1500.0f;
37 float mMaxHandBrakeTorque = 4000.0f;
38};
39
41class JPH_EXPORT WheelWV : public Wheel
42{
43public:
45
47 explicit WheelWV(const WheelSettingsWV &inWheel);
48
50 const WheelSettingsWV * GetSettings() const { return static_cast<const WheelSettingsWV *>(mSettings.GetPtr()); }
51
53 void ApplyTorque(float inTorque, float inDeltaTime)
54 {
55 mAngularVelocity += inTorque * inDeltaTime / GetSettings()->mInertia;
56 }
57
59 void Update(float inDeltaTime, const VehicleConstraint &inConstraint);
60
61 float mLongitudinalSlip = 0.0f;
62 float mLateralSlip = 0.0f;
63 float mCombinedLongitudinalFriction = 0.0f;
64 float mCombinedLateralFriction = 0.0f;
65 float mBrakeImpulse = 0.0f;
66};
67
73{
74public:
76
77 // See: VehicleControllerSettings
78 virtual VehicleController * ConstructController(VehicleConstraint &inConstraint) const override;
79 virtual void SaveBinaryState(StreamOut &inStream) const override;
80 virtual void RestoreBinaryState(StreamIn &inStream) override;
81
85 float mDifferentialLimitedSlipRatio = 1.4f;
86};
87
90{
91public:
93
96
99
105 void SetDriverInput(float inForward, float inRight, float inBrake, float inHandBrake) { mForwardInput = inForward; mRightInput = inRight; mBrakeInput = inBrake; mHandBrakeInput = inHandBrake; }
106
108 void SetForwardInput(float inForward) { mForwardInput = inForward; }
109 float GetForwardInput() const { return mForwardInput; }
110
112 void SetRightInput(float inRight) { mRightInput = inRight; }
113 float GetRightInput() const { return mRightInput; }
114
116 void SetBrakeInput(float inBrake) { mBrakeInput = inBrake; }
117 float GetBrakeInput() const { return mBrakeInput; }
118
120 void SetHandBrakeInput(float inHandBrake) { mHandBrakeInput = inHandBrake; }
121 float GetHandBrakeInput() const { return mHandBrakeInput; }
122
124 const VehicleEngine & GetEngine() const { return mEngine; }
125
127 VehicleEngine & GetEngine() { return mEngine; }
128
130 const VehicleTransmission & GetTransmission() const { return mTransmission; }
131
133 VehicleTransmission & GetTransmission() { return mTransmission; }
134
136 const Differentials & GetDifferentials() const { return mDifferentials; }
137
139 Differentials & GetDifferentials() { return mDifferentials; }
140
142 float GetDifferentialLimitedSlipRatio() const { return mDifferentialLimitedSlipRatio; }
143 void SetDifferentialLimitedSlipRatio(float inV) { mDifferentialLimitedSlipRatio = inV; }
144
146 float GetWheelSpeedAtClutch() const;
147
148#ifdef JPH_DEBUG_RENDERER
150 void SetRPMMeter(Vec3Arg inPosition, float inSize) { mRPMMeterPosition = inPosition; mRPMMeterSize = inSize; }
151#endif // JPH_DEBUG_RENDERER
152
153protected:
154 // See: VehicleController
155 virtual Wheel * ConstructWheel(const WheelSettings &inWheel) const override { JPH_ASSERT(IsKindOf(&inWheel, JPH_RTTI(WheelSettingsWV))); return new WheelWV(static_cast<const WheelSettingsWV &>(inWheel)); }
156 virtual bool AllowSleep() const override;
157 virtual void PreCollide(float inDeltaTime, PhysicsSystem &inPhysicsSystem) override;
158 virtual void PostCollide(float inDeltaTime, PhysicsSystem &inPhysicsSystem) override;
159 virtual bool SolveLongitudinalAndLateralConstraints(float inDeltaTime) override;
160 virtual void SaveState(StateRecorder &inStream) const override;
161 virtual void RestoreState(StateRecorder &inStream) override;
162#ifdef JPH_DEBUG_RENDERER
163 virtual void Draw(DebugRenderer *inRenderer) const override;
164#endif // JPH_DEBUG_RENDERER
165
166 // Control information
167 float mForwardInput = 0.0f;
168 float mRightInput = 0.0f;
169 float mBrakeInput = 0.0f;
170 float mHandBrakeInput = 0.0f;
171
172 // Simluation information
177 float mPreviousDeltaTime = 0.0f;
178
179#ifdef JPH_DEBUG_RENDERER
180 // Debug settings
181 Vec3 mRPMMeterPosition { 0, 1, 0 };
182 float mRPMMeterSize = 0.5f;
183#endif // JPH_DEBUG_RENDERER
184};
185
#define JPH_EXPORT
Definition: Core.h:214
#define JPH_NAMESPACE_END
Definition: Core.h:354
#define JPH_NAMESPACE_BEGIN
Definition: Core.h:348
#define JPH_ASSERT(...)
Definition: IssueReporting.h:33
constexpr float DegreesToRadians(float inV)
Convert a value from degrees to radians.
Definition: Math.h:13
#define JPH_OVERRIDE_NEW_DELETE
Macro to override the new and delete functions.
Definition: Memory.h:29
bool IsKindOf(const Type *inObject, const RTTI *inRTTI)
Check if inObject is or is derived from DstType.
Definition: RTTI.h:365
#define JPH_RTTI(class_name)
Definition: RTTI.h:315
std::vector< T, STLAllocator< T > > Array
Definition: STLAllocator.h:81
#define JPH_DECLARE_SERIALIZABLE_VIRTUAL(linkage, class_name)
Definition: SerializableObject.h:100
Simple triangle renderer for debugging purposes.
Definition: DebugRenderer.h:30
Definition: LinearCurve.h:17
Definition: PhysicsSystem.h:28
Definition: StateRecorder.h:48
Simple binary input stream.
Definition: StreamIn.h:13
Simple binary output stream.
Definition: StreamOut.h:13
Definition: Vec3.h:16
Definition: VehicleConstraint.h:66
Runtime data for interface that controls acceleration / decelleration of the vehicle.
Definition: VehicleController.h:41
Basic settings object for interface that controls acceleration / decelleration of the vehicle.
Definition: VehicleController.h:25
Runtime data for engine.
Definition: VehicleEngine.h:44
Generic properties for a vehicle engine.
Definition: VehicleEngine.h:21
Runtime data for transmission.
Definition: VehicleTransmission.h:46
Configuration for the transmission of a vehicle (gear box)
Definition: VehicleTransmission.h:23
Base class for runtime data for a wheel, each VehicleController can implement a derived class of this...
Definition: Wheel.h:46
Base class for wheel settings, each VehicleController can implement a derived class of this.
Definition: Wheel.h:19
virtual void SaveBinaryState(StreamOut &inStream) const
Saves the contents in binary form to inStream.
Definition: Wheel.cpp:32
virtual void RestoreBinaryState(StreamIn &inStream)
Restores the contents in binary form to inStream.
Definition: Wheel.cpp:49
WheelSettings object specifically for WheeledVehicleController.
Definition: WheeledVehicleController.h:20
LinearCurve mLateralFriction
Friction in sideway direction of tire as a function of the slip angle (degrees): angle between relati...
Definition: WheeledVehicleController.h:35
LinearCurve mLongitudinalFriction
Friction in forward direction of tire as a function of the slip ratio (fraction): (omega_wheel * r_wh...
Definition: WheeledVehicleController.h:34
Wheel object specifically for WheeledVehicleController.
Definition: WheeledVehicleController.h:42
const WheelSettingsWV * GetSettings() const
Override GetSettings and cast to the correct class.
Definition: WheeledVehicleController.h:50
void ApplyTorque(float inTorque, float inDeltaTime)
Apply a torque (N m) to the wheel for a particular delta time.
Definition: WheeledVehicleController.h:53
Runtime controller class.
Definition: WheeledVehicleController.h:90
void SetDifferentialLimitedSlipRatio(float inV)
Definition: WheeledVehicleController.h:143
void SetForwardInput(float inForward)
Value between -1 and 1 for auto transmission and value between 0 and 1 indicating desired driving dir...
Definition: WheeledVehicleController.h:108
VehicleTransmission mTransmission
Transmission state of the vehicle.
Definition: WheeledVehicleController.h:174
void SetBrakeInput(float inBrake)
Value between 0 and 1 indicating how strong the brake pedal is pressed.
Definition: WheeledVehicleController.h:116
const VehicleTransmission & GetTransmission() const
Get current transmission state.
Definition: WheeledVehicleController.h:130
void SetDriverInput(float inForward, float inRight, float inBrake, float inHandBrake)
Definition: WheeledVehicleController.h:105
Differentials mDifferentials
Differential states of the vehicle.
Definition: WheeledVehicleController.h:175
float GetRightInput() const
Definition: WheeledVehicleController.h:113
const VehicleEngine & GetEngine() const
Get current engine state.
Definition: WheeledVehicleController.h:124
VehicleEngine mEngine
Engine state of the vehicle.
Definition: WheeledVehicleController.h:173
float GetDifferentialLimitedSlipRatio() const
Ratio max / min average wheel speed of each differential (measured at the clutch).
Definition: WheeledVehicleController.h:142
void SetRPMMeter(Vec3Arg inPosition, float inSize)
Debug drawing of RPM meter.
Definition: WheeledVehicleController.h:150
const Differentials & GetDifferentials() const
Get the differentials this vehicle has.
Definition: WheeledVehicleController.h:136
float GetForwardInput() const
Definition: WheeledVehicleController.h:109
float GetHandBrakeInput() const
Definition: WheeledVehicleController.h:121
void SetHandBrakeInput(float inHandBrake)
Value between 0 and 1 indicating how strong the hand brake is pulled.
Definition: WheeledVehicleController.h:120
virtual Wheel * ConstructWheel(const WheelSettings &inWheel) const override
Definition: WheeledVehicleController.h:155
VehicleTransmission & GetTransmission()
Get current transmission state (writable interface, allows you to make changes to the configuration w...
Definition: WheeledVehicleController.h:133
float GetBrakeInput() const
Definition: WheeledVehicleController.h:117
float mDifferentialLimitedSlipRatio
Ratio max / min average wheel speed of each differential (measured at the clutch).
Definition: WheeledVehicleController.h:176
Differentials & GetDifferentials()
Get the differentials this vehicle has (writable interface, allows you to make changes to the configu...
Definition: WheeledVehicleController.h:139
Array< VehicleDifferentialSettings > Differentials
Typedefs.
Definition: WheeledVehicleController.h:98
VehicleEngine & GetEngine()
Get current engine state (writable interface, allows you to make changes to the configuration which w...
Definition: WheeledVehicleController.h:127
void SetRightInput(float inRight)
Value between -1 and 1 indicating desired steering angle (1 = right)
Definition: WheeledVehicleController.h:112
Definition: WheeledVehicleController.h:73
Array< VehicleDifferentialSettings > mDifferentials
List of differentials and their properties.
Definition: WheeledVehicleController.h:84
VehicleTransmissionSettings mTransmission
The properties of the transmission (aka gear box)
Definition: WheeledVehicleController.h:83
VehicleEngineSettings mEngine
The properties of the engine.
Definition: WheeledVehicleController.h:82