// 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);
//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));
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);
}
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);
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();
//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();
btTransform tmp;
tmp.setFromOpenGLMatrix(value_ptr(modelMat));
bt_collision_object->setWorldTransform(tmp);
-
}
void SceneObject::draw() const
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