Jolt Physics
A multi core friendly Game Physics Engine
Loading...
Searching...
No Matches
MotorcycleController.h
Go to the documentation of this file.
1// Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
2// SPDX-FileCopyrightText: 2023 Jorrit Rouwe
3// SPDX-License-Identifier: MIT
4
5#pragma once
6
8
10
14{
15public:
17
18 // See: VehicleControllerSettings
19 virtual VehicleController * ConstructController(VehicleConstraint &inConstraint) const override;
20 virtual void SaveBinaryState(StreamOut &inStream) const override;
21 virtual void RestoreBinaryState(StreamIn &inStream) override;
22
24 float mMaxLeanAngle = DegreesToRadians(45.0f);
25
27 float mLeanSpringConstant = 5000.0f;
28
30 float mLeanSpringDamping = 1000.0f;
31
33 float mLeanSpringIntegrationCoefficient = 0.0f;
34
36 float mLeanSpringIntegrationCoefficientDecay = 4.0f;
37
40 float mLeanSmoothingFactor = 0.8f;
41};
42
45{
46public:
48
51
53 float GetWheelBase() const;
54
56 void EnableLeanController(bool inEnable) { mEnableLeanController = inEnable; }
57
59 bool IsLeanControllerEnabled() const { return mEnableLeanController; }
60
62 void EnableLeanSteeringLimit(bool inEnable) { mEnableLeanSteeringLimit = inEnable; }
63 bool IsLeanSteeringLimitEnabled() const { return mEnableLeanSteeringLimit; }
64
66 void SetLeanSpringConstant(float inConstant) { mLeanSpringConstant = inConstant; }
67 float GetLeanSpringConstant() const { return mLeanSpringConstant; }
68
70 void SetLeanSpringDamping(float inDamping) { mLeanSpringDamping = inDamping; }
71 float GetLeanSpringDamping() const { return mLeanSpringDamping; }
72
74 void SetLeanSpringIntegrationCoefficient(float inCoefficient) { mLeanSpringIntegrationCoefficient = inCoefficient; }
75 float GetLeanSpringIntegrationCoefficient() const { return mLeanSpringIntegrationCoefficient; }
76
78 void SetLeanSpringIntegrationCoefficientDecay(float inDecay) { mLeanSpringIntegrationCoefficientDecay = inDecay; }
79 float GetLeanSpringIntegrationCoefficientDecay() const { return mLeanSpringIntegrationCoefficientDecay; }
80
83 void SetLeanSmoothingFactor(float inFactor) { mLeanSmoothingFactor = inFactor; }
84 float GetLeanSmoothingFactor() const { return mLeanSmoothingFactor; }
85
86protected:
87 // See: VehicleController
88 virtual void PreCollide(float inDeltaTime, PhysicsSystem &inPhysicsSystem) override;
89 virtual bool SolveLongitudinalAndLateralConstraints(float inDeltaTime) override;
90 virtual void SaveState(StateRecorder &inStream) const override;
91 virtual void RestoreState(StateRecorder &inStream) override;
92#ifdef JPH_DEBUG_RENDERER
93 virtual void Draw(DebugRenderer *inRenderer) const override;
94#endif // JPH_DEBUG_RENDERER
95
96 // Configuration properties
97 bool mEnableLeanController = true;
98 bool mEnableLeanSteeringLimit = true;
105
106 // Run-time calculated target lean vector
107 Vec3 mTargetLean = Vec3::sZero();
108
109 // Integrated error for the lean spring
110 float mLeanSpringIntegratedDeltaAngle = 0.0f;
111
112 // Run-time total angular impulse applied to turn the cycle towards the target lean angle
113 float mAppliedImpulse = 0.0f;
114};
115
#define JPH_EXPORT
Definition: Core.h:236
#define JPH_NAMESPACE_END
Definition: Core.h:378
#define JPH_NAMESPACE_BEGIN
Definition: Core.h:372
JPH_INLINE 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:31
#define JPH_DECLARE_SERIALIZABLE_VIRTUAL(linkage, class_name)
Definition: SerializableObject.h:109
Definition: DebugRenderer.h:47
Runtime controller class.
Definition: MotorcycleController.h:45
float mLeanSpringIntegrationCoefficient
Definition: MotorcycleController.h:102
void SetLeanSmoothingFactor(float inFactor)
Definition: MotorcycleController.h:83
bool IsLeanControllerEnabled() const
Check if the lean spring is enabled.
Definition: MotorcycleController.h:59
float GetLeanSpringIntegrationCoefficientDecay() const
Definition: MotorcycleController.h:79
float mMaxLeanAngle
Definition: MotorcycleController.h:99
float mLeanSpringConstant
Definition: MotorcycleController.h:100
void EnableLeanSteeringLimit(bool inEnable)
Enable or disable the lean steering limit. When enabled (default) the steering angle is limited based...
Definition: MotorcycleController.h:62
float mLeanSmoothingFactor
Definition: MotorcycleController.h:104
float mLeanSpringIntegrationCoefficientDecay
Definition: MotorcycleController.h:103
float GetLeanSpringConstant() const
Definition: MotorcycleController.h:67
float mLeanSpringDamping
Definition: MotorcycleController.h:101
float GetLeanSmoothingFactor() const
Definition: MotorcycleController.h:84
void SetLeanSpringConstant(float inConstant)
Spring constant for the lean spring.
Definition: MotorcycleController.h:66
void SetLeanSpringDamping(float inDamping)
Spring damping constant for the lean spring.
Definition: MotorcycleController.h:70
bool IsLeanSteeringLimitEnabled() const
Definition: MotorcycleController.h:63
void EnableLeanController(bool inEnable)
Enable or disable the lean spring. This allows you to temporarily disable the lean spring to allow th...
Definition: MotorcycleController.h:56
float GetLeanSpringIntegrationCoefficient() const
Definition: MotorcycleController.h:75
void SetLeanSpringIntegrationCoefficientDecay(float inDecay)
How much to decay the angle integral when the wheels are not touching the floor: new_value = e^(-deca...
Definition: MotorcycleController.h:78
float GetLeanSpringDamping() const
Definition: MotorcycleController.h:71
void SetLeanSpringIntegrationCoefficient(float inCoefficient)
The lean spring applies an additional force equal to this coefficient * Integral(delta angle,...
Definition: MotorcycleController.h:74
Definition: MotorcycleController.h:14
Definition: PhysicsSystem.h:29
Definition: StateRecorder.h:48
Simple binary input stream.
Definition: StreamIn.h:13
Simple binary output stream.
Definition: StreamOut.h:13
Definition: Vec3.h:17
static JPH_INLINE Vec3 sZero()
Vector with all zeros.
Definition: Vec3.inl:107
Definition: VehicleConstraint.h:66
Runtime data for interface that controls acceleration / deceleration of the vehicle.
Definition: VehicleController.h:41
Runtime controller class.
Definition: WheeledVehicleController.h:90
Definition: WheeledVehicleController.h:73
virtual void RestoreBinaryState(StreamIn &inStream) override
Restore the contents of the controller settings in binary form from inStream.
Definition: WheeledVehicleController.cpp:157
virtual VehicleController * ConstructController(VehicleConstraint &inConstraint) const override
Create an instance of the vehicle controller class.
Definition: WheeledVehicleController.cpp:138
virtual void SaveBinaryState(StreamOut &inStream) const override
Saves the contents of the controller settings in binary form to inStream.
Definition: WheeledVehicleController.cpp:143