Add utility SetLinearVelocity and SetAngularVelocity for a whole ragdoll
This commit is contained in:
@@ -27,6 +27,28 @@ float Ragdoll::GetTotalMass() const
|
||||
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)
|
||||
{
|
||||
// Bones with 0 weight are non-simulated (kinematic)
|
||||
|
||||
@@ -59,6 +59,16 @@ public:
|
||||
/// </summary>
|
||||
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:
|
||||
|
||||
float InitBone(RigidBody* rigidBody, int32& nodeIndex, Transform& localPose);
|
||||
|
||||
Reference in New Issue
Block a user