added the basic requiements for physics with box2d

This commit is contained in:
2026-01-18 20:01:12 +01:00
parent f9185e7b26
commit f4a63f1235
16 changed files with 4861 additions and 1 deletions

View File

@@ -0,0 +1,57 @@
#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;
}

View File

@@ -0,0 +1,28 @@
#pragma once
#include "BehaviourScripts/PhysicsObject.hpp"
#include "box2d/box2d.h"
#include <vector>
#include "Vector2.hpp"
namespace TSE
{
class PhysicsEngine
{
private:
inline static std::vector<PhysicsObject*> registeredObjects = std::vector<PhysicsObject*>();
inline static b2WorldId worldId = b2WorldId();
inline static constexpr float timestep = 1.0f / 60.0f;
inline static const int iterations = 4;
inline static float elapsedTime = 0;
public:
static void InitPhysics(Vector2 gravity);
static void UpdatePhysics();
static void DeletePhysics();
static void RegisterPhysicsObject(PhysicsObject* obj);
static void UnRegisterPhysicsObject(PhysicsObject* obj);
static b2WorldId& GetWorldId();
};
} // namespace TSE