From 586f8d438c6e8678f48249a60ba750e6d1c2c958 Mon Sep 17 00:00:00 2001 From: viktorljung Date: Fri, 11 Sep 2015 11:04:22 +0100 Subject: [PATCH 1/2] changed box size/scale --- include/Core/Engine.h | 2 +- src/game/Physics/PhysicsSystem.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/include/Core/Engine.h b/include/Core/Engine.h index 2a8576a..1126c43 100644 --- a/include/Core/Engine.h +++ b/include/Core/Engine.h @@ -101,7 +101,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->Scale = glm::vec3(2.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)); std::shared_ptr sprite = m_World->AddComponent(ent); diff --git a/src/game/Physics/PhysicsSystem.cpp b/src/game/Physics/PhysicsSystem.cpp index 9905cbd..8303f0f 100644 --- a/src/game/Physics/PhysicsSystem.cpp +++ b/src/game/Physics/PhysicsSystem.cpp @@ -147,7 +147,7 @@ void dd::Systems::PhysicsSystem::CreateBody(EntityID entity) auto boxComponent = m_World->GetComponent(entity); if (boxComponent) { b2PolygonShape* bShape = new b2PolygonShape(); - bShape->SetAsBox(absoluteTransform.Scale.x/4, absoluteTransform.Scale.y/4); //TODO: THIS SUCKS DUDE 4?!?!?!? + bShape->SetAsBox(absoluteTransform.Scale.x/2, absoluteTransform.Scale.y/2); //TODO: THIS SUCKS DUDE 4?!?!?!? pShape = bShape; } else { auto circleComponent = m_World->GetComponent(entity); @@ -159,7 +159,7 @@ void dd::Systems::PhysicsSystem::CreateBody(EntityID entity) if (absoluteTransform.Scale.x != absoluteTransform.Scale.y && absoluteTransform.Scale.y != absoluteTransform.Scale.z) { LOG_WARNING("Circles has to be of uniform scale."); } - pShape->m_radius = absoluteTransform.Scale.x/4; //TODO: THIS ALSO SUCKS 4 WTH + pShape->m_radius = absoluteTransform.Scale.x/2; //TODO: THIS ALSO SUCKS 4 WTH } } From c7704f62e9bf616e3d786be66f041ba900fb3ebd Mon Sep 17 00:00:00 2001 From: viktorljung Date: Mon, 14 Sep 2015 14:59:39 +0100 Subject: [PATCH 2/2] 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;