Files
Nuake-custom/Nuake/src/Physics/PhysicsManager.cpp
2024-04-18 20:08:04 -04:00

79 lines
1.6 KiB
C++

#include "PhysicsManager.h"
#include "PhysicsShapes.h"
#include "../Core/Core.h"
#include <Jolt/Jolt.h>
#include <Jolt/RegisterTypes.h>
#include <Jolt/Core/Factory.h>
#include <Jolt/Core/TempAllocator.h>
namespace Nuake
{
PhysicsManager* PhysicsManager::m_Instance;
void PhysicsManager::RegisterBody(Ref<Physics::RigidBody> rb)
{
m_World->AddRigidbody(rb);
}
void PhysicsManager::RegisterGhostBody(Ref<GhostObject> rb)
{
m_World->AddGhostbody(rb);
}
void PhysicsManager::RegisterCharacterController(Ref<Physics::CharacterController> cc)
{
m_World->AddCharacterController(cc);
}
void PhysicsManager::SetBodyTransform(const Entity& entity, const Vector3& position, const Quat& rotation)
{
m_World->SetBodyPosition(entity, position, rotation);
}
void PhysicsManager::SetCharacterControllerPosition(const Entity& entity, const Vector3& position)
{
m_World->SetCharacterControllerPosition(entity, position);
}
void PhysicsManager::Step(Timestep ts)
{
m_World->StepSimulation(ts);
}
void PhysicsManager::Reset()
{
m_World->Clear();
}
std::vector<RaycastResult> PhysicsManager::Raycast(const Vector3& from, const Vector3& to)
{
return m_World->Raycast(from, to);
}
const std::vector<Physics::CollisionData>& PhysicsManager::GetCollisions()
{
return m_World->GetCollisionsData();
}
void PhysicsManager::DrawDebug()
{
if (m_DrawDebug)
m_World->DrawDebug();
}
void PhysicsManager::Init()
{
JPH::RegisterDefaultAllocator();
JPH::Factory::sInstance = new JPH::Factory();
JPH::RegisterTypes();
m_World = CreateRef<Physics::DynamicWorld>();
m_World->SetGravity(Vector3(0, -3, 0));
m_IsRunning = false;
}
}