BsCSphereCollider.cpp 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "Components/BsCSphereCollider.h"
  4. #include "Scene/BsSceneObject.h"
  5. #include "Components/BsCRigidbody.h"
  6. #include "RTTI/BsCSphereColliderRTTI.h"
  7. namespace bs
  8. {
  9. CSphereCollider::CSphereCollider(const HSceneObject& parent, float radius)
  10. : CCollider(parent), mRadius(radius)
  11. {
  12. setName("SphereCollider");
  13. }
  14. void CSphereCollider::setRadius(float radius)
  15. {
  16. float clampedRadius = std::max(radius, 0.01f);
  17. if (mRadius == clampedRadius)
  18. return;
  19. mRadius = clampedRadius;
  20. if (mInternal != nullptr)
  21. {
  22. _getInternal()->setRadius(clampedRadius);
  23. if (mParent != nullptr)
  24. mParent->_updateMassDistribution();
  25. }
  26. }
  27. void CSphereCollider::setCenter(const Vector3& center)
  28. {
  29. if (mLocalPosition == center)
  30. return;
  31. mLocalPosition = center;
  32. if (mInternal != nullptr)
  33. updateTransform();
  34. }
  35. SPtr<Collider> CSphereCollider::createInternal()
  36. {
  37. const Transform& tfrm = SO()->getTransform();
  38. SPtr<Collider> collider = SphereCollider::create(mRadius, tfrm.getPosition(), tfrm.getRotation());
  39. collider->_setOwner(PhysicsOwnerType::Component, this);
  40. return collider;
  41. }
  42. RTTITypeBase* CSphereCollider::getRTTIStatic()
  43. {
  44. return CSphereColliderRTTI::instance();
  45. }
  46. RTTITypeBase* CSphereCollider::getRTTI() const
  47. {
  48. return CSphereCollider::getRTTIStatic();
  49. }
  50. }