Add utility SetLinearVelocity and SetAngularVelocity for a whole ragdoll
This commit is contained in:
@@ -27,6 +27,28 @@ float Ragdoll::GetTotalMass() const
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Ragdoll::SetLinearVelocity(const Vector3& value) const
|
||||||
|
{
|
||||||
|
for (auto child : Children)
|
||||||
|
{
|
||||||
|
const auto rigidBody = Cast<RigidBody>(child);
|
||||||
|
if (!rigidBody || !rigidBody->IsActiveInHierarchy())
|
||||||
|
continue;
|
||||||
|
rigidBody->SetLinearVelocity(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Ragdoll::SetAngularVelocity(const Vector3& value) const
|
||||||
|
{
|
||||||
|
for (auto child : Children)
|
||||||
|
{
|
||||||
|
const auto rigidBody = Cast<RigidBody>(child);
|
||||||
|
if (!rigidBody || !rigidBody->IsActiveInHierarchy())
|
||||||
|
continue;
|
||||||
|
rigidBody->SetAngularVelocity(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
float Ragdoll::InitBone(RigidBody* rigidBody, int32& nodeIndex, Transform& localOffset)
|
float Ragdoll::InitBone(RigidBody* rigidBody, int32& nodeIndex, Transform& localOffset)
|
||||||
{
|
{
|
||||||
// Bones with 0 weight are non-simulated (kinematic)
|
// Bones with 0 weight are non-simulated (kinematic)
|
||||||
|
|||||||
@@ -59,6 +59,16 @@ public:
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
API_PROPERTY() float GetTotalMass() const;
|
API_PROPERTY() float GetTotalMass() const;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sets the linear velocity of all rigidbodies in the ragdoll.
|
||||||
|
/// </summary>
|
||||||
|
API_FUNCTION() void SetLinearVelocity(const Vector3& value) const;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sets the angular velocity of all rigidbodies in the ragdoll (in radians per second).
|
||||||
|
/// </summary>
|
||||||
|
API_FUNCTION() void SetAngularVelocity(const Vector3& value) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
float InitBone(RigidBody* rigidBody, int32& nodeIndex, Transform& localPose);
|
float InitBone(RigidBody* rigidBody, int32& nodeIndex, Transform& localPose);
|
||||||
|
|||||||
Reference in New Issue
Block a user