From c7704f62e9bf616e3d786be66f041ba900fb3ebd Mon Sep 17 00:00:00 2001 From: viktorljung Date: Mon, 14 Sep 2015 14:59:39 +0100 Subject: [PATCH] fixed timestep working --- include/Core/Engine.h | 22 +++++++++++++++++++++- include/Physics/PhysicsSystem.h | 2 ++ src/game/Physics/PhysicsSystem.cpp | 20 ++++++++++++++++++-- 3 files changed, 41 insertions(+), 3 deletions(-) diff --git a/include/Core/Engine.h b/include/Core/Engine.h index 1126c43..5eb143f 100644 --- a/include/Core/Engine.h +++ b/include/Core/Engine.h @@ -100,7 +100,7 @@ public: { auto ent = m_World->CreateEntity(); std::shared_ptr transform = m_World->AddComponent(ent); - transform->Position = glm::vec3(0.f, -3.f, -9.f); + transform->Position = glm::vec3(0.f, -2.f, -10.f); transform->Scale = glm::vec3(8.f, 0.5f, 1.f); transform->Orientation = glm::rotate(transform->Orientation, glm::radians(25.f), glm::vec3(0, 0, -1)); @@ -115,6 +115,26 @@ public: m_World->CommitEntity(ent); } + + { + auto ent = m_World->CreateEntity(); + std::shared_ptr transform = m_World->AddComponent(ent); + transform->Position = glm::vec3(-2.f, -1.f, -10.f); + transform->Scale = glm::vec3(0.5f, 8.5f, 1.f); + //transform->Orientation = glm::rotate(transform->Orientation, glm::radians(25.f), glm::vec3(0, 0, -1)); + + std::shared_ptr sprite = m_World->AddComponent(ent); + sprite->SpriteFile = "Textures/Core/ErrorTexture.png"; + + std::shared_ptr boxShape = m_World->AddComponent(ent); + + std::shared_ptr physics = m_World->AddComponent(ent); + physics->Static = true; + + m_World->CommitEntity(ent); + } + + m_LastTime = glfwGetTime(); } diff --git a/include/Physics/PhysicsSystem.h b/include/Physics/PhysicsSystem.h index 6754a1a..3d1ece8 100644 --- a/include/Physics/PhysicsSystem.h +++ b/include/Physics/PhysicsSystem.h @@ -55,6 +55,8 @@ private: b2Vec2 m_Gravity; b2World* m_PhysicsWorld; float m_TimeStep; + float m_Accumulator; + int m_VelocityIterations, m_PositionIterations; std::unordered_map m_EntitiesToBodies; diff --git a/src/game/Physics/PhysicsSystem.cpp b/src/game/Physics/PhysicsSystem.cpp index 8303f0f..7d502d8 100644 --- a/src/game/Physics/PhysicsSystem.cpp +++ b/src/game/Physics/PhysicsSystem.cpp @@ -18,7 +18,7 @@ void dd::Systems::PhysicsSystem::Initialize() m_TimeStep = 1.f/60.f; m_VelocityIterations = 6; m_PositionIterations = 2; - + m_Accumulator = 0.f; m_PhysicsWorld->SetContactListener(m_ContactListener); @@ -62,7 +62,23 @@ void dd::Systems::PhysicsSystem::Update(double dt) } } - m_PhysicsWorld->Step(m_TimeStep, m_VelocityIterations, m_PositionIterations); + + + + m_Accumulator += dt; + while(m_Accumulator >= m_TimeStep) + { + m_PhysicsWorld->Step(m_TimeStep, m_VelocityIterations, m_PositionIterations); + m_Accumulator -= dt; + } + + + + + + + + for (auto i : m_EntitiesToBodies) { EntityID entity = i.first;