BsCPlaneCollider.cpp 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "Components/BsCPlaneCollider.h"
  4. #include "Scene/BsSceneObject.h"
  5. #include "Components/BsCRigidbody.h"
  6. #include "RTTI/BsCPlaneColliderRTTI.h"
  7. namespace bs
  8. {
  9. CPlaneCollider::CPlaneCollider(const HSceneObject& parent)
  10. : CCollider(parent)
  11. {
  12. setName("PlaneCollider");
  13. }
  14. void CPlaneCollider::setNormal(const Vector3& normal)
  15. {
  16. if (mNormal == normal)
  17. return;
  18. mNormal = normal;
  19. mNormal.normalize();
  20. mLocalRotation = Quaternion::getRotationFromTo(Vector3::UNIT_X, normal);
  21. mLocalPosition = mNormal * mDistance;
  22. if(mInternal != nullptr)
  23. updateTransform();
  24. }
  25. void CPlaneCollider::setDistance(float distance)
  26. {
  27. if (mDistance == distance)
  28. return;
  29. mDistance = distance;
  30. mLocalPosition = mNormal * distance;
  31. if (mInternal != nullptr)
  32. updateTransform();
  33. }
  34. SPtr<Collider> CPlaneCollider::createInternal()
  35. {
  36. const Transform& tfrm = SO()->getTransform();
  37. SPtr<Collider> collider = PlaneCollider::create(tfrm.getPosition(), tfrm.getRotation());
  38. collider->_setOwner(PhysicsOwnerType::Component, this);
  39. return collider;
  40. }
  41. bool CPlaneCollider::isValidParent(const HRigidbody& parent) const
  42. {
  43. // Planes cannot be added to non-kinematic rigidbodies
  44. return parent->getIsKinematic();
  45. }
  46. RTTITypeBase* CPlaneCollider::getRTTIStatic()
  47. {
  48. return CPlaneColliderRTTI::instance();
  49. }
  50. RTTITypeBase* CPlaneCollider::getRTTI() const
  51. {
  52. return CPlaneCollider::getRTTIStatic();
  53. }
  54. }