From e89398a5d2b8bdb142ebbce084a2d4d99c2fbd28 Mon Sep 17 00:00:00 2001 From: LockedLunatic Date: Tue, 2 Jun 2015 05:59:53 +0200 Subject: [PATCH] y_speed is saved in timestamps --- Weave/Scene/Scene.cpp | 57 +++++++++++++++++++++++++------------ Weave/Scene/Scene.h | 4 +-- Weave/Scene/Timestamp.cpp | 15 ++++++++++ Weave/Scene/Timestamp.h | 16 +++++++++++ Weave/Weave.vcxproj | 2 ++ Weave/Weave.vcxproj.filters | 6 ++++ 6 files changed, 80 insertions(+), 20 deletions(-) create mode 100644 Weave/Scene/Timestamp.cpp create mode 100644 Weave/Scene/Timestamp.h diff --git a/Weave/Scene/Scene.cpp b/Weave/Scene/Scene.cpp index aa7dabb..6f0cfd8 100644 --- a/Weave/Scene/Scene.cpp +++ b/Weave/Scene/Scene.cpp @@ -34,7 +34,9 @@ viewPort(x, y, width, height, fovy, zNear, zFar), lookat(_lookat), move_delta(0) { - currenttime = 0; + currenttime = 0.0f; + if (lookat != nullptr) + timestamps.push(Timestamp(0.0f, _lookat->getModelMat(), x, lookat->ySpeed)); } @@ -46,6 +48,7 @@ Scene::~Scene() delete (*i); } + timestamps.empty(); @@ -68,19 +71,13 @@ void Scene::update(float deltaT) } // XYAchse um den Player - viewPort.rotateView(0.002f*Events::getViewX(), 0.001f*Events::getViewY()); + float rotatex = 0.002f*Events::getViewX(); + float rotatey = 0.001f*Events::getViewY(); + viewPort.rotateView(rotatex, rotatey); if (!Events::getTimeShift()) { - if (ceil((currenttime + deltaT) / timestep) > ceil(currenttime / timestep)) - { - PlayerModels.push(lookat->getModelMat()); - } - currenttime += deltaT; - - - int move_x = Events::getMoveX(); int move_y = Events::getMoveY(); //int shoot = Events::getAction1(); @@ -92,6 +89,18 @@ void Scene::update(float deltaT) //else if (!Events::isKHeld(SDLK_SPACE) && lookat->ySpeed>0) // lookat->ySpeed = 0; + + + + if (ceil((currenttime + deltaT) / timestep) > ceil(currenttime / timestep)) + { + timestamps.push(Timestamp(currenttime, lookat->getModelMat(), viewPort.getXPos(), lookat->ySpeed)); + } + currenttime += deltaT; + + + + // MOVE Player if (move_x) lookat->move(SPEED_MOVE_NORMAL *move_x * deltaT * viewPort.rotateDirection(vec3(-1.f, 0.f, 0.f))); @@ -148,20 +157,32 @@ void Scene::update(float deltaT) } else { - if (ceil(max(0.0f, currenttime - deltaT) / timestep) < ceil(currenttime / timestep) && !PlayerModels.empty()) + float prev_time = timestamps.top().time; + mat4 prev_mat = timestamps.top().Playermodel; + unsigned int prev_camera = timestamps.top().CameraX; + int prev_ySpeed = timestamps.top().ySpeed; + while (max(0.0f, currenttime - deltaT) < prev_time) { - mat4& tmp = PlayerModels.top(); - PlayerModels.pop(); - lookat->setModel(tmp); + timestamps.pop(); + + prev_time = timestamps.top().time; + prev_mat = timestamps.top().Playermodel; + prev_camera = timestamps.top().CameraX; + prev_ySpeed = timestamps.top().ySpeed; } - //for (auto i = SceneObjects.begin(); i != SceneObjects.end(); ++i) - //{ - // (*i)->update(-deltaT); - //} //TODO revert events //TODO go from keyframe to current time + lookat->setModel(prev_mat); + lookat->ySpeed = prev_ySpeed; + + + for (auto i = SceneObjects.begin(); i != SceneObjects.end(); ++i) + { + //(*i)->update(-max(0.0f, currenttime - deltaT)); + } + currenttime = max(0.0f, currenttime - deltaT); } diff --git a/Weave/Scene/Scene.h b/Weave/Scene/Scene.h index d84571c..b5a5644 100644 --- a/Weave/Scene/Scene.h +++ b/Weave/Scene/Scene.h @@ -4,6 +4,7 @@ #include "../Graphix/ViewPort.h" #include "Sky.h" +#include "Timestamp.h" #include #include @@ -43,6 +44,5 @@ protected: float move_delta; float currenttime; - std::stack PlayerModels; - //std::stack PlayerDirections; + std::stack timestamps; }; diff --git a/Weave/Scene/Timestamp.cpp b/Weave/Scene/Timestamp.cpp new file mode 100644 index 0000000..e6d32e5 --- /dev/null +++ b/Weave/Scene/Timestamp.cpp @@ -0,0 +1,15 @@ +#include "Timestamp.h" + +Timestamp::Timestamp(float _time, mat4& _Playermodel, unsigned int x, float _ySpeed) : +time(_time), +Playermodel(_Playermodel), +CameraX(x), +ySpeed(_ySpeed) +{ + +} + +Timestamp::~Timestamp() +{ + +} \ No newline at end of file diff --git a/Weave/Scene/Timestamp.h b/Weave/Scene/Timestamp.h new file mode 100644 index 0000000..88350df --- /dev/null +++ b/Weave/Scene/Timestamp.h @@ -0,0 +1,16 @@ +#pragma once + +#include "../GLM.h" + +class Timestamp +{ +public: + Timestamp(float _time, mat4& _Playermodel, unsigned int _Camera, float ySpeed); + + virtual ~Timestamp(); + + float time; + mat4 Playermodel; + unsigned int CameraX; + float ySpeed; +}; \ No newline at end of file diff --git a/Weave/Weave.vcxproj b/Weave/Weave.vcxproj index 43bd48f..9539f8d 100644 --- a/Weave/Weave.vcxproj +++ b/Weave/Weave.vcxproj @@ -113,6 +113,7 @@ + @@ -138,6 +139,7 @@ + diff --git a/Weave/Weave.vcxproj.filters b/Weave/Weave.vcxproj.filters index b03e930..bf01bec 100644 --- a/Weave/Weave.vcxproj.filters +++ b/Weave/Weave.vcxproj.filters @@ -78,6 +78,9 @@ Source Files + + Source Files + @@ -149,5 +152,8 @@ Header Files + + Header Files + \ No newline at end of file -- 2.47.3