BsCPlaneCollider.cpp 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "BsCPlaneCollider.h"
  4. #include "BsSceneObject.h"
  5. #include "BsCRigidbody.h"
  6. #include "BsCPlaneColliderRTTI.h"
  7. namespace BansheeEngine
  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. SPtr<Collider> collider = PlaneCollider::create(SO()->getWorldPosition(), SO()->getWorldRotation());
  37. collider->_setOwner(PhysicsOwnerType::Component, this);
  38. return collider;
  39. }
  40. bool CPlaneCollider::isValidParent(const HRigidbody& parent) const
  41. {
  42. // Planes cannot be added to non-kinematic rigidbodies
  43. return parent->getIsKinematic();
  44. }
  45. RTTITypeBase* CPlaneCollider::getRTTIStatic()
  46. {
  47. return CPlaneColliderRTTI::instance();
  48. }
  49. RTTITypeBase* CPlaneCollider::getRTTI() const
  50. {
  51. return CPlaneCollider::getRTTIStatic();
  52. }
  53. }