From 511551fea824bbf5196e7b97f724c8eb485e2b02 Mon Sep 17 00:00:00 2001 From: Peter Schaefer Date: Thu, 23 Apr 2015 22:43:14 +0200 Subject: [PATCH] more realistic jump features --- Weave/Graphix/Scene.cpp | 6 +++-- Weave/Graphix/SceneObject.cpp | 44 ++++++++++++++++++++++------------- Weave/Graphix/SceneObject.h | 3 +++ 3 files changed, 35 insertions(+), 18 deletions(-) diff --git a/Weave/Graphix/Scene.cpp b/Weave/Graphix/Scene.cpp index 16d497f..de193a8 100644 --- a/Weave/Graphix/Scene.cpp +++ b/Weave/Graphix/Scene.cpp @@ -92,8 +92,10 @@ void Scene::update(float deltaT) viewPort->rotateView(0.002f*Events::getViewX(), 0.001f*Events::getViewY()); //Jump - if (Events::getJump()) - lookat->ySpeed = 20; + if (Events::getJump() && lookat->floorBound()) + lookat->ySpeed += 5.5; + //else if (!Events::isKHeld(SDLK_SPACE) && lookat->ySpeed>0) + // lookat->ySpeed = 0; // MOVE Player if (move_x) diff --git a/Weave/Graphix/SceneObject.cpp b/Weave/Graphix/SceneObject.cpp index 57136de..5a53562 100644 --- a/Weave/Graphix/SceneObject.cpp +++ b/Weave/Graphix/SceneObject.cpp @@ -24,7 +24,7 @@ using std::cout; using std::endl; -#define YFALL_SPEED 9.f +#define YFALL_SPEED 9.8f SceneObject::SceneObject(Shader* _shader, mat4& _modelMat, string _modelpath, string texturepath, unsigned int _model_index) : model(new IMetaMesh(_modelpath)), @@ -38,15 +38,15 @@ yStatic(true) { //Message::info("Error from befor?"); //Graphix::getGlError(); -// new IMetaMesh(_modelpath); + // new IMetaMesh(_modelpath); //Message::info("Creating modelMat"); //Graphix::getGlError(); //modelID = _shader->getUniformLocation("modelMat"); - if (texturepath!="") + if (texturepath != "") texture = new Texture(texturepath); //Message::info("Creating SkyBox Shader"); //Graphix::getGlError(); - + model->bindShader(shader); //Message::info("Binding Shader"); //Graphix::getGlError(); @@ -100,7 +100,7 @@ yStatic(true) SceneObject::~SceneObject() { -// delete texture; + // delete texture; } void SceneObject::update(float deltaT) @@ -109,14 +109,18 @@ void SceneObject::update(float deltaT) if (!yStatic) { vec3 pos = getPosition(); - if (pos.y > 0 || ySpeed>0) //Aktuelle Bodenhöhe + if (!floorBound() || ySpeed > 0) //Aktuelle Bodenhöhe { modelMat = translate(vec3(0.f, ySpeed*deltaT, 0.f))*modelMat; ySpeed -= deltaT*YFALL_SPEED; } + else if(floorBound()) + { + ySpeed = 0; + } } - + //modelMat = scale(modelMat, vec3(matter)); //modelMat = (deltaT * spin) * modelMat; //TODO drehen scheint nicht zu funktionieren @@ -125,15 +129,15 @@ void SceneObject::update(float deltaT) void SceneObject::draw() const { -// useModel(shader); + // useModel(shader); -// useTexture(texture, shader); + // useTexture(texture, shader); -// useMMatrix(modelMat,shader); + // useMMatrix(modelMat,shader); -// glUniform1i(shader->getUniformLocation ("inv"), 1); - -// drawModel(); + // glUniform1i(shader->getUniformLocation ("inv"), 1); + + // drawModel(); model->drawModel(shader, texture, modelMat); if (Events::isKToggleActive(SDLK_F6)) @@ -147,7 +151,15 @@ void SceneObject::collisions(SceneObject* _other) } -vec3 SceneObject::getPosition() const{ +bool SceneObject::floorBound() const +{ + vec3 pos = getPosition(); + return (pos.y < 0); + //TODO real Floor? +} + +vec3 SceneObject::getPosition() const +{ return vec3(modelMat[3]); } @@ -171,8 +183,8 @@ void SceneObject::turnTo(vec3& direction, float speed){ if (abs(rot_angle) / M_PI > speed) perc = speed / abs(rot_angle) * M_PI; - - modelMat = rotate(rot_angle *perc , vec3(0.f, 1.f, 0.f)) * modelMat; + + modelMat = rotate(rot_angle *perc, vec3(0.f, 1.f, 0.f)) * modelMat; modelMat = translate(pos) * modelMat; } diff --git a/Weave/Graphix/SceneObject.h b/Weave/Graphix/SceneObject.h index 97e5ca6..6efaa75 100644 --- a/Weave/Graphix/SceneObject.h +++ b/Weave/Graphix/SceneObject.h @@ -55,6 +55,9 @@ public: __declspec(deprecated) bool isEnemy(); + + bool floorBound() const; + bool yStatic; float ySpeed; -- 2.47.3