RigidBody.cpp 1.4 KB

1234567891011121314151617181920212223242526272829303132333435
  1. #include "RigidBody.h"
  2. #include "App.h"
  3. #include "Physics.h"
  4. #include "Scene.h"
  5. //======================================================================================================================
  6. // Constructor =
  7. //======================================================================================================================
  8. RigidBody::RigidBody(float mass, const Transform& startTransform, btCollisionShape* shape, SceneNode* node,
  9. int group, int mask, Object* parent):
  10. btRigidBody(btRigidBody::btRigidBodyConstructionInfo(0.0, NULL, NULL, btVector3(0.0, 0.0, 0.0))),
  11. Object(parent)
  12. {
  13. DEBUG_ERR(shape==NULL || shape->getShapeType()==INVALID_SHAPE_PROXYTYPE);
  14. bool isDynamic = (mass != 0.0);
  15. btVector3 localInertia(0.0, 0.0, 0.0);
  16. if(isDynamic)
  17. shape->calculateLocalInertia(mass,localInertia);
  18. MotionState* myMotionState = new MotionState(toBt(startTransform), *node, this);
  19. btRigidBody::btRigidBodyConstructionInfo cInfo(mass, myMotionState, shape, localInertia);
  20. setupRigidBody(cInfo);
  21. setContactProcessingThreshold(defaultContactProcessingThreshold);
  22. if(mask==-1 || group==-1)
  23. app->getScene()->getPhysics()->getDynamicsWorld()->addRigidBody(this);
  24. else
  25. app->getScene()->getPhysics()->getDynamicsWorld()->addRigidBody(this, group, mask);
  26. }