]> git.leopard-lacewing.eu Git - cgue_weave.git/commitdiff
more realistic jump features
authorPeter Schaefer <schaeferpm@gmail.com>
Thu, 23 Apr 2015 20:43:14 +0000 (22:43 +0200)
committerPeter Schaefer <schaeferpm@gmail.com>
Thu, 23 Apr 2015 20:43:14 +0000 (22:43 +0200)
Weave/Graphix/Scene.cpp
Weave/Graphix/SceneObject.cpp
Weave/Graphix/SceneObject.h

index 16d497f9076cd8ad8fc383bd9d72fd5598ca2bce..de193a84266f04483a48c34b91450cea2d78bb5c 100644 (file)
@@ -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)
index 57136dec57eba1a0ec8660bc3d9fc1afb2e239c2..5a53562c7a16abc99a02051943b189a255c498ed 100644 (file)
@@ -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;
 }
 
index 97e5ca6a4f3774b262838cefcdb84d2907c2840b..6efaa75fe2a615eb9a5fffcebe6e65ea0e9c2515 100644 (file)
@@ -55,6 +55,9 @@ public:
        __declspec(deprecated)
        bool isEnemy();
 
+
+       bool floorBound() const;
+
        bool yStatic;
        float ySpeed;