aboutsummaryrefslogtreecommitdiff
path: root/src/shared/phys/physcommon.cpp
diff options
context:
space:
mode:
authorAlexander <alex@cogarr.net>2019-04-24 21:16:08 -0400
committerAlexander <alex@cogarr.net>2019-04-24 21:16:08 -0400
commit3d60e1432ec43ade4aa61b5a70dd6b8975417e9f (patch)
tree954719a0f4a27fe42f9d8113844a21b79ae70f5d /src/shared/phys/physcommon.cpp
parent42bedce123739287339a95626675ffda3a1ce8e7 (diff)
downloadbrokengine-3d60e1432ec43ade4aa61b5a70dd6b8975417e9f.tar.gz
brokengine-3d60e1432ec43ade4aa61b5a70dd6b8975417e9f.tar.bz2
brokengine-3d60e1432ec43ade4aa61b5a70dd6b8975417e9f.zip
updates
Diffstat (limited to 'src/shared/phys/physcommon.cpp')
-rw-r--r--src/shared/phys/physcommon.cpp38
1 files changed, 15 insertions, 23 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;