fixed timestep working

This commit is contained in:
viktorljung
2015-09-14 14:59:39 +01:00
parent 586f8d438c
commit c7704f62e9
3 changed files with 41 additions and 3 deletions
+21 -1
View File
@@ -100,7 +100,7 @@ public:
{
auto ent = m_World->CreateEntity();
std::shared_ptr<Components::Transform> transform = m_World->AddComponent<Components::Transform>(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<Components::Transform> transform = m_World->AddComponent<Components::Transform>(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<Components::Sprite> sprite = m_World->AddComponent<Components::Sprite>(ent);
sprite->SpriteFile = "Textures/Core/ErrorTexture.png";
std::shared_ptr<Components::RectangleShape> boxShape = m_World->AddComponent<Components::RectangleShape>(ent);
std::shared_ptr<Components::Physics> physics = m_World->AddComponent<Components::Physics>(ent);
physics->Static = true;
m_World->CommitEntity(ent);
}
m_LastTime = glfwGetTime();
}
+2
View File
@@ -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<EntityID, b2Body*> m_EntitiesToBodies;
+18 -2
View File
@@ -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;