2
0

BsCBoxCollider.cpp 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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()
  10. {
  11. setName("BoxCollider");
  12. }
  13. CBoxCollider::CBoxCollider(const HSceneObject& parent, const Vector3& extents)
  14. : CCollider(parent), mExtents(extents)
  15. {
  16. setName("BoxCollider");
  17. }
  18. void CBoxCollider::setExtents(const Vector3& extents)
  19. {
  20. Vector3 clampedExtents = Vector3::max(extents, Vector3(0.01f, 0.01f, 0.01f));
  21. if (mExtents == clampedExtents)
  22. return;
  23. mExtents = clampedExtents;
  24. if (mInternal != nullptr)
  25. {
  26. _getInternal()->setExtents(clampedExtents);
  27. if (mParent != nullptr)
  28. mParent->_updateMassDistribution();
  29. }
  30. }
  31. void CBoxCollider::setCenter(const Vector3& center)
  32. {
  33. if (mLocalPosition == center)
  34. return;
  35. mLocalPosition = center;
  36. if (mInternal != nullptr)
  37. updateTransform();
  38. }
  39. SPtr<Collider> CBoxCollider::createInternal()
  40. {
  41. const Transform& tfrm = SO()->getTransform();
  42. SPtr<Collider> collider = BoxCollider::create(mExtents, tfrm.getPosition(), tfrm.getRotation());
  43. collider->_setOwner(PhysicsOwnerType::Component, this);
  44. return collider;
  45. }
  46. RTTITypeBase* CBoxCollider::getRTTIStatic()
  47. {
  48. return CBoxColliderRTTI::instance();
  49. }
  50. RTTITypeBase* CBoxCollider::getRTTI() const
  51. {
  52. return CBoxCollider::getRTTIStatic();
  53. }
  54. }