Files
TSE/TSE_Core/src/elements/PhysicsEngine.cpp

58 lines
1.1 KiB
C++

#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;
}