Jolt Physics
A multi core friendly Game Physics Engine
Loading...
Searching...
No Matches
MotorSettings.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
10
12
13class StreamIn;
14class StreamOut;
15
16enum class EMotorState
17{
18 Off,
19 Velocity,
20 Position,
22};
23
24// Ability to check if position/velocity is enabled for a motor state
25constexpr bool IsVelocityMotor(EMotorState inMotorState) { return (int(inMotorState) & int(EMotorState::Velocity)) != 0; }
26constexpr bool IsPositionMotor(EMotorState inMotorState) { return (int(inMotorState) & int(EMotorState::Position)) != 0; }
27
28static_assert(!IsVelocityMotor(EMotorState::Off));
32static_assert(!IsPositionMotor(EMotorState::Off));
36
40{
42
43public:
45 MotorSettings() = default;
46 MotorSettings(const MotorSettings &) = default;
47 MotorSettings & operator = (const MotorSettings &) = default;
48 MotorSettings(ESpringMode inMode, float inFrequency, float inDamping) : mSpringSettings(inMode, inFrequency, inDamping) { JPH_ASSERT(IsValid()); }
49 MotorSettings(float inFrequency, float inDamping) : mSpringSettings(ESpringMode::FrequencyAndDamping, inFrequency, inDamping) { JPH_ASSERT(IsValid()); }
50 MotorSettings(ESpringMode inMode, float inFrequency, float inDamping, float inForceLimit, float inTorqueLimit) : mSpringSettings(inMode, inFrequency, inDamping), mMinForceLimit(-inForceLimit), mMaxForceLimit(inForceLimit), mMinTorqueLimit(-inTorqueLimit), mMaxTorqueLimit(inTorqueLimit) { JPH_ASSERT(IsValid()); }
51 MotorSettings(float inFrequency, float inDamping, float inForceLimit, float inTorqueLimit) : mSpringSettings(ESpringMode::FrequencyAndDamping, inFrequency, inDamping), mMinForceLimit(-inForceLimit), mMaxForceLimit(inForceLimit), mMinTorqueLimit(-inTorqueLimit), mMaxTorqueLimit(inTorqueLimit) { JPH_ASSERT(IsValid()); }
52
54 void SetForceLimits(float inMin, float inMax) { JPH_ASSERT(inMin <= inMax); mMinForceLimit = inMin; mMaxForceLimit = inMax; }
55
57 void SetTorqueLimits(float inMin, float inMax) { JPH_ASSERT(inMin <= inMax); mMinTorqueLimit = inMin; mMaxTorqueLimit = inMax; }
58
60 void SetForceLimit(float inLimit) { mMinForceLimit = -inLimit; mMaxForceLimit = inLimit; }
61
63 void SetTorqueLimit(float inLimit) { mMinTorqueLimit = -inLimit; mMaxTorqueLimit = inLimit; }
64
66 bool IsValid() const { return mSpringSettings.mFrequency >= 0.0f && mSpringSettings.mDamping >= 0.0f && mMinForceLimit <= mMaxForceLimit && mMinTorqueLimit <= mMaxTorqueLimit; }
67
69 void SaveBinaryState(StreamOut &inStream) const;
70
72 void RestoreBinaryState(StreamIn &inStream);
73
74 // Settings
75 SpringSettings mSpringSettings { ESpringMode::FrequencyAndDamping, 2.0f, 1.0f };
76 float mMinForceLimit = -FLT_MAX;
77 float mMaxForceLimit = FLT_MAX;
78 float mMinTorqueLimit = -FLT_MAX;
79 float mMaxTorqueLimit = FLT_MAX;
80};
81
#define JPH_EXPORT
Definition Core.h:278
#define JPH_NAMESPACE_END
Definition Core.h:428
#define JPH_NAMESPACE_BEGIN
Definition Core.h:422
#define JPH_ASSERT(...)
Definition IssueReporting.h:33
constexpr bool IsPositionMotor(EMotorState inMotorState)
Definition MotorSettings.h:26
EMotorState
Definition MotorSettings.h:17
@ PositionAndVelocity
Motor will drive both to target position and velocity using: force = stiffness * (target_position - c...
@ Position
Motor will drive to target position using: force = stiffness * (target_position - current_position) -...
@ Velocity
Motor will drive to target velocity limited only by max force/torque that the motor can apply.
@ Off
Motor is off.
constexpr bool IsVelocityMotor(EMotorState inMotorState)
Definition MotorSettings.h:25
#define JPH_DECLARE_SERIALIZABLE_NON_VIRTUAL(linkage, class_name)
Definition SerializableObject.h:80
ESpringMode
Enum used by constraints to specify how the spring is defined.
Definition SpringSettings.h:16
@ FrequencyAndDamping
Frequency and damping are specified.
Definition MotorSettings.h:40
MotorSettings(float inFrequency, float inDamping, float inForceLimit, float inTorqueLimit)
Definition MotorSettings.h:51
void SetForceLimits(float inMin, float inMax)
Set asymmetric force limits.
Definition MotorSettings.h:54
void SetTorqueLimits(float inMin, float inMax)
Set asymmetric torque limits.
Definition MotorSettings.h:57
MotorSettings(const MotorSettings &)=default
void SetForceLimit(float inLimit)
Set symmetric force limits.
Definition MotorSettings.h:60
MotorSettings(float inFrequency, float inDamping)
Definition MotorSettings.h:49
bool IsValid() const
Check if settings are valid.
Definition MotorSettings.h:66
MotorSettings(ESpringMode inMode, float inFrequency, float inDamping)
Definition MotorSettings.h:48
void SetTorqueLimit(float inLimit)
Set symmetric torque limits.
Definition MotorSettings.h:63
MotorSettings()=default
Constructor.
MotorSettings(ESpringMode inMode, float inFrequency, float inDamping, float inForceLimit, float inTorqueLimit)
Definition MotorSettings.h:50
Settings for a linear or angular spring.
Definition SpringSettings.h:24
Simple binary input stream.
Definition StreamIn.h:13
Simple binary output stream.
Definition StreamOut.h:13