PhysWorld.cpp 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #include <bullet/BulletCollision/CollisionDispatch/btGhostObject.h>
  2. #include "anki/physics/PhysWorld.h"
  3. #include "anki/physics/Character.h"
  4. #include "anki/physics/MotionState.h"
  5. namespace anki {
  6. //==============================================================================
  7. // Constructor =
  8. //==============================================================================
  9. PhysWorld::PhysWorld():
  10. defaultContactProcessingThreshold(BT_LARGE_FLOAT)
  11. {
  12. collisionConfiguration = new btDefaultCollisionConfiguration();
  13. dispatcher = new btCollisionDispatcher(collisionConfiguration);
  14. broadphase = new btAxisSweep3(btVector3(-1000, -1000, -1000),
  15. btVector3(1000, 1000, 1000));
  16. sol = new btSequentialImpulseConstraintSolver;
  17. dynamicsWorld = new btDiscreteDynamicsWorld(dispatcher, broadphase, sol,
  18. collisionConfiguration);
  19. dynamicsWorld->setGravity(btVector3(0,-10, 0));
  20. }
  21. //==============================================================================
  22. // Destructor =
  23. //==============================================================================
  24. PhysWorld::~PhysWorld()
  25. {
  26. /// @todo
  27. }
  28. //==============================================================================
  29. // setDebugDrawer =
  30. //==============================================================================
  31. void PhysWorld::setDebugDrawer(btIDebugDraw* newDebugDrawer)
  32. {
  33. debugDrawer.reset(newDebugDrawer);
  34. dynamicsWorld->setDebugDrawer(debugDrawer.get());
  35. debugDrawer->setDebugMode(btIDebugDraw::DBG_DrawWireframe);
  36. }
  37. //==============================================================================
  38. // update =
  39. //==============================================================================
  40. void PhysWorld::update(float prevUpdateTime, float crntTime)
  41. {
  42. dynamicsWorld->stepSimulation(crntTime - prevUpdateTime);
  43. // updateNonRigidBodiesMotionStates
  44. for(uint i = 0; i < characters.size(); i++)
  45. {
  46. characters[i]->motionState->setWorldTransform(
  47. characters[i]->ghostObject->getWorldTransform());
  48. }
  49. }
  50. } // end namespace