BsCDistanceJoint.cpp 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "Components/BsCDistanceJoint.h"
  4. #include "Scene/BsSceneObject.h"
  5. #include "Private/RTTI/BsCDistanceJointRTTI.h"
  6. namespace bs
  7. {
  8. CDistanceJoint::CDistanceJoint()
  9. : CJoint(mDesc)
  10. {
  11. setName("DistanceJoint");
  12. }
  13. CDistanceJoint::CDistanceJoint(const HSceneObject& parent)
  14. : CJoint(parent, mDesc)
  15. {
  16. setName("DistanceJoint");
  17. }
  18. float CDistanceJoint::getDistance() const
  19. {
  20. if (mInternal == nullptr)
  21. return 0.0f;
  22. return _getInternal()->getDistance();
  23. }
  24. float CDistanceJoint::getMinDistance() const
  25. {
  26. return mDesc.minDistance;
  27. }
  28. void CDistanceJoint::setMinDistance(float value)
  29. {
  30. if (mDesc.minDistance == value)
  31. return;
  32. mDesc.minDistance = value;
  33. if (mInternal != nullptr)
  34. _getInternal()->setMinDistance(value);
  35. }
  36. float CDistanceJoint::getMaxDistance() const
  37. {
  38. return mDesc.maxDistance;
  39. }
  40. void CDistanceJoint::setMaxDistance(float value)
  41. {
  42. if (mDesc.maxDistance == value)
  43. return;
  44. mDesc.maxDistance = value;
  45. if (mInternal != nullptr)
  46. _getInternal()->setMaxDistance(value);
  47. }
  48. float CDistanceJoint::getTolerance() const
  49. {
  50. return mDesc.tolerance;
  51. }
  52. void CDistanceJoint::setTolerance(float value)
  53. {
  54. if (mDesc.tolerance == value)
  55. return;
  56. mDesc.tolerance = value;
  57. if (mInternal != nullptr)
  58. _getInternal()->setTolerance(value);
  59. }
  60. Spring CDistanceJoint::getSpring() const
  61. {
  62. return mDesc.spring;
  63. }
  64. void CDistanceJoint::setSpring(const Spring& value)
  65. {
  66. if (mDesc.spring == value)
  67. return;
  68. mDesc.spring = value;
  69. if(mInternal != nullptr)
  70. _getInternal()->setSpring(value);
  71. }
  72. void CDistanceJoint::setFlag(DistanceJointFlag flag, bool enabled)
  73. {
  74. bool isEnabled = ((UINT32)mDesc.flag & (UINT32)flag) != 0;
  75. if (isEnabled == enabled)
  76. return;
  77. if (enabled)
  78. mDesc.flag = (DistanceJointFlag)((UINT32)mDesc.flag | (UINT32)flag);
  79. else
  80. mDesc.flag = (DistanceJointFlag)((UINT32)mDesc.flag & ~(UINT32)flag);
  81. if (mInternal != nullptr)
  82. _getInternal()->setFlag(flag, enabled);
  83. }
  84. bool CDistanceJoint::hasFlag(DistanceJointFlag flag) const
  85. {
  86. return ((UINT32)mDesc.flag & (UINT32)flag) != 0;
  87. }
  88. SPtr<Joint> CDistanceJoint::createInternal()
  89. {
  90. SPtr<Joint> joint = DistanceJoint::create(mDesc);
  91. joint->_setOwner(PhysicsOwnerType::Component, this);
  92. return joint;
  93. }
  94. RTTITypeBase* CDistanceJoint::getRTTIStatic()
  95. {
  96. return CDistanceJointRTTI::instance();
  97. }
  98. RTTITypeBase* CDistanceJoint::getRTTI() const
  99. {
  100. return CDistanceJoint::getRTTIStatic();
  101. }
  102. }