BsCPlaneCollider.cpp 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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()
  10. {
  11. setName("PlaneCollider");
  12. }
  13. CPlaneCollider::CPlaneCollider(const HSceneObject& parent)
  14. : CCollider(parent)
  15. {
  16. setName("PlaneCollider");
  17. }
  18. void CPlaneCollider::setNormal(const Vector3& normal)
  19. {
  20. if (mNormal == normal)
  21. return;
  22. mNormal = normal;
  23. mNormal.normalize();
  24. mLocalRotation = Quaternion::getRotationFromTo(Vector3::UNIT_X, normal);
  25. mLocalPosition = mNormal * mDistance;
  26. if(mInternal != nullptr)
  27. updateTransform();
  28. }
  29. void CPlaneCollider::setDistance(float distance)
  30. {
  31. if (mDistance == distance)
  32. return;
  33. mDistance = distance;
  34. mLocalPosition = mNormal * distance;
  35. if (mInternal != nullptr)
  36. updateTransform();
  37. }
  38. SPtr<Collider> CPlaneCollider::createInternal()
  39. {
  40. const Transform& tfrm = SO()->getTransform();
  41. SPtr<Collider> collider = PlaneCollider::create(tfrm.getPosition(), tfrm.getRotation());
  42. collider->_setOwner(PhysicsOwnerType::Component, this);
  43. return collider;
  44. }
  45. bool CPlaneCollider::isValidParent(const HRigidbody& parent) const
  46. {
  47. // Planes cannot be added to non-kinematic rigidbodies
  48. return parent->getIsKinematic();
  49. }
  50. RTTITypeBase* CPlaneCollider::getRTTIStatic()
  51. {
  52. return CPlaneColliderRTTI::instance();
  53. }
  54. RTTITypeBase* CPlaneCollider::getRTTI() const
  55. {
  56. return CPlaneCollider::getRTTIStatic();
  57. }
  58. }