BsCBoxCollider.cpp 1.5 KB

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