]> git.leopard-lacewing.eu Git - cgue_weave.git/commitdiff
jump and fall works
authorPeter Schaefer <schaeferpm@gmail.com>
Fri, 12 Jun 2015 13:31:47 +0000 (15:31 +0200)
committerPeter Schaefer <schaeferpm@gmail.com>
Fri, 12 Jun 2015 13:31:47 +0000 (15:31 +0200)
wrong collision Meshes!

12 files changed:
Weave/Game.cpp
Weave/Scene.h
Weave/Scene/Level.cpp [new file with mode: 0644]
Weave/Scene/Level.h [new file with mode: 0644]
Weave/Scene/Marvin.cpp
Weave/Scene/Scene.cpp
Weave/Scene/SceneObject.cpp
Weave/Scene/SceneObject.h
Weave/Scene/Sky.cpp
Weave/Scene/Sky.h
Weave/Weave.vcxproj
Weave/Weave.vcxproj.filters

index e3c18e51324b018e5c421d53c152113b397146d9..320b83fd0423ed43d6c3eaa7efba9d9288fefaaf 100644 (file)
@@ -48,13 +48,11 @@ Game::Game() : playing(true)
 
        // load LVL
 
-       SceneObject* tmp_world = new SceneObject(shader1, mat4(1.f), vec4(4.0f, 1.0f, 1.0f, 2.0f), "level_test.dae", "model_levelTest_2D.jpg");
+       SceneObject* tmp_world = new Level(shader1, "level_test.dae", "model_levelTest_2D.jpg");
 
-       tmp_world->ignore = true;
+       //tmp_world->ignore = true;
        current_world->addObject(tmp_world);
 
-       float test = tmp_world->getModel()->getPDistHit(vec3(3.f, 3.f, 4.f), vec3(0.f, -1.f, 0.f));
-
 //     current_world->addObject(new SceneObject(shader1, translate(vec3(-3.f, 1.f, 0.f)), vec4(1.0f, 1.0f, 1.0f, 3.0f), new BBox(), ""));
 
        //Player
index 5405d0b1ea62b0851fd6fd4ceaa1a5e1cba53650..21acdb139211c1a0946895cffba30bcef1f27435 100644 (file)
@@ -5,4 +5,5 @@
 #include "Scene/EventBox.h"
 #include "Scene/Marvin.h"
 #include "Scene/Sky.h"
+#include "Scene/Level.h"
 
diff --git a/Weave/Scene/Level.cpp b/Weave/Scene/Level.cpp
new file mode 100644 (file)
index 0000000..18566cc
--- /dev/null
@@ -0,0 +1,40 @@
+#include "Level.h"
+
+#include "../Graphix/Shader.h"
+#include "../Graphix/Model.h"
+
+#include "../Message.h"
+#include "../GLM.h"
+
+
+Level::Level(Shader* _shader, std::string _modelpath, std::string _texturepath) : SceneObject(_shader, mat4(1.f), vec4(1.f), _modelpath, _texturepath)
+{
+       collide_group = COL_LEVEL;
+       collide_with = COL_MARVIN | COL_ENEMY;
+}
+
+
+Level::~Level()
+{
+}
+
+void Level::collides(SceneObject* _other, btPersistentManifold* _contactManifold)
+{
+       int numContacts = _contactManifold->getNumContacts();
+       //For each contact point in that manifold
+       //double pdist = _contactManifold->getContactPoint(0).getDistance();
+       for (int j = 0; j < numContacts; j++) {
+               //Get the contact information
+               btManifoldPoint& pt = _contactManifold->getContactPoint(j);
+               btVector3 ptN = pt.m_normalWorldOnB;
+               _other->yFloorDist = (double)pt.getDistance() * abs(dot(vec3(0.f, 1.f, 0.f), vec3(ptN.getX(), ptN.getY(), ptN.getZ())));
+               //btVector3 ptA = pt.getPositionWorldOnA();
+               //pdist = min((double)pt.getDistance(), pdist);
+       }
+
+       if (_other->yFloorDist <= 0 && _other->ySpeed<0)
+               _other->ySpeed = 0;
+
+       Message::info((std::string)"Kollision! " + std::to_string(_other->yFloorDist) + " (LVL with " + (std::string)*_other->getModel() + ")");
+
+}
\ No newline at end of file
diff --git a/Weave/Scene/Level.h b/Weave/Scene/Level.h
new file mode 100644 (file)
index 0000000..8caae54
--- /dev/null
@@ -0,0 +1,17 @@
+#pragma once
+#include "SceneObject.h"
+
+#include "../GLM.h"
+
+class Shader;
+
+class Level :
+       public SceneObject
+{
+public:
+       Level(Shader* shader,std::string modelpath, std::string texturepath);
+       ~Level();
+
+       virtual void collides(SceneObject* other, btPersistentManifold* contactManifold) override;
+};
+
index 1fe40a50c03b037c86dea711c8212abd4f5b1062..fe38a2a0146591f233fd91bcaa53ae11f7aa76cd 100644 (file)
@@ -36,7 +36,7 @@ void Marvin::update(float deltaT)
        viewPort.rotateView(rotatex, rotatey);
 
        //Jump
-       if (Events::getJump() && floorBound())
+       if (Events::getJump() && yFloorDist<=0)
                ySpeed += 5.5;
 
        int move_x = Events::getMoveX();
index 0736c423c704abc47b7db215963531346d6016fd..283cfbfe8e4e9706f0c0b6bcc9934b7452c43390 100644 (file)
@@ -77,24 +77,11 @@ Scene::~Scene()
 
 void Scene::update(float deltaT)
 {
-       // XYAchse um den Player
-
 
 
        if (!Events::getTimeShift())
        {
 
-               //int shoot = Events::getAction1();
-               //int reset = Events::getAction2();
-
-               //Jump
-               //if (Events::getJump() && lookat->floorBound())
-               //      lookat->ySpeed += 5.5;
-               //else if (!Events::isKHeld(SDLK_SPACE) && lookat->ySpeed>0)
-               //      lookat->ySpeed  = 0;
-
-
-
 
                if (ceil((currenttime + deltaT) / timestep) > ceil(currenttime / timestep))
                {
@@ -102,18 +89,6 @@ void Scene::update(float deltaT)
                }
                currenttime += deltaT;
 
-
-               //// Zoom auf Player
-               //if (Events::getViewZ())
-               //{
-               ////    float dist = 0;
-               ////    if (lookat!=NULL)
-               ////            dist = VektorAbs(getViewerPos() - lookat->getPosition());
-               ////    if (true)
-               //      view = translate( vec3(0.f,0.f,(float)(5*deltaT *sign(Events::getViewZ()))))*view;
-               //      //view = view*scale(vec3((float)(1 + deltaT * sign(Events::getViewZ()))));
-               //}
-
                // Alle Objekte der Scene aktualisieren
                for (auto i = SceneObjects.begin(); i != SceneObjects.end(); ++i)
                {
@@ -122,7 +97,6 @@ void Scene::update(float deltaT)
 
                bt_collision_world->performDiscreteCollisionDetection();
 
-
                int numManifolds = bt_collision_world->getDispatcher()->getNumManifolds();
                //For each contact manifold
                for (int i = 0; i < numManifolds; i++) {
@@ -172,7 +146,6 @@ void Scene::update(float deltaT)
                currenttime = max(0.0f, currenttime - deltaT);
        }
 
-
 }
 
 
index e76ec52978daa236fbc94faabfd8180fab1f0542..96598379b7bb979106b681697a82145d52878c96 100644 (file)
@@ -30,6 +30,7 @@ collision_ignore(false),
 texture(nullptr),
 ySpeed(0),
 yStatic(true),
+yFloorDist(INFINITY),
 ignore(false),
 newModel(true),
 collide_group(0),
@@ -55,7 +56,7 @@ bt_collision_object(new btCollisionObject())
        if (texturepath == "model_duck_2D.png")
        {
                collide_group = COL_ENEMY;
-               collide_with = COL_MARVIN | COL_LEVEL;
+               collide_with = COL_MARVIN;// | COL_LEVEL;
        }
        //Message::info("Creating SkyBox Shader");
        //Graphix::getGlError();
@@ -78,6 +79,7 @@ collision_ignore(false),
 texture(nullptr),
 ySpeed(0),
 yStatic(true),
+yFloorDist(INFINITY),
 ignore(false),
 newModel(false),
 collide_group(0),
@@ -119,10 +121,6 @@ SceneObject::~SceneObject()
 
 }
 
-float SceneObject::getFloor() const
-{ 
-       return 0;
-}
 
 void SceneObject::update(float deltaT)
 {
@@ -130,14 +128,13 @@ void SceneObject::update(float deltaT)
        //Fallen
        if (!yStatic)
        {
-               vec3 pos = getPosition();
-               if (!floorBound() || ySpeed!=0)
+               if (yFloorDist>0 || ySpeed!=0)
                {
-                       if (pos.y + ySpeed*deltaT > getFloor())
+                       if (ySpeed*deltaT < yFloorDist || ySpeed>0)
                                modelMat = translate(vec3(0.f, ySpeed*deltaT, 0.f))*modelMat;
                        else
                        {
-                               modelMat = translate(vec3(0.f, getFloor() - pos.y, 0.f))*modelMat;
+                               modelMat = translate(vec3(0.f, yFloorDist, 0.f))*modelMat;
                                ySpeed = 0;     //set to FloorSpeed?
                        }
                        ySpeed -= deltaT*YFALL_SPEED;
@@ -146,12 +143,10 @@ void SceneObject::update(float deltaT)
        }
 
 
-       //modelMat = scale(modelMat, vec3(matter));
-       //modelMat = (deltaT * spin) * modelMat; //TODO drehen scheint nicht zu funktionieren
-
        btTransform tmp;
        tmp.setFromOpenGLMatrix(value_ptr(modelMat));
        bt_collision_object->setWorldTransform(tmp);
+       yFloorDist = INFINITY;
 }
 
 void SceneObject::draw() const
@@ -189,11 +184,6 @@ void SceneObject::collides(SceneObject* _other, btPersistentManifold* _contactMa
 
 }
 
-bool SceneObject::floorBound() const
-{
-       vec3 pos = getPosition();
-       return (pos.y <= getFloor());
-}
 
 vec3 SceneObject::getPosition() const
 {
index f49c4e66778fbc74f92ad56d953811dbac4762f7..8642b1a8bcf8b8dd736efb5c28d4dd6665958474 100644 (file)
@@ -36,7 +36,7 @@ public:
        virtual void update(float);
        virtual void draw() const;
 
-       virtual void collides(SceneObject* other, btPersistentManifold* contactManifold = nullptr);
+       virtual void collides(SceneObject* other, btPersistentManifold* contactManifold);
 
        virtual vec3 getPosition() const;
 
@@ -66,11 +66,6 @@ public:
        __declspec(deprecated)
        bool isEnemy();
 
-       //Floor
-       bool floorBound() const;
-       float getFloor() const;
-
-
        operator btCollisionObject*() const;
        short getCollideGroup() const;
        short getCollideWith() const;
@@ -78,6 +73,7 @@ public:
        //Falling
        bool yStatic;
        float ySpeed;
+       float yFloorDist;
 
        bool ignore;
 
index 0dec929e481264869535c7ac264eefc6460ca8d1..604aa6727b1bfc41ca26d307fac598e2b1a674ba 100644 (file)
@@ -16,3 +16,7 @@ Sky::Sky() : SceneObject(new Shader("skybox_VS.hlsl","basicTexture_FS.hlsl"), sc
 Sky::~Sky()
 {
 }
+
+void Sky::update(float deltaT)
+{
+}
\ No newline at end of file
index 7b108ede96c699bf3fcb62d72d86a9db9f5bd2b7..0fcddd27f60160c30679bee7fe1d461abe79f1a4 100644 (file)
@@ -11,5 +11,7 @@ class Sky :
 public:
        Sky();
        ~Sky();
+
+       virtual void update(float) override;
 };
 
index 2f7d3c89a04a79c990be6e22b2be8af2d40760a5..398fcde7ad660ca51fab8bc9e9e1d8658d62e9b6 100644 (file)
     <ClCompile Include="Graphix\Model\SkyBox.cpp" />
     <ClCompile Include="Overlap.cpp" />
     <ClCompile Include="Scene\EventBox.cpp" />
+    <ClCompile Include="Scene\Level.cpp" />
     <ClCompile Include="Scene\Marvin.cpp" />
     <ClCompile Include="Scene\Scene.cpp" />
     <ClCompile Include="Scene\SceneObject.cpp" />
     <ClInclude Include="Overlap.h" />
     <ClInclude Include="Scene.h" />
     <ClInclude Include="Scene\EventBox.h" />
+    <ClInclude Include="Scene\Level.h" />
     <ClInclude Include="Scene\Marvin.h" />
     <ClInclude Include="Scene\Scene.h" />
     <ClInclude Include="Scene\SceneObject.h" />
index bf01bec4ea67d7b66a249ac8816352c7dbc7279d..b91c173c8cb99124c667881a9bff8062d8f94b62 100644 (file)
@@ -81,6 +81,9 @@
     <ClCompile Include="Scene\Timestamp.cpp">
       <Filter>Source Files</Filter>
     </ClCompile>
+    <ClCompile Include="Scene\Level.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="Fps.h">
     <ClInclude Include="Scene\Timestamp.h">
       <Filter>Header Files</Filter>
     </ClInclude>
+    <ClInclude Include="Scene\Level.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
   </ItemGroup>
 </Project>
\ No newline at end of file