lookat(_lookat),
move_delta(0)
{
- currenttime = 0;
+ currenttime = 0.0f;
+ if (lookat != nullptr)
+ timestamps.push(Timestamp(0.0f, _lookat->getModelMat(), x, lookat->ySpeed));
}
delete (*i);
}
+ timestamps.empty();
}
// 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();
//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)));
}
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);
}
<ClCompile Include="main.cpp" />
<ClCompile Include="Message.cpp" />
<ClCompile Include="Scene\Sky.cpp" />
+ <ClCompile Include="Scene\Timestamp.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="Average.h" />
<ClInclude Include="Graphix\ViewPort.h" />
<ClInclude Include="Message.h" />
<ClInclude Include="Scene\Sky.h" />
+ <ClInclude Include="Scene\Timestamp.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
<ClCompile Include="GLM.cpp">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="Scene\Timestamp.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="Fps.h">
<ClInclude Include="GLM.h">
<Filter>Header Files</Filter>
</ClInclude>
+ <ClInclude Include="Scene\Timestamp.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
</ItemGroup>
</Project>
\ No newline at end of file