added the basic requiements for physics with box2d
This commit is contained in:
57
TSE_Core/src/elements/PhysicsEngine.cpp
Normal file
57
TSE_Core/src/elements/PhysicsEngine.cpp
Normal 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;
|
||||
}
|
||||
28
TSE_Core/src/elements/PhysicsEngine.hpp
Normal file
28
TSE_Core/src/elements/PhysicsEngine.hpp
Normal 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
|
||||
Reference in New Issue
Block a user