Преглед изворни кода

Added body interface methods to change maximum linear / angular velocity. (#1755)

sherief пре 1 дан
родитељ
комит
ac90c3e650
2 измењених фајлова са 44 додато и 0 уклоњено
  1. 32 0
      Jolt/Physics/Body/BodyInterface.cpp
  2. 12 0
      Jolt/Physics/Body/BodyInterface.h

+ 32 - 0
Jolt/Physics/Body/BodyInterface.cpp

@@ -965,6 +965,38 @@ float BodyInterface::GetGravityFactor(const BodyID &inBodyID) const
 		return 1.0f;
 }
 
+void BodyInterface::SetMaxLinearVelocity(const BodyID &inBodyID, float inLinearVelocity)
+{
+    BodyLockWrite lock(*mBodyLockInterface, inBodyID);
+    if (lock.Succeeded() && lock.GetBody().GetMotionPropertiesUnchecked() != nullptr)
+        lock.GetBody().GetMotionPropertiesUnchecked()->SetMaxLinearVelocity(inLinearVelocity);
+}
+
+float BodyInterface::GetMaxLinearVelocity(const BodyID &inBodyID) const
+{
+    BodyLockRead lock(*mBodyLockInterface, inBodyID);
+    if (lock.Succeeded() && lock.GetBody().GetMotionPropertiesUnchecked() != nullptr)
+        return lock.GetBody().GetMotionPropertiesUnchecked()->GetMaxLinearVelocity();
+    else
+        return 500.0f;
+}
+
+void BodyInterface::SetMaxAngularVelocity(const BodyID &inBodyID, float inAngularVelocity)
+{
+    BodyLockWrite lock(*mBodyLockInterface, inBodyID);
+    if (lock.Succeeded() && lock.GetBody().GetMotionPropertiesUnchecked() != nullptr)
+        lock.GetBody().GetMotionPropertiesUnchecked()->SetMaxAngularVelocity(inAngularVelocity);
+}
+
+float BodyInterface::GetMaxAngularVelocity(const BodyID &inBodyID) const
+{
+    BodyLockRead lock(*mBodyLockInterface, inBodyID);
+    if (lock.Succeeded() && lock.GetBody().GetMotionPropertiesUnchecked() != nullptr)
+        return lock.GetBody().GetMotionPropertiesUnchecked()->GetMaxAngularVelocity();
+    else
+        return 0.25f * JPH_PI * 60.0f;
+}
+
 void BodyInterface::SetUseManifoldReduction(const BodyID &inBodyID, bool inUseReduction)
 {
 	BodyLockWrite lock(*mBodyLockInterface, inBodyID);

+ 12 - 0
Jolt/Physics/Body/BodyInterface.h

@@ -269,6 +269,18 @@ public:
 	float						GetGravityFactor(const BodyID &inBodyID) const;
 	///@}
 
+    ///@name Max linear velocity
+    ///@{
+    void						SetMaxLinearVelocity(const BodyID &inBodyID, float inLinearVelocity);
+    float						GetMaxLinearVelocity(const BodyID &inBodyID) const;
+    ///@}
+
+    ///@name Max angular velocity
+    ///@{
+    void						SetMaxAngularVelocity(const BodyID &inBodyID, float inAngularVelocity);
+    float						GetMaxAngularVelocity(const BodyID &inBodyID) const;
+    ///@}
+
 	///@name Manifold reduction
 	///@{
 	void						SetUseManifoldReduction(const BodyID &inBodyID, bool inUseReduction);