From 583d3146c45fa83b8f6077bbecdc03626f80a747 Mon Sep 17 00:00:00 2001 From: Peter Schaefer Date: Fri, 24 Jun 2016 13:38:50 +0200 Subject: [PATCH] Door collides with Marvin & Enemy BUG: CollisionMesh dont rotate --- Weave/Game.cpp | 6 +++--- Weave/Scene/Level.cpp | 25 +++++++++++++++++++++++++ Weave/Scene/Level.h | 1 + 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/Weave/Game.cpp b/Weave/Game.cpp index c063206..dde9f31 100644 --- a/Weave/Game.cpp +++ b/Weave/Game.cpp @@ -64,12 +64,12 @@ Game::Game() : playing(true) current_world->addObject(new SceneObject(translate(vec3(-3.f, .4f, 0.f)), vec4(3.0f, 0.5f, 0.4f, 1.5f), "duck_col", "model_duck_2D.png")); //current_world->addObject(new SceneObject(translate(vec3(-5.f, .4f, 0.f)), vec4(3.0f, 3.f, 0.4f, 1.5f), "boar", "model_boar_2D.png")); - SceneObject* door1 = new SceneObject(translate(vec3(92.f, -12.f, -4.f)), vec4(3.0f, 3.f, 0.4f, 1.5f), "door", "model_duck_2D.png"); + SceneObject* door1 = new Level(translate(vec3(92.f, -12.f, -4.f)), vec4(3.0f, 3.f, 0.4f, 1.5f), "door", "model_duck_2D.png"); current_world->addObject(door1); door1->setAnimationLoop(false); door1->timeresistant = true; - SceneObject* door2 = new SceneObject(translate(vec3(7.0f, 0.0f, -5.0f)), vec4(3.0f, 1.f, -1.4f, 1.5f), "door", "model_duck_2D.png"); + SceneObject* door2 = new Level(translate(vec3(7.0f, 0.0f, -5.0f)), vec4(3.0f, 1.f, -1.4f, 1.5f), "door", "model_duck_2D.png"); current_world->addObject(door2); door2->setAnimationLoop(false); @@ -83,7 +83,7 @@ Game::Game() : playing(true) current_world->addObject(lever2); lever2->setAnimationLoop(false); lever2->timeresistant = true; - lever2->setup(door1); + lever2->setup(door2); current_world->addObject(new Boar(translate(vec3(-5.f, 1.f, 5.f)))); diff --git a/Weave/Scene/Level.cpp b/Weave/Scene/Level.cpp index cf9b63d..e98b97f 100644 --- a/Weave/Scene/Level.cpp +++ b/Weave/Scene/Level.cpp @@ -31,6 +31,31 @@ Level::Level(std::string _modelpath, std::string _texturepath) : SceneObject(mat bt_rigid_body = new btRigidBody(RigidBodyCI); } +Level::Level(const mat4& _modelMat, const vec4& _material, std::string _modelpath, std::string _texturepath) : + SceneObject(_modelMat, _material, Model::newIMetaModel(_modelpath + ".dae"), _texturepath) +{ + collide_group = COL_LEVEL; + collide_with = COL_MARVIN | COL_ENEMY; + + //model->bindModel(); + //model->bindShader(shader); + + collision = model; + collision->bt_init(); + bt_collision_object->setCollisionShape(*collision); + bt_collision_object->setUserPointer(this); + + + btTransform btModelMat; + btModelMat.setFromOpenGLMatrix(value_ptr(modelMat)); + + btDefaultMotionState* MotionState = + new btDefaultMotionState(btModelMat); + btRigidBody::btRigidBodyConstructionInfo RigidBodyCI(0, MotionState, *model, btVector3(0, 0, 0)); + + bt_rigid_body = new btRigidBody(RigidBodyCI); +} + Level::~Level() { diff --git a/Weave/Scene/Level.h b/Weave/Scene/Level.h index b5d81ec..f1307c5 100644 --- a/Weave/Scene/Level.h +++ b/Weave/Scene/Level.h @@ -10,6 +10,7 @@ class Level : { public: Level(std::string modelpath, std::string texturepath); + Level(const mat4& modelMat, const vec4& material, string modelpath, string texturepath); ~Level(); virtual void collides(SceneObject* other, btPersistentManifold* contactManifold, float deltaT=1.f) override; -- 2.47.3