]> git.leopard-lacewing.eu Git - cgue_weave.git/commitdiff
fixed collide Calls
authorPeter Schaefer <schaeferpm@gmail.com>
Wed, 3 Jun 2015 10:48:05 +0000 (12:48 +0200)
committerPeter Schaefer <schaeferpm@gmail.com>
Wed, 3 Jun 2015 10:48:05 +0000 (12:48 +0200)
removed Scaling from modelMat

Weave/Game.cpp
Weave/Graphix/Model/IMesh.h
Weave/Scene/Scene.cpp
Weave/Scene/SceneObject.cpp

index 551c37a61a4e1246e318cde2af4964025b4e0845..e3c18e51324b018e5c421d53c152113b397146d9 100644 (file)
@@ -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));
index a713c8d90a152a1e518eba214321321f6d58da70..7afa12453edd32ec6d17160ecdc3dd46e6393920 100644 (file)
@@ -67,6 +67,4 @@ protected:
 
        Node* root;
 
-
-
 };
\ No newline at end of file
index 14fff6eae00dbef86fe2e9b3367810c5aba01513..f1c521f70a91787876b57d2668ae520059227f80 100644 (file)
@@ -165,8 +165,14 @@ void Scene::update(float deltaT)
                        btPersistentManifold* contactManifold = bt_collision_world->getDispatcher()->getManifoldByIndexInternal(i);
                        btCollisionObject* obA = const_cast<btCollisionObject*>(contactManifold->getBody0());
                        btCollisionObject* obB = const_cast<btCollisionObject*>(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);
index a2a159e6a05a00c58235510c720eded38c6eb7fe..ee9afe48e8b170b336350281bc2b00a2eb2c6b63 100644 (file)
@@ -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