BsPhysXDistanceJoint.cpp 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "BsPhysXDistanceJoint.h"
  4. #include "BsFPhysxJoint.h"
  5. using namespace physx;
  6. namespace BansheeEngine
  7. {
  8. PxDistanceJointFlag::Enum toPxFlag(PhysXDistanceJoint::Flag flag)
  9. {
  10. switch (flag)
  11. {
  12. case PhysXDistanceJoint::Flag::MaxDistance:
  13. return PxDistanceJointFlag::eMAX_DISTANCE_ENABLED;
  14. case PhysXDistanceJoint::Flag::MinDistance:
  15. return PxDistanceJointFlag::eMIN_DISTANCE_ENABLED;
  16. default:
  17. case PhysXDistanceJoint::Flag::Spring:
  18. return PxDistanceJointFlag::eSPRING_ENABLED;
  19. }
  20. }
  21. PhysXDistanceJoint::PhysXDistanceJoint(PxPhysics* physx)
  22. {
  23. PxDistanceJoint* joint = PxDistanceJointCreate(*physx, nullptr, PxTransform(), nullptr, PxTransform());
  24. mInternal = bs_new<FPhysXJoint>(joint);
  25. }
  26. PhysXDistanceJoint::~PhysXDistanceJoint()
  27. {
  28. bs_delete(mInternal);
  29. }
  30. float PhysXDistanceJoint::getDistance() const
  31. {
  32. return getInternal()->getDistance();
  33. }
  34. float PhysXDistanceJoint::getMinDistance() const
  35. {
  36. return getInternal()->getMinDistance();
  37. }
  38. void PhysXDistanceJoint::setMinDistance(float value)
  39. {
  40. getInternal()->setMinDistance(value);
  41. }
  42. float PhysXDistanceJoint::getMaxDistance() const
  43. {
  44. return getInternal()->getMaxDistance();
  45. }
  46. void PhysXDistanceJoint::setMaxDistance(float value)
  47. {
  48. getInternal()->setMaxDistance(value);
  49. }
  50. float PhysXDistanceJoint::getTolerance() const
  51. {
  52. return getInternal()->getTolerance();
  53. }
  54. void PhysXDistanceJoint::setTolerance(float value)
  55. {
  56. getInternal()->setTolerance(value);
  57. }
  58. Spring PhysXDistanceJoint::getSpring() const
  59. {
  60. float damping = getInternal()->getDamping();
  61. float stiffness = getInternal()->getStiffness();
  62. return Spring(stiffness, damping);
  63. }
  64. void PhysXDistanceJoint::setSpring(const Spring& value)
  65. {
  66. getInternal()->setDamping(value.damping);
  67. getInternal()->setStiffness(value.stiffness);
  68. }
  69. void PhysXDistanceJoint::setFlag(Flag flag, bool enabled)
  70. {
  71. getInternal()->setDistanceJointFlag(toPxFlag(flag), enabled);
  72. }
  73. bool PhysXDistanceJoint::hasFlag(Flag flag)
  74. {
  75. return getInternal()->getDistanceJointFlags() & toPxFlag(flag);
  76. }
  77. PxDistanceJoint* PhysXDistanceJoint::getInternal() const
  78. {
  79. FPhysXJoint* internal = static_cast<FPhysXJoint*>(mInternal);
  80. return static_cast<PxDistanceJoint*>(internal->_getInternal());
  81. }
  82. }