PhysicsHingeConstraint.cpp 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. /*
  2. * PhysicsHingeConstraint.cpp
  3. */
  4. #include "PhysicsHingeConstraint.h"
  5. #include "Node.h"
  6. namespace gameplay
  7. {
  8. void PhysicsHingeConstraint::setLimits(float minAngle, float maxAngle, float bounciness)
  9. {
  10. // Use the defaults for softness (0.9) and biasFactor (0.3).
  11. ((btHingeConstraint*)_constraint)->setLimit(minAngle, maxAngle, 0.9f, 0.3f, bounciness);
  12. }
  13. PhysicsHingeConstraint::PhysicsHingeConstraint(PhysicsRigidBody* a, const Quaternion& rotationOffsetA, const Vector3& translationOffsetA,
  14. PhysicsRigidBody* b, const Quaternion& rotationOffsetB, const Vector3& translationOffsetB)
  15. : PhysicsConstraint(a, b)
  16. {
  17. // Take scale into account for the first node's translation offset.
  18. Vector3 sA;
  19. a->getNode()->getWorldMatrix().getScale(&sA);
  20. Vector3 tA(translationOffsetA.x * sA.x, translationOffsetA.y * sA.y, translationOffsetA.z * sA.z);
  21. if (b)
  22. {
  23. // Take scale into account for the second node's translation offset.
  24. Vector3 sB;
  25. b->getNode()->getWorldMatrix().getScale(&sB);
  26. Vector3 tB(translationOffsetB.x * sB.x, translationOffsetB.y * sB.y, translationOffsetB.z * sB.z);
  27. btTransform frameInA(btQuaternion(rotationOffsetA.x, rotationOffsetA.y, rotationOffsetA.z, rotationOffsetA.w), btVector3(tA.x, tA.y, tA.z));
  28. btTransform frameInB(btQuaternion(rotationOffsetB.x, rotationOffsetB.y, rotationOffsetB.z, rotationOffsetB.w), btVector3(tB.x, tB.y, tB.z));
  29. _constraint = new btHingeConstraint(*a->_body, *b->_body, frameInA, frameInB);
  30. }
  31. else
  32. {
  33. btTransform frameInA(btQuaternion(rotationOffsetA.x, rotationOffsetA.y, rotationOffsetA.z, rotationOffsetA.w), btVector3(tA.x, tA.y, tA.z));
  34. _constraint = new btHingeConstraint(*a->_body, frameInA);
  35. }
  36. }
  37. PhysicsHingeConstraint::~PhysicsHingeConstraint()
  38. {
  39. // DUMMY FUNCTION
  40. }
  41. }