BsCHingeJoint.cpp 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "BsCHingeJoint.h"
  4. #include "BsSceneObject.h"
  5. #include "BsCHingeJointRTTI.h"
  6. namespace BansheeEngine
  7. {
  8. CHingeJoint::CHingeJoint(const HSceneObject& parent)
  9. : CJoint(parent)
  10. {
  11. setName("HingeJoint");
  12. }
  13. Radian CHingeJoint::getAngle() const
  14. {
  15. if (mInternal == nullptr)
  16. return Radian(0.0f);
  17. return _getInternal()->getAngle();
  18. }
  19. float CHingeJoint::getSpeed() const
  20. {
  21. if (mInternal == nullptr)
  22. return 0.0f;
  23. return _getInternal()->getSpeed();
  24. }
  25. LimitAngularRange CHingeJoint::getLimit() const
  26. {
  27. return mLimit;
  28. }
  29. void CHingeJoint::setLimit(const LimitAngularRange& limit)
  30. {
  31. if (limit == mLimit)
  32. return;
  33. mLimit = limit;
  34. if (mInternal != nullptr)
  35. _getInternal()->setLimit(limit);
  36. }
  37. HingeJoint::Drive CHingeJoint::getDrive() const
  38. {
  39. return mDrive;
  40. }
  41. void CHingeJoint::setDrive(const HingeJoint::Drive& drive)
  42. {
  43. if (drive == mDrive)
  44. return;
  45. mDrive = drive;
  46. if (mInternal != nullptr)
  47. _getInternal()->setDrive(drive);
  48. }
  49. void CHingeJoint::setFlag(HingeJoint::Flag flag, bool enabled)
  50. {
  51. bool isEnabled = ((UINT32)mFlag & (UINT32)flag) != 0;
  52. if (isEnabled == enabled)
  53. return;
  54. if (enabled)
  55. mFlag = (HingeJoint::Flag)((UINT32)mFlag | (UINT32)flag);
  56. else
  57. mFlag = (HingeJoint::Flag)((UINT32)mFlag & ~(UINT32)flag);
  58. if (mInternal != nullptr)
  59. _getInternal()->setFlag(flag, enabled);
  60. }
  61. bool CHingeJoint::hasFlag(HingeJoint::Flag flag) const
  62. {
  63. return ((UINT32)mFlag & (UINT32)flag) != 0;
  64. }
  65. SPtr<Joint> CHingeJoint::createInternal()
  66. {
  67. SPtr<Joint> joint = HingeJoint::create();
  68. joint->_setOwner(PhysicsOwnerType::Component, this);
  69. return joint;
  70. }
  71. RTTITypeBase* CHingeJoint::getRTTIStatic()
  72. {
  73. return CHingeJointRTTI::instance();
  74. }
  75. RTTITypeBase* CHingeJoint::getRTTI() const
  76. {
  77. return CHingeJoint::getRTTIStatic();
  78. }
  79. }