#include "PhysicsEngine.hpp" #include "utils/Time.hpp" void TSE::PhysicsEngine::InitPhysics(Vector2 gravity) { b2WorldDef def = b2DefaultWorldDef(); def.enableSleep = true; b2Vec2 grav; grav.x = gravity.x; grav.y = gravity.y; def.gravity = grav; worldId = b2CreateWorld(&def); } void TSE::PhysicsEngine::UpdatePhysics() { if(elapsedTime >= timestep) { elapsedTime = 0; b2World_Step(worldId, timestep, iterations); //update physics objects } elapsedTime += Time::deltaTime(); for(auto obj : registeredObjects) { obj->UpdatePosition(); } } void TSE::PhysicsEngine::DeletePhysics() { b2DestroyWorld(worldId); } void TSE::PhysicsEngine::RegisterPhysicsObject(PhysicsObject *obj) { registeredObjects.push_back(obj); } void TSE::PhysicsEngine::UnRegisterPhysicsObject(PhysicsObject *obj) { auto it = registeredObjects.begin(); for (; it != registeredObjects.end(); it++) { if(*it == obj) { registeredObjects.erase(it); return; } } } b2WorldId &TSE::PhysicsEngine::GetWorldId() { return worldId; }