29 void SetSliderAxis(
Vec3Arg inSliderAxis);
35 bool mAutoDetectPoint =
false;
49 float mLimitsMin = -FLT_MAX;
50 float mLimitsMax = FLT_MAX;
56 float mMaxFrictionForce = 0.0f;
77 virtual void NotifyShapeChanged(
const BodyID &inBodyID,
Vec3Arg inDeltaCOM)
override;
78 virtual void SetupVelocityConstraint(
float inDeltaTime)
override;
79 virtual void ResetWarmStart()
override;
80 virtual void WarmStartVelocityConstraint(
float inWarmStartImpulseRatio)
override;
81 virtual bool SolveVelocityConstraint(
float inDeltaTime)
override;
82 virtual bool SolvePositionConstraint(
float inDeltaTime,
float inBaumgarte)
override;
83#ifdef JPH_DEBUG_RENDERER
84 virtual void DrawConstraint(
DebugRenderer *inRenderer)
const override;
85 virtual void DrawConstraintLimits(
DebugRenderer *inRenderer)
const override;
87 virtual void SaveState(
StateRecorder &inStream)
const override;
92 virtual Mat44 GetConstraintToBody1Matrix()
const override;
93 virtual Mat44 GetConstraintToBody2Matrix()
const override;
96 float GetCurrentPosition()
const;
111 void SetTargetPosition(
float inPosition) { mTargetPosition = mHasLimits?
Clamp(inPosition, mLimitsMin, mLimitsMax) : inPosition; }
115 void SetLimits(
float inLimitsMin,
float inLimitsMax);
134 void CalculateSlidingAxisAndPosition(
Mat44Arg inRotation1);
135 void CalculatePositionConstraintProperties(
Mat44Arg inRotation1,
Mat44Arg inRotation2);
136 void CalculatePositionLimitsConstraintProperties(
float inDeltaTime);
137 void CalculateMotorConstraintProperties(
float inDeltaTime);
142 Vec3 mLocalSpacePosition1;
143 Vec3 mLocalSpacePosition2;
146 Vec3 mLocalSpaceSliderAxis1;
149 Vec3 mLocalSpaceNormal1;
150 Vec3 mLocalSpaceNormal2;
153 Quat mInvInitialOrientation;
164 float mMaxFrictionForce;
169 float mTargetVelocity = 0.0f;
170 float mTargetPosition = 0.0f;
182 Vec3 mWorldSpaceSliderAxis;
EConstraintSpace
Certain constraints support setting them up in local or world space. This governs what is used.
Definition: Constraint.h:58
EConstraintSubType
Enum to identify constraint sub type.
Definition: Constraint.h:34
#define JPH_EXPORT
Definition: Core.h:236
#define JPH_NAMESPACE_END
Definition: Core.h:378
#define JPH_NAMESPACE_BEGIN
Definition: Core.h:372
#define JPH_ASSERT(...)
Definition: IssueReporting.h:33
JPH_INLINE constexpr T Clamp(T inV, T inMin, T inMax)
Clamp a value between two values.
Definition: Math.h:45
#define JPH_OVERRIDE_NEW_DELETE
Macro to override the new and delete functions.
Definition: Memory.h:31
EMotorState
Definition: MotorSettings.h:17
#define JPH_DECLARE_SERIALIZABLE_VIRTUAL(linkage, class_name)
Definition: SerializableObject.h:109
Definition: AxisConstraintPart.h:43
ID of a body. This is a way of reasoning about bodies in a multithreaded simulation while avoiding ra...
Definition: BodyID.h:13
virtual void SaveBinaryState(StreamOut &inStream) const
Saves the contents of the constraint settings in binary form to inStream.
Definition: Constraint.cpp:26
virtual void RestoreBinaryState(StreamIn &inStream)
This function should not be called directly, it is used by sRestoreFromBinaryState.
Definition: Constraint.cpp:36
Definition: DebugRenderer.h:47
Definition: DualAxisConstraintPart.h:48
Holds a 4x4 matrix of floats, but supports also operations on the 3x3 upper left part of the matrix.
Definition: Mat44.h:13
Definition: MotorSettings.h:26
Definition: Reference.h:107
Definition: RotationEulerConstraintPart.h:36
A slider constraint allows movement in only 1 axis (and no rotation). Also known as a prismatic const...
Definition: SliderConstraint.h:68
void SetMaxFrictionForce(float inFrictionForce)
Friction control.
Definition: SliderConstraint.h:99
Vec3 GetTotalLambdaRotation() const
Definition: SliderConstraint.h:128
float GetLimitsMin() const
Definition: SliderConstraint.h:116
const MotorSettings & GetMotorSettings() const
Definition: SliderConstraint.h:104
virtual EConstraintSubType GetSubType() const override
Get the sub type of a constraint.
Definition: SliderConstraint.h:76
float GetTotalLambdaPositionLimits() const
Definition: SliderConstraint.h:127
bool HasLimits() const
Definition: SliderConstraint.h:118
Vector< 2 > GetTotalLambdaPosition() const
Definition: SliderConstraint.h:126
SpringSettings & GetLimitsSpringSettings()
Definition: SliderConstraint.h:122
float GetTotalLambdaMotor() const
Definition: SliderConstraint.h:129
float GetLimitsMax() const
Definition: SliderConstraint.h:117
void SetMotorState(EMotorState inState)
Definition: SliderConstraint.h:107
float GetTargetPosition() const
Definition: SliderConstraint.h:112
void SetLimitsSpringSettings(const SpringSettings &inLimitsSpringSettings)
Definition: SliderConstraint.h:123
const SpringSettings & GetLimitsSpringSettings() const
Update the limits spring settings.
Definition: SliderConstraint.h:121
void SetTargetVelocity(float inVelocity)
Definition: SliderConstraint.h:109
float GetTargetVelocity() const
Definition: SliderConstraint.h:110
MotorSettings & GetMotorSettings()
Motor settings.
Definition: SliderConstraint.h:103
float GetMaxFrictionForce() const
Definition: SliderConstraint.h:100
void SetTargetPosition(float inPosition)
Definition: SliderConstraint.h:111
EMotorState GetMotorState() const
Definition: SliderConstraint.h:108
Slider constraint settings, used to create a slider constraint.
Definition: SliderConstraint.h:17
MotorSettings mMotorSettings
In case the constraint is powered, this determines the motor settings around the sliding axis.
Definition: SliderConstraint.h:59
SpringSettings mLimitsSpringSettings
When enabled, this makes the limits soft. When the constraint exceeds the limits, a spring force will...
Definition: SliderConstraint.h:53
Settings for a linear or angular spring.
Definition: SpringSettings.h:23
Definition: StateRecorder.h:105
Simple binary input stream.
Definition: StreamIn.h:13
Simple binary output stream.
Definition: StreamOut.h:13
Base class for all constraints that involve 2 bodies. Body1 is usually considered the parent,...
Definition: TwoBodyConstraint.h:27
Base class for settings for all constraints that involve 2 bodies.
Definition: TwoBodyConstraint.h:16
virtual TwoBodyConstraint * Create(Body &inBody1, Body &inBody2) const =0
static JPH_INLINE Vec3 sAxisX()
Vectors with the principal axis.
Definition: Vec3.h:53
static JPH_INLINE Vec3 sAxisY()
Definition: Vec3.h:54
static JPH_INLINE Vec3 sZero()
Vector with all zeros.
Definition: Vec3.inl:107
Templatized vector class.
Definition: Vector.h:12