aboutsummaryrefslogtreecommitdiff
path: root/src/shared/phys
diff options
context:
space:
mode:
Diffstat (limited to 'src/shared/phys')
-rw-r--r--src/shared/phys/physcommon.cpp38
-rw-r--r--src/shared/phys/physcommon.hpp4
2 files changed, 18 insertions, 24 deletions
diff --git a/src/shared/phys/physcommon.cpp b/src/shared/phys/physcommon.cpp
index 783f282..b588b23 100644
--- a/src/shared/phys/physcommon.cpp
+++ b/src/shared/phys/physcommon.cpp
@@ -9,11 +9,10 @@
using namespace std::chrono;
btDiscreteDynamicsWorld* World;
-std::list<btRigidBody*> Objects;
+std::list<btCollisionObject*> Objects;
std::list<btKinematicCharacterController*> Chars;
-extern void dropRigidBody(btRigidBody* b);
-extern void dropChar(btKinematicCharacterController* a);
+extern void dropCollisionObject(btCollisionObject* b);
// Removes all objects from the world
//void ClearObjects(btDiscreteDynamicsWorld* wr, std::list<btRigidBody*> objs, void(*f)(btRigidBody*)) {
@@ -32,30 +31,22 @@ extern void dropChar(btKinematicCharacterController* a);
//objs.clear();
//}
void ClearObjects(){
- for(std::list<btRigidBody *>::iterator itr = Objects.begin(); itr != Objects.end(); ++itr){
- dropRigidBody(*itr);
- World->removeRigidBody(*itr);
+ for(std::list<btCollisionObject*>::iterator itr = Objects.begin(); itr != Objects.end(); ++itr){
+ dropCollisionObject(*itr);
+ World->removeCollisionObject(*itr);
delete *itr;
}
Objects.clear();
}
-void ClearChars(){
- for(std::list<btKinematicCharacterController *>::iterator itr = Chars.begin(); itr != Chars.end(); ++itr){
- dropChar(*itr);
- World->removeVehicle(*itr);
- delete *itr;
- }
- Chars.clear();
-}
-
-btBroadphaseInterface* BroadPhase;
+btBroadphaseInterface* broadphase;
btDefaultCollisionConfiguration* CollisionConfiguration;
btCollisionDispatcher* Dispatcher;
btSequentialImpulseConstraintSolver* Solver;
void phys_genesis(){
- BroadPhase = new btAxisSweep3(btVector3(-1000,-1000,-1000),btVector3(1000,1000,1000));
+ broadphase = new btAxisSweep3(btVector3(-1000,-1000,-1000),btVector3(1000,1000,1000));
+ broadphase ->getOverlappingPairCache()->setInternalGhostPairCallback(new btGhostPairCallback());
//printf("Broadphase\n");
CollisionConfiguration = new btDefaultCollisionConfiguration();
//printf("Collision config\n");
@@ -63,7 +54,7 @@ void phys_genesis(){
//printf("Dispatcher\n");
Solver = new btSequentialImpulseConstraintSolver();
//printf("Solver\n");
- World = new btDiscreteDynamicsWorld(Dispatcher, BroadPhase, Solver, CollisionConfiguration);
+ World = new btDiscreteDynamicsWorld(Dispatcher, broadphase, Solver, CollisionConfiguration);
//printf("Physics world init ok.\n");
World->setGravity(btVector3(0,-10,0));
//printf("Created physics world: %p\n",World);
@@ -71,9 +62,8 @@ void phys_genesis(){
void phys_shutdown(){
ClearObjects();
- ClearChars();
printf("cleared objects\n");
- delete BroadPhase;
+ delete broadphase;
printf("deleted broadphase\n");
delete CollisionConfiguration;
printf("deleted collision config\n");
@@ -90,18 +80,20 @@ void phys_shutdown(){
// Runs the physics simulation.
// - TDeltaTime tells the simulation how much time has passed since the last frame so the simulation can run independently of the frame rate. Optionally pass in an argument that will be called on every rigidbody in the world
-void UpdatePhysics(double TDeltaTime, void(*f)(btRigidBody*)) {
+void UpdatePhysics(double TDeltaTime, void(*f)(btCollisionObject *)) {
+ //printf("Pre step simulation\n");
World->stepSimulation(TDeltaTime * 0.2f, 60);
+ //printf("Done step simulation\n");
if(f){
// Relay the object's orientation to irrlicht
- for(std::list<btRigidBody *>::iterator it = Objects.begin(); it != Objects.end(); ++it) {
+ for(std::list<btCollisionObject *>::iterator it = Objects.begin(); it != Objects.end(); ++it) {
(*f)(*it);
}
}
}
high_resolution_clock::time_point t1 = high_resolution_clock::now();
-void gameloop_phys(void(*f)(btRigidBody*)){
+void gameloop_phys(void(*f)(btCollisionObject *)){
//printf("Doing phys gameloop\n");
high_resolution_clock::time_point now = high_resolution_clock::now();
duration<double> delta = now-t1;
diff --git a/src/shared/phys/physcommon.hpp b/src/shared/phys/physcommon.hpp
index dd5fe14..559683f 100644
--- a/src/shared/phys/physcommon.hpp
+++ b/src/shared/phys/physcommon.hpp
@@ -1,7 +1,9 @@
#ifndef _shared_physcommon_
+#define _shared_physcommon_
#include <BulletDynamics/Character/btKinematicCharacterController.h>
#include <BulletCollision/CollisionDispatch/btGhostObject.h>
-void gameloop_phys(void(*f)(btRigidBody*));
+void gameloop_phys(void(*f)(btCollisionObject *));
void phys_genesis();
void phys_shutdown();
+extern btDiscreteDynamicsWorld* World;
#endif