fixed timestep working
This commit is contained in:
+21
-1
@@ -100,7 +100,7 @@ public:
|
|||||||
{
|
{
|
||||||
auto ent = m_World->CreateEntity();
|
auto ent = m_World->CreateEntity();
|
||||||
std::shared_ptr<Components::Transform> transform = m_World->AddComponent<Components::Transform>(ent);
|
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->Scale = glm::vec3(8.f, 0.5f, 1.f);
|
||||||
transform->Orientation = glm::rotate(transform->Orientation, glm::radians(25.f), glm::vec3(0, 0, -1));
|
transform->Orientation = glm::rotate(transform->Orientation, glm::radians(25.f), glm::vec3(0, 0, -1));
|
||||||
|
|
||||||
@@ -115,6 +115,26 @@ public:
|
|||||||
m_World->CommitEntity(ent);
|
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();
|
m_LastTime = glfwGetTime();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -55,6 +55,8 @@ private:
|
|||||||
b2Vec2 m_Gravity;
|
b2Vec2 m_Gravity;
|
||||||
b2World* m_PhysicsWorld;
|
b2World* m_PhysicsWorld;
|
||||||
float m_TimeStep;
|
float m_TimeStep;
|
||||||
|
float m_Accumulator;
|
||||||
|
|
||||||
int m_VelocityIterations, m_PositionIterations;
|
int m_VelocityIterations, m_PositionIterations;
|
||||||
|
|
||||||
std::unordered_map<EntityID, b2Body*> m_EntitiesToBodies;
|
std::unordered_map<EntityID, b2Body*> m_EntitiesToBodies;
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ void dd::Systems::PhysicsSystem::Initialize()
|
|||||||
m_TimeStep = 1.f/60.f;
|
m_TimeStep = 1.f/60.f;
|
||||||
m_VelocityIterations = 6;
|
m_VelocityIterations = 6;
|
||||||
m_PositionIterations = 2;
|
m_PositionIterations = 2;
|
||||||
|
m_Accumulator = 0.f;
|
||||||
|
|
||||||
m_PhysicsWorld->SetContactListener(m_ContactListener);
|
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) {
|
for (auto i : m_EntitiesToBodies) {
|
||||||
EntityID entity = i.first;
|
EntityID entity = i.first;
|
||||||
|
|||||||
Reference in New Issue
Block a user