Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
godotengine
GitHub Repository: godotengine/godot
Path: blob/master/thirdparty/jolt_physics/Jolt/Physics/Vehicle/Wheel.cpp
9913 views
1
// Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
2
// SPDX-FileCopyrightText: 2021 Jorrit Rouwe
3
// SPDX-License-Identifier: MIT
4
5
#include <Jolt/Jolt.h>
6
7
#include <Jolt/Physics/Vehicle/Wheel.h>
8
#include <Jolt/Physics/Vehicle/VehicleConstraint.h>
9
#include <Jolt/ObjectStream/TypeDeclarations.h>
10
11
JPH_NAMESPACE_BEGIN
12
13
JPH_IMPLEMENT_SERIALIZABLE_VIRTUAL(WheelSettings)
14
{
15
JPH_ADD_ATTRIBUTE(WheelSettings, mSuspensionForcePoint)
16
JPH_ADD_ATTRIBUTE(WheelSettings, mPosition)
17
JPH_ADD_ATTRIBUTE(WheelSettings, mSuspensionDirection)
18
JPH_ADD_ATTRIBUTE(WheelSettings, mSteeringAxis)
19
JPH_ADD_ATTRIBUTE(WheelSettings, mWheelForward)
20
JPH_ADD_ATTRIBUTE(WheelSettings, mWheelUp)
21
JPH_ADD_ATTRIBUTE(WheelSettings, mSuspensionMinLength)
22
JPH_ADD_ATTRIBUTE(WheelSettings, mSuspensionMaxLength)
23
JPH_ADD_ATTRIBUTE(WheelSettings, mSuspensionPreloadLength)
24
JPH_ADD_ENUM_ATTRIBUTE_WITH_ALIAS(WheelSettings, mSuspensionSpring.mMode, "mSuspensionSpringMode")
25
JPH_ADD_ATTRIBUTE_WITH_ALIAS(WheelSettings, mSuspensionSpring.mFrequency, "mSuspensionFrequency") // Renaming attributes to stay compatible with old versions of the library
26
JPH_ADD_ATTRIBUTE_WITH_ALIAS(WheelSettings, mSuspensionSpring.mDamping, "mSuspensionDamping")
27
JPH_ADD_ATTRIBUTE(WheelSettings, mRadius)
28
JPH_ADD_ATTRIBUTE(WheelSettings, mWidth)
29
JPH_ADD_ATTRIBUTE(WheelSettings, mEnableSuspensionForcePoint)
30
}
31
32
void WheelSettings::SaveBinaryState(StreamOut &inStream) const
33
{
34
inStream.Write(mSuspensionForcePoint);
35
inStream.Write(mPosition);
36
inStream.Write(mSuspensionDirection);
37
inStream.Write(mSteeringAxis);
38
inStream.Write(mWheelForward);
39
inStream.Write(mWheelUp);
40
inStream.Write(mSuspensionMinLength);
41
inStream.Write(mSuspensionMaxLength);
42
inStream.Write(mSuspensionPreloadLength);
43
mSuspensionSpring.SaveBinaryState(inStream);
44
inStream.Write(mRadius);
45
inStream.Write(mWidth);
46
inStream.Write(mEnableSuspensionForcePoint);
47
}
48
49
void WheelSettings::RestoreBinaryState(StreamIn &inStream)
50
{
51
inStream.Read(mSuspensionForcePoint);
52
inStream.Read(mPosition);
53
inStream.Read(mSuspensionDirection);
54
inStream.Read(mSteeringAxis);
55
inStream.Read(mWheelForward);
56
inStream.Read(mWheelUp);
57
inStream.Read(mSuspensionMinLength);
58
inStream.Read(mSuspensionMaxLength);
59
inStream.Read(mSuspensionPreloadLength);
60
mSuspensionSpring.RestoreBinaryState(inStream);
61
inStream.Read(mRadius);
62
inStream.Read(mWidth);
63
inStream.Read(mEnableSuspensionForcePoint);
64
}
65
66
Wheel::Wheel(const WheelSettings &inSettings) :
67
mSettings(&inSettings),
68
mSuspensionLength(inSettings.mSuspensionMaxLength)
69
{
70
JPH_ASSERT(inSettings.mSuspensionDirection.IsNormalized());
71
JPH_ASSERT(inSettings.mSteeringAxis.IsNormalized());
72
JPH_ASSERT(inSettings.mWheelForward.IsNormalized());
73
JPH_ASSERT(inSettings.mWheelUp.IsNormalized());
74
JPH_ASSERT(inSettings.mSuspensionMinLength >= 0.0f);
75
JPH_ASSERT(inSettings.mSuspensionMaxLength >= inSettings.mSuspensionMinLength);
76
JPH_ASSERT(inSettings.mSuspensionPreloadLength >= 0.0f);
77
JPH_ASSERT(inSettings.mSuspensionSpring.mFrequency > 0.0f);
78
JPH_ASSERT(inSettings.mSuspensionSpring.mDamping >= 0.0f);
79
JPH_ASSERT(inSettings.mRadius > 0.0f);
80
JPH_ASSERT(inSettings.mWidth >= 0.0f);
81
}
82
83
bool Wheel::SolveLongitudinalConstraintPart(const VehicleConstraint &inConstraint, float inMinImpulse, float inMaxImpulse)
84
{
85
return mLongitudinalPart.SolveVelocityConstraint(*inConstraint.GetVehicleBody(), *mContactBody, -mContactLongitudinal, inMinImpulse, inMaxImpulse);
86
}
87
88
bool Wheel::SolveLateralConstraintPart(const VehicleConstraint &inConstraint, float inMinImpulse, float inMaxImpulse)
89
{
90
return mLateralPart.SolveVelocityConstraint(*inConstraint.GetVehicleBody(), *mContactBody, -mContactLateral, inMinImpulse, inMaxImpulse);
91
}
92
93
JPH_NAMESPACE_END
94
95