From: Peter Schaefer Date: Tue, 9 Jun 2015 14:09:02 +0000 (+0200) Subject: moved playerEvents to Marvin X-Git-Url: https://git.leopard-lacewing.eu/?a=commitdiff_plain;h=c41f656b9d139ff6f1b508894f13a72674d65999;p=cgue_weave.git moved playerEvents to Marvin --- diff --git a/Weave/Scene/Marvin.cpp b/Weave/Scene/Marvin.cpp index a0268e0..1fe40a5 100644 --- a/Weave/Scene/Marvin.cpp +++ b/Weave/Scene/Marvin.cpp @@ -2,10 +2,19 @@ #include "../Graphix/Shader.h" #include "../GLM.h" +#include "../Events.h" +#include "../Graphix/ViewPort.h" +#include "Scene.h" +#define TIME_TILL_MAX_MOVE 2 +#define TIME_TILL_DIRECTION_ROTATE 1 + +#define SPEED_MOVE_NORMAL 1.5f +#define MOVE_FASTER 2.5f Marvin::Marvin(Shader* _shader, const mat4& _modelMat) : -SceneObject(_shader, _modelMat, vec4(7.0f, 0.7f, 1.0f, 3.0f), "Player.dae", "model_player_2D.png") +SceneObject(_shader, _modelMat, vec4(7.0f, 0.7f, 1.0f, 3.0f), "Player.dae", "model_player_2D.png"), +move_delta(0) { collide_group = COL_MARVIN; collide_with = COL_LEVEL | COL_ENEMY; @@ -15,3 +24,46 @@ SceneObject(_shader, _modelMat, vec4(7.0f, 0.7f, 1.0f, 3.0f), "Player.dae", "mod Marvin::~Marvin() { } + + +void Marvin::update(float deltaT) +{ + ViewPort& viewPort(mainScene->getViewport()); + + // XYAchse um den Player + float rotatex = 0.002f*Events::getViewX(); + float rotatey = 0.001f*Events::getViewY(); + viewPort.rotateView(rotatex, rotatey); + + //Jump + if (Events::getJump() && floorBound()) + ySpeed += 5.5; + + int move_x = Events::getMoveX(); + int move_y = Events::getMoveY(); + // MOVE Player + if (move_x) + move(SPEED_MOVE_NORMAL *move_x * deltaT * viewPort.rotateDirection(vec3(-1.f, 0.f, 0.f))); + + if (move_y){ + if (move_y > 0){ + if (move_delta < TIME_TILL_MAX_MOVE) + move_delta += deltaT; + if (move_delta > TIME_TILL_MAX_MOVE) + move_delta = TIME_TILL_MAX_MOVE; + move(SPEED_MOVE_NORMAL * (MOVE_FASTER * move_delta / TIME_TILL_MAX_MOVE + 1) *move_y * deltaT * viewPort.rotateDirection(vec3(0.f, 0.f, -1.f))); + } + else + move(SPEED_MOVE_NORMAL *move_y * deltaT * viewPort.rotateDirection(vec3(0.f, 0.f, -1.f))); + } + else + { + move_delta = 0; + } + + //Rotate Play in move direction + if (move_x || move_y) + turnTo(viewPort.rotateDirection(vec3(0.f, 0.f, -1.f)), 3 * deltaT / TIME_TILL_DIRECTION_ROTATE); + + SceneObject::update(deltaT); +} diff --git a/Weave/Scene/Marvin.h b/Weave/Scene/Marvin.h index 3493a97..5ae4140 100644 --- a/Weave/Scene/Marvin.h +++ b/Weave/Scene/Marvin.h @@ -11,5 +11,10 @@ class Marvin : public: Marvin(Shader* shader, const mat4& modelMat); ~Marvin(); + + virtual void update(float) override; +protected: + float move_delta; + }; diff --git a/Weave/Scene/Scene.cpp b/Weave/Scene/Scene.cpp index 2a6f970..0736c42 100644 --- a/Weave/Scene/Scene.cpp +++ b/Weave/Scene/Scene.cpp @@ -22,12 +22,6 @@ using std::list; using std::set; using std::stack; -#define TIME_TILL_MAX_MOVE 2 -#define TIME_TILL_DIRECTION_ROTATE 1 - -#define SPEED_MOVE_NORMAL 1.5f -#define MOVE_FASTER 2.5f - #define timestep 0.01f #define SCENE_SIZE 500.0 @@ -37,8 +31,7 @@ using std::stack; Scene::Scene(unsigned int x, unsigned int y, unsigned int width, unsigned int height, float fovy, float zNear, float zFar, vec3 pos, SceneObject* _lookat) : viewPort(x, y, width, height, fovy, zNear, zFar), -lookat(_lookat), -move_delta(0) +lookat(_lookat) { currenttime = 0.0f; if (lookat != nullptr) @@ -84,29 +77,19 @@ Scene::~Scene() void Scene::update(float deltaT) { - vec3 pos; - //Focus auf Player - - if (lookat != NULL){ - pos = lookat->getPosition(); - } - // XYAchse um den Player - float rotatex = 0.002f*Events::getViewX(); - float rotatey = 0.001f*Events::getViewY(); - viewPort.rotateView(rotatex, rotatey); + if (!Events::getTimeShift()) { - int move_x = Events::getMoveX(); - int move_y = Events::getMoveY(); + //int shoot = Events::getAction1(); //int reset = Events::getAction2(); //Jump - if (Events::getJump() && lookat->floorBound()) - lookat->ySpeed += 5.5; + //if (Events::getJump() && lookat->floorBound()) + // lookat->ySpeed += 5.5; //else if (!Events::isKHeld(SDLK_SPACE) && lookat->ySpeed>0) // lookat->ySpeed = 0; @@ -120,34 +103,6 @@ void Scene::update(float deltaT) currenttime += deltaT; - - - // MOVE Player - if (move_x) - lookat->move(SPEED_MOVE_NORMAL *move_x * deltaT * viewPort.rotateDirection(vec3(-1.f, 0.f, 0.f))); - - if (move_y){ - if (move_y > 0){ - if (move_delta < TIME_TILL_MAX_MOVE) - move_delta += deltaT; - if (move_delta > TIME_TILL_MAX_MOVE) - move_delta = TIME_TILL_MAX_MOVE; - lookat->move(SPEED_MOVE_NORMAL * (MOVE_FASTER * move_delta / TIME_TILL_MAX_MOVE + 1) *move_y * deltaT * viewPort.rotateDirection(vec3(0.f, 0.f, -1.f))); - } - else - lookat->move(SPEED_MOVE_NORMAL *move_y * deltaT * viewPort.rotateDirection(vec3(0.f, 0.f, -1.f))); - } - else - { - move_delta = 0; - } - - //Rotate Play in move direction - - if (move_x || move_y) - lookat->turnTo(viewPort.rotateDirection(vec3(0.f, 0.f, -1.f)), 3 * deltaT / TIME_TILL_DIRECTION_ROTATE); - - //// Zoom auf Player //if (Events::getViewZ()) //{ @@ -177,23 +132,13 @@ void Scene::update(float deltaT) 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); } } - - //for (auto i = SceneObjects.begin(); i != SceneObjects.end(); ++i) - //{ - // auto j = i; - // for (j++; j != SceneObjects.end(); ++j) - // { - // SceneObject::checkCollision(*i, *j); - // } - //} - } else { @@ -261,7 +206,7 @@ void Scene::addObject(SceneObject* _add) //bt_collision_world->addCollisionObject(*_add); bt_collision_world->addCollisionObject(*_add,_add->getCollideGroup(),_add->getCollideWith()); -// _add->setMainScene(this); + _add->setMainScene(this); } void Scene::deleteObject(SceneObject* _del) @@ -279,4 +224,9 @@ list* Scene::getSceneObjects() void Scene::setLookAt(SceneObject* _lookat) { lookat = _lookat; +} + +ViewPort& Scene::getViewport() +{ + return viewPort; } \ No newline at end of file diff --git a/Weave/Scene/Scene.h b/Weave/Scene/Scene.h index c7c7540..3a5904e 100644 --- a/Weave/Scene/Scene.h +++ b/Weave/Scene/Scene.h @@ -33,6 +33,7 @@ public: std::list* getSceneObjects(); void setLookAt(SceneObject* _lookat); + ViewPort& getViewport(); protected: ViewPort viewPort; @@ -42,8 +43,6 @@ protected: std::list SceneObjects; std::set ShaderSet; - float move_delta; - float currenttime; std::stack timestamps; //std::stack PlayerModels; diff --git a/Weave/Scene/SceneObject.cpp b/Weave/Scene/SceneObject.cpp index 4fe73ed..e76ec52 100644 --- a/Weave/Scene/SceneObject.cpp +++ b/Weave/Scene/SceneObject.cpp @@ -181,11 +181,10 @@ void SceneObject::collides(SceneObject* _other, btPersistentManifold* _contactMa //Get the contact information btManifoldPoint& pt = _contactManifold->getContactPoint(j); btVector3 ptA = pt.getPositionWorldOnA(); - btVector3 ptB = pt.getPositionWorldOnB(); pdist = min((double)pt.getDistance(),pdist); } - if (!ignore && !_other->ignore) + if (!ignore && !_other->ignore && pdist <= 0) Message::info((std::string)"Kollision! " + std::to_string(pdist) + " (" + (std::string)*model + " with " + (std::string)*_other->getModel() + ")"); }