@@ -1,9 +1,8 @@
|
||||
// Copyright (c) 2012-2021 Wojciech Figat. All rights reserved.
|
||||
|
||||
#include "DistanceJoint.h"
|
||||
#include "Engine/Physics/PhysicsBackend.h"
|
||||
#include "Engine/Serialization/Serialization.h"
|
||||
#include "Engine/Physics/Utilities.h"
|
||||
#include <ThirdParty/PhysX/extensions/PxDistanceJoint.h>
|
||||
|
||||
DistanceJoint::DistanceJoint(const SpawnParams& params)
|
||||
: Joint(params)
|
||||
@@ -18,13 +17,9 @@ void DistanceJoint::SetFlags(DistanceJointFlag value)
|
||||
{
|
||||
if (_flags == value)
|
||||
return;
|
||||
|
||||
_flags = value;
|
||||
|
||||
if (_joint)
|
||||
{
|
||||
static_cast<PxDistanceJoint*>(_joint)->setDistanceJointFlags(static_cast<PxDistanceJointFlag::Enum>(value));
|
||||
}
|
||||
PhysicsBackend::SetDistanceJointFlags(_joint, value);
|
||||
}
|
||||
|
||||
void DistanceJoint::SetMinDistance(float value)
|
||||
@@ -32,13 +27,9 @@ void DistanceJoint::SetMinDistance(float value)
|
||||
value = Math::Clamp(value, 0.0f, _maxDistance);
|
||||
if (Math::NearEqual(value, _minDistance))
|
||||
return;
|
||||
|
||||
_minDistance = value;
|
||||
|
||||
if (_joint)
|
||||
{
|
||||
static_cast<PxDistanceJoint*>(_joint)->setMinDistance(value);
|
||||
}
|
||||
PhysicsBackend::SetDistanceJointMinDistance(_joint, value);
|
||||
}
|
||||
|
||||
void DistanceJoint::SetMaxDistance(float value)
|
||||
@@ -46,13 +37,9 @@ void DistanceJoint::SetMaxDistance(float value)
|
||||
value = Math::Max(_minDistance, value);
|
||||
if (Math::NearEqual(value, _maxDistance))
|
||||
return;
|
||||
|
||||
_maxDistance = value;
|
||||
|
||||
if (_joint)
|
||||
{
|
||||
static_cast<PxDistanceJoint*>(_joint)->setMaxDistance(value);
|
||||
}
|
||||
PhysicsBackend::SetDistanceJointMaxDistance(_joint, value);
|
||||
}
|
||||
|
||||
void DistanceJoint::SetTolerance(float value)
|
||||
@@ -60,32 +47,23 @@ void DistanceJoint::SetTolerance(float value)
|
||||
value = Math::Max(0.1f, value);
|
||||
if (Math::NearEqual(value, _tolerance))
|
||||
return;
|
||||
|
||||
_tolerance = value;
|
||||
|
||||
if (_joint)
|
||||
{
|
||||
static_cast<PxDistanceJoint*>(_joint)->setTolerance(value);
|
||||
}
|
||||
PhysicsBackend::SetDistanceJointTolerance(_joint, value);
|
||||
}
|
||||
|
||||
void DistanceJoint::SetSpringParameters(const SpringParameters& value)
|
||||
{
|
||||
if (value == _spring)
|
||||
return;
|
||||
|
||||
_spring = value;
|
||||
|
||||
if (_joint)
|
||||
{
|
||||
static_cast<PxDistanceJoint*>(_joint)->setStiffness(value.Stiffness);
|
||||
static_cast<PxDistanceJoint*>(_joint)->setDamping(value.Damping);
|
||||
}
|
||||
PhysicsBackend::SetDistanceJointSpring(_joint, value);
|
||||
}
|
||||
|
||||
float DistanceJoint::GetCurrentDistance() const
|
||||
{
|
||||
return _joint ? static_cast<PxDistanceJoint*>(_joint)->getDistance() : 0.0f;
|
||||
return _joint ? PhysicsBackend::GetDistanceJointDistance(_joint) : 0.0f;
|
||||
}
|
||||
|
||||
#if USE_EDITOR
|
||||
@@ -149,18 +127,13 @@ void DistanceJoint::Deserialize(DeserializeStream& stream, ISerializeModifier* m
|
||||
DESERIALIZE_MEMBER(Damping, _spring.Damping);
|
||||
}
|
||||
|
||||
PxJoint* DistanceJoint::CreateJoint(JointData& data)
|
||||
void* DistanceJoint::CreateJoint(const PhysicsJointDesc& desc)
|
||||
{
|
||||
const PxTransform trans0(C2P(data.Pos0), C2P(data.Rot0));
|
||||
const PxTransform trans1(C2P(data.Pos1), C2P(data.Rot1));
|
||||
auto joint = PxDistanceJointCreate(*data.Physics, data.Actor0, trans0, data.Actor1, trans1);
|
||||
|
||||
joint->setMinDistance(_minDistance);
|
||||
joint->setMaxDistance(_maxDistance);
|
||||
joint->setTolerance(_tolerance);
|
||||
joint->setDistanceJointFlags(static_cast<PxDistanceJointFlag::Enum>(_flags));
|
||||
joint->setStiffness(_spring.Stiffness);
|
||||
joint->setDamping(_spring.Damping);
|
||||
|
||||
void* joint = PhysicsBackend::CreateDistanceJoint(desc);
|
||||
PhysicsBackend::SetDistanceJointFlags(joint, _flags);
|
||||
PhysicsBackend::SetDistanceJointMinDistance(joint, _minDistance);
|
||||
PhysicsBackend::SetDistanceJointMaxDistance(joint, _maxDistance);
|
||||
PhysicsBackend::SetDistanceJointTolerance(joint, _tolerance);
|
||||
PhysicsBackend::SetDistanceJointSpring(joint, _spring);
|
||||
return joint;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user