From: Peter Schaefer Date: Tue, 21 Jun 2016 10:20:24 +0000 (+0200) Subject: Trigger in front of player... X-Git-Url: https://git.leopard-lacewing.eu/?a=commitdiff_plain;h=c5df271f52b7f5d381d7a10d2e87f0ba61c71723;p=cgue_weave.git Trigger in front of player... --- diff --git a/Weave/Game.cpp b/Weave/Game.cpp index 1e965fd..c063206 100644 --- a/Weave/Game.cpp +++ b/Weave/Game.cpp @@ -78,7 +78,8 @@ Game::Game() : playing(true) lever1->setAnimationLoop(false); lever1->setup(door2); - Lever* lever2 = new Lever(translate(vec3(86.f, -18.f, 5.f)), vec4(3.0f, 3.f, 0.4f, 1.5f), "lever", "model_duck_2D.png"); + //Lever* lever2 = new Lever(translate(vec3(86.f, -18.f, 5.f)), vec4(3.0f, 3.f, 0.4f, 1.5f), "lever", "model_duck_2D.png"); + Lever* lever2 = new Lever(translate(vec3(-5.f, 0.f, -5.f)), vec4(3.0f, 3.f, 0.4f, 1.5f), "lever", "model_duck_2D.png"); current_world->addObject(lever2); lever2->setAnimationLoop(false); lever2->timeresistant = true; diff --git a/Weave/Scene/EventBox.cpp b/Weave/Scene/EventBox.cpp index f113782..06b6a0d 100644 --- a/Weave/Scene/EventBox.cpp +++ b/Weave/Scene/EventBox.cpp @@ -63,8 +63,13 @@ void EventBox::update(float _deltaT) void EventBox::draw(drawTarget _target) const { + vec4 color = vec4(.3f, .9f, .9f, 1.f); + + if(eb_type==EB_LEVER) + color = vec4(.9f, .3f, .9f, 1.f); + if (_target == DRAW_Coll) - collision->drawModel(modelMat, dr_BBox, vec4(.3f,.9f,.9f,1.f), 0, 0); + collision->drawModel(modelMat, dr_BBox, color, 0, 0); } void EventBox::collides(SceneObject* _other, btPersistentManifold* _contactManifold, float _deltaT) @@ -75,25 +80,26 @@ void EventBox::collides(SceneObject* _other, btPersistentManifold* _contactManif return; } - switch (eb_type) - { - default: - Message::info("EB Kollision: " + std::to_string(eb_type) + " !"); - break; - case EB_LOSTZONE: - Message::info("Spiel Verloren!"); - //Events::halt = true; - _other->movable = false; - - break; - case EB_WINZONE: - Message::info("Spiel Gewonnen!"); - Events::halt = true; - break; - case EB_LEVER: - ((Lever*)_other)->trigger(); - break; - } - - activated = true; + switch (eb_type) + { + default: + Message::info("EB Kollision: " + std::to_string(eb_type) + " !"); + break; + case EB_LOSTZONE: + Message::info("Spiel Verloren!"); + //Events::halt = true; + _other->movable = false; + + break; + case EB_WINZONE: + Message::info("Spiel Gewonnen!"); + Events::halt = true; + break; + case EB_LEVER: + Message::info("Sesam öffne dich!"); + ((Lever*)_other)->trigger(); + break; + } + + activated = true; } diff --git a/Weave/Scene/Marvin.cpp b/Weave/Scene/Marvin.cpp index 273d68d..c3cd6f8 100644 --- a/Weave/Scene/Marvin.cpp +++ b/Weave/Scene/Marvin.cpp @@ -5,6 +5,7 @@ #include "../Events.h" #include "Camera.h" #include "Scene.h" +#include "EventBox.h" #define TIME_TILL_MAX_MOVE 2 #define TIME_TILL_DIRECTION_ROTATE 1 @@ -19,11 +20,14 @@ SceneObject( _modelMat, vec4(7.0f, 0.7f, 1.0f, 3.0f), "Player", "model_player_2D collide_with = COL_LEVEL | COL_ENEMY | COL_EVENT; yStatic = false; + eTrigger = new EventBox(_modelMat, EB_LEVER); + } Marvin::~Marvin() { + delete eTrigger; } @@ -66,14 +70,27 @@ void Marvin::update(float deltaT) turnTo(cam.getWorldDirection(), 3 * deltaT / TIME_TILL_DIRECTION_ROTATE); //hit E + eTrigger->setModelMat(modelMat * translate(vec3(0.f, .5f, .75f))); + //eTrigger->update(deltaT); if (Events::isKHeld(SDLK_e)) { - + if (!trigger_active) + { + mainScene->addObject(eTrigger); + trigger_active = true; + } + + } + else + { + if (trigger_active) + { + mainScene->deleteObject(eTrigger); + trigger_active = false; + } + } } - - - SceneObject::update(deltaT); } diff --git a/Weave/Scene/Marvin.h b/Weave/Scene/Marvin.h index 4a3b1f5..4ba161e 100644 --- a/Weave/Scene/Marvin.h +++ b/Weave/Scene/Marvin.h @@ -3,6 +3,8 @@ #include "../GLM.h" +class EventBox; + class Marvin : public SceneObject { @@ -13,7 +15,8 @@ public: virtual void update(float) override; protected: - + EventBox* eTrigger = nullptr; + bool trigger_active= false; }; diff --git a/Weave/Scene/Scene.cpp b/Weave/Scene/Scene.cpp index f9ec11a..149256b 100644 --- a/Weave/Scene/Scene.cpp +++ b/Weave/Scene/Scene.cpp @@ -247,7 +247,7 @@ void Scene::update(float deltaT) //TODO go from keyframe to current time - lookat->setModel(prev_mat); + lookat->setModelMat(prev_mat); lookat->ySpeed = prev_ySpeed; lookat->movable = true; @@ -476,7 +476,7 @@ void Scene::addObject(SceneObject* _add) SceneObjects.push_back(_add); bt_collision_world->addCollisionObject(*_add, _add->getCollideGroup(), _add->getCollideWith()); - bt_dynamics_world->addCollisionObject(*_add,_add->getCollideGroup(),_add->getCollideWith()); + //bt_dynamics_world->addCollisionObject(*_add,_add->getCollideGroup(),_add->getCollideWith()); _add->setMainScene(this); } @@ -484,6 +484,7 @@ void Scene::addObject(SceneObject* _add) void Scene::deleteObject(SceneObject* _del) { SceneObjects.remove(_del); + bt_collision_world->removeCollisionObject(*_del); } diff --git a/Weave/Scene/SceneObject.cpp b/Weave/Scene/SceneObject.cpp index 79ef45b..b22516b 100644 --- a/Weave/Scene/SceneObject.cpp +++ b/Weave/Scene/SceneObject.cpp @@ -293,7 +293,7 @@ vec3 SceneObject::getPosition() const return vec3(modelMat[3]); } -void SceneObject::setModel(mat4& _modelMat){ +void SceneObject::setModelMat(mat4& _modelMat){ modelMat = _modelMat; } diff --git a/Weave/Scene/SceneObject.h b/Weave/Scene/SceneObject.h index 156292d..1b67688 100644 --- a/Weave/Scene/SceneObject.h +++ b/Weave/Scene/SceneObject.h @@ -55,7 +55,7 @@ public: virtual vec3 getPosition() const; __declspec(deprecated) - virtual void setModel(mat4&); + virtual void setModelMat(mat4&); __declspec(deprecated) virtual void turn(float angle, vec3& axis); virtual void turnTo(vec3& direction, float speed = 1); @@ -74,11 +74,6 @@ public: void saveModelMat(); - __declspec(deprecated) - void setEnemy(bool isenemy); - __declspec(deprecated) - bool isEnemy(); - operator btCollisionObject*() const; operator btRigidBody*() const; short getCollideGroup() const;