PhysWorld.cpp 1.7 KB

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