BsCDistanceJoint.cpp 2.6 KB

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