From: Peter Schaefer Date: Wed, 3 Jun 2015 12:31:04 +0000 (+0200) Subject: merged Time X-Git-Url: https://git.leopard-lacewing.eu/?a=commitdiff_plain;h=5846dfbd9a74d6575981bd2e928aa58fc77dccd4;p=cgue_weave.git merged Time --- 5846dfbd9a74d6575981bd2e928aa58fc77dccd4 diff --cc Weave/Scene/Scene.cpp index f1c521f,6f0cfd8..2a6f970 --- a/Weave/Scene/Scene.cpp +++ b/Weave/Scene/Scene.cpp @@@ -40,35 -34,23 +40,38 @@@ viewPort(x, y, width, height, fovy, zNe lookat(_lookat), move_delta(0) { - currenttime = 0; + currenttime = 0.0f; + if (lookat != nullptr) + timestamps.push(Timestamp(0.0f, _lookat->getModelMat(), x, lookat->ySpeed)); + + bt_collision_configuration = new btDefaultCollisionConfiguration(); + bt_dispatcher = new btCollisionDispatcher(bt_collision_configuration); + + btScalar sscene_size = (btScalar)SCENE_SIZE; + btVector3 worldAabbMin(-sscene_size, -sscene_size, -sscene_size); + btVector3 worldAabbMax(sscene_size, sscene_size, sscene_size); + + bt_broadphase = new bt32BitAxisSweep3(worldAabbMin, worldAabbMax, MAX_OBJECTS, 0, true); + + bt_collision_world = new btCollisionWorld(bt_dispatcher, bt_broadphase, bt_collision_configuration); } Scene::~Scene() { - for (auto i = SceneObjects.begin(); i != SceneObjects.end(); ++i) - { - delete (*i); - } - + //for (auto i = SceneObjects.begin(); i != SceneObjects.end(); ++i) + //{ + // delete (*i); + //} + timestamps.empty(); + //Bullet + delete bt_collision_world; + delete bt_broadphase; + delete bt_dispatcher; + delete bt_collision_configuration; - + //if (viewPort != nullptr) // delete viewPort; @@@ -156,35 -144,16 +165,35 @@@ void Scene::update(float deltaT (*i)->update(deltaT); } + bt_collision_world->performDiscreteCollisionDetection(); - for (auto i = SceneObjects.begin(); i != SceneObjects.end(); ++i) + + int numManifolds = bt_collision_world->getDispatcher()->getNumManifolds(); + //For each contact manifold + for (int i = 0; i < numManifolds; i++) { + btPersistentManifold* contactManifold = bt_collision_world->getDispatcher()->getManifoldByIndexInternal(i); + btCollisionObject* obA = const_cast(contactManifold->getBody0()); + btCollisionObject* obB = const_cast(contactManifold->getBody1()); + contactManifold->refreshContactPoints(obA->getWorldTransform(), obB->getWorldTransform()); + + if (contactManifold->getNumContacts()>0) - { + { - auto j = i; - for (j++; j != SceneObjects.end(); ++j) - { - SceneObject::checkCollision(*i, *j); + ((SceneObject*)obA->getUserPointer())->collides((SceneObject*)obB->getUserPointer(), contactManifold); + ((SceneObject*)obB->getUserPointer())->collides((SceneObject*)obA->getUserPointer(), contactManifold); } + + } + //for (auto i = SceneObjects.begin(); i != SceneObjects.end(); ++i) + //{ + // auto j = i; + // for (j++; j != SceneObjects.end(); ++j) + // { + // SceneObject::checkCollision(*i, *j); + // } + //} + } else { diff --cc Weave/Scene/Scene.h index 7950188,b5a5644..c7c7540 --- a/Weave/Scene/Scene.h +++ b/Weave/Scene/Scene.h @@@ -44,18 -44,5 +45,19 @@@ protected float move_delta; float currenttime; - std::stack PlayerModels; + std::stack timestamps; ++ //std::stack PlayerModels; + //std::stack PlayerDirections; + + //class btDefaultCollisionConfiguration; + //class btCollisionDispatcher; + //class btDbvtBroadphase; + //class btSequentialImpulseConstraintSolver; + //class btDiscreteDynamicsWorld; + + //Bullet + btCollisionConfiguration* bt_collision_configuration; + btCollisionDispatcher* bt_dispatcher; + btBroadphaseInterface* bt_broadphase; + btCollisionWorld* bt_collision_world; }; diff --cc Weave/Weave.vcxproj index ea01bb7,9539f8d..2f7d3c8 --- a/Weave/Weave.vcxproj +++ b/Weave/Weave.vcxproj @@@ -138,33 -139,8 +139,34 @@@ + + + + {b7c1909f-731f-be49-a926-fadfe6036dce} + false + true + false + true + true + + + {84f7995b-36f8-cc4a-97be-14f4cd664d9c} + false + true + false + true + true + + + {0993e55f-a581-ad41-9a80-9901730a0240} + false + true + false + true + true + +