BsRigidbody.cpp 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #include "BsRigidbody.h"
  2. #include "BsPhysics.h"
  3. namespace BansheeEngine
  4. {
  5. Rigidbody::Rigidbody(UINT32 priority)
  6. :mPriority(priority)
  7. {
  8. gPhysics().registerRigidbody(this, priority);
  9. }
  10. Rigidbody::~Rigidbody()
  11. {
  12. // It is assumed that child colliders will keep the parent Rigidbody alive, so we don't need to clear their parents
  13. gPhysics().unregisterRigidbody(mPhysicsId, mPriority);
  14. }
  15. void Rigidbody::addCollider(FCollider* collider)
  16. {
  17. mColliders.push_back(collider);
  18. }
  19. void Rigidbody::removeCollider(FCollider* collider)
  20. {
  21. auto iterFind = std::find(mColliders.begin(), mColliders.end(), collider);
  22. if (iterFind != mColliders.end())
  23. mColliders.erase(iterFind);
  24. }
  25. void Rigidbody::setIsActive(bool value)
  26. {
  27. mIsActive = value;
  28. }
  29. void Rigidbody::setFlags(Flag flags)
  30. {
  31. if (mFlags == flags)
  32. return;
  33. mFlags = flags;
  34. _updateMassDistribution();
  35. }
  36. void Rigidbody::_setPriority(UINT32 priority)
  37. {
  38. gPhysics().updatePriority(mPhysicsId, mPriority, priority);
  39. mPriority = priority;
  40. }
  41. SPtr<Rigidbody> Rigidbody::create(const Vector3& position, const Quaternion& rotation)
  42. {
  43. return gPhysics().createRigidbody(position, rotation);
  44. }
  45. }