From 100f0d44ee130b43606aa5060466e2d71174f3f7 Mon Sep 17 00:00:00 2001 From: Peter Schaefer Date: Wed, 3 Jun 2015 12:48:05 +0200 Subject: [PATCH] fixed collide Calls removed Scaling from modelMat --- Weave/Game.cpp | 8 ++++---- Weave/Graphix/Model/IMesh.h | 2 -- Weave/Scene/Scene.cpp | 9 ++++++++- Weave/Scene/SceneObject.cpp | 22 ++++++++++++---------- 4 files changed, 24 insertions(+), 17 deletions(-) diff --git a/Weave/Game.cpp b/Weave/Game.cpp index 551c37a..e3c18e5 100644 --- a/Weave/Game.cpp +++ b/Weave/Game.cpp @@ -48,7 +48,7 @@ Game::Game() : playing(true) // load LVL - SceneObject* tmp_world = new SceneObject(shader1, scale(vec3(2.5f,1.f,2.5f)), vec4(4.0f, 1.0f, 1.0f, 2.0f), "level_test.dae", "model_levelTest_2D.jpg"); + SceneObject* tmp_world = new SceneObject(shader1, mat4(1.f), vec4(4.0f, 1.0f, 1.0f, 2.0f), "level_test.dae", "model_levelTest_2D.jpg"); tmp_world->ignore = true; current_world->addObject(tmp_world); @@ -67,10 +67,10 @@ Game::Game() : playing(true) //current_world->addObject(new SceneObject(shader1, glm::mat4(1.0f), "Player.dae", "model_player.png")); //current_world->addObject(new SceneObject(shader1, translate(vec3(-3.f, .4f, 0.f))*scale(vec3(3.f)), "cow/cow.dae", "model_cow_2D.jpg")); - current_world->addObject(new SceneObject(shader1, translate(vec3(-3.f, .4f, 0.f))*scale(vec3(.32f)), vec4(3.0f, 0.5f, 0.4f, 1.5f), "duck.dae", "model_duck_2D.png")); - current_world->addObject(new SceneObject(shader1, translate(vec3(-5.f, .4f, 0.f))*scale(vec3(.32f)), vec4(3.0f, 3.f, 0.4f, 1.5f), "duck.dae", "model_duck_2D.png")); + current_world->addObject(new SceneObject(shader1, translate(vec3(-3.f, .4f, 0.f)), vec4(3.0f, 0.5f, 0.4f, 1.5f), "duck.dae", "model_duck_2D.png")); + current_world->addObject(new SceneObject(shader1, translate(vec3(-5.f, .4f, 0.f)), vec4(3.0f, 3.f, 0.4f, 1.5f), "duck.dae", "model_duck_2D.png")); - current_world->addObject(new SceneObject(shader1, translate(vec3(-5.f, 3.f, 0.f))*scale(vec3(.32f)), vec4(3.0f, 3.f, 0.4f, 1.5f), "SkyBox.dae", "model_SkyBox_2D.png")); + current_world->addObject(new SceneObject(shader1, translate(vec3(-5.f, 3.f, 0.f)), vec4(3.0f, 3.f, 0.4f, 1.5f), "SkyBox.dae", "model_SkyBox_2D.png")); //current_world->addObject(new EventBox(translate(vec3(3.f, .4f, 0.f)),EB_LOSTZONE)); //current_world->addObject(new EventBox(translate(vec3(3.f, .4f, -15.f)), EB_WINZONE)); diff --git a/Weave/Graphix/Model/IMesh.h b/Weave/Graphix/Model/IMesh.h index a713c8d..7afa124 100644 --- a/Weave/Graphix/Model/IMesh.h +++ b/Weave/Graphix/Model/IMesh.h @@ -67,6 +67,4 @@ protected: Node* root; - - }; \ No newline at end of file diff --git a/Weave/Scene/Scene.cpp b/Weave/Scene/Scene.cpp index 14fff6e..f1c521f 100644 --- a/Weave/Scene/Scene.cpp +++ b/Weave/Scene/Scene.cpp @@ -165,8 +165,14 @@ void Scene::update(float deltaT) 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) + { + ((SceneObject*)obA->getUserPointer())->collides((SceneObject*)obB->getUserPointer(), contactManifold); + ((SceneObject*)obB->getUserPointer())->collides((SceneObject*)obA->getUserPointer(), contactManifold); + } - ((SceneObject*)obA->getUserPointer())->collides((SceneObject*)obB->getUserPointer(), contactManifold); } @@ -231,6 +237,7 @@ void Scene::addObject(SceneObject* _add) SceneObjects.push_back(_add); ShaderSet.insert(_add->getShader()); + //bt_collision_world->addCollisionObject(*_add); bt_collision_world->addCollisionObject(*_add,_add->getCollideGroup(),_add->getCollideWith()); // _add->setMainScene(this); diff --git a/Weave/Scene/SceneObject.cpp b/Weave/Scene/SceneObject.cpp index a2a159e..ee9afe4 100644 --- a/Weave/Scene/SceneObject.cpp +++ b/Weave/Scene/SceneObject.cpp @@ -52,9 +52,10 @@ bt_collision_object(new btCollisionObject()) if (texturepath != "") texture = Texture::newTexture(texturepath, _material); - if (_modelpath == "model_duck_2D.png") + if (texturepath == "model_duck_2D.png") { collide_group = COL_ENEMY; + collide_with = COL_MARVIN | COL_LEVEL; } //Message::info("Creating SkyBox Shader"); //Graphix::getGlError(); @@ -94,6 +95,11 @@ bt_collision_object(new btCollisionObject()) //Message::info("Creating SkyBox Shader"); //Graphix::getGlError(); + if (texturepath == "model_duck_2D.png") + { + collide_group = COL_ENEMY; + } + model->bindShader(shader); //Message::info("Binding Shader"); //Graphix::getGlError(); @@ -146,7 +152,6 @@ void SceneObject::update(float deltaT) btTransform tmp; tmp.setFromOpenGLMatrix(value_ptr(modelMat)); bt_collision_object->setWorldTransform(tmp); - } void SceneObject::draw() const @@ -185,23 +190,20 @@ void SceneObject::checkCollision(SceneObject* _first, SceneObject* _second) void SceneObject::collides(SceneObject* _other, btPersistentManifold* _contactManifold) { - _contactManifold->refreshContactPoints(this->operator btCollisionObject *()->getWorldTransform(), _other->operator btCollisionObject *()->getWorldTransform()); int numContacts = _contactManifold->getNumContacts(); //For each contact point in that manifold + double pdist = _contactManifold->getContactPoint(0).getDistance(); for (int j = 0; j < numContacts; j++) { //Get the contact information btManifoldPoint& pt = _contactManifold->getContactPoint(j); btVector3 ptA = pt.getPositionWorldOnA(); btVector3 ptB = pt.getPositionWorldOnB(); - double ptdist = pt.getDistance(); + pdist = min((double)pt.getDistance(),pdist); } - Message::info("Kollision!"); + + if (!ignore && !_other->ignore) + Message::info((std::string)"Kollision! " + std::to_string(pdist) + " (" + (std::string)*model + " with " + (std::string)*_other->getModel() + ")"); - if ((texture != nullptr && texture->operator std::string() == "model_player_2D.png") || _other->texture != nullptr && (_other->texture->operator std::string() == "model_player_2D.png")) - { - if (!ignore && !_other->ignore) - Message::info("Kollision"); - } } bool SceneObject::floorBound() const -- 2.47.3