Physics stuff

This commit is contained in:
Confideo-IOM
2026-08-25 22:10:54 +01:00
parent 1253571c17
commit 30538ae7ab
59 changed files with 1403 additions and 518 deletions
@@ -7,6 +7,7 @@
#include "../../task/physics/HydraSetPhysicsTransform.hpp"
#include "../../task/physics/HydraGetPhysicsUpdatesTask.hpp"
#include "../../task/physics/HydraStepPhysicsTask.h"
#include "../../task/physics/HydraSetPhysicsLinearVelocity.hpp"
#include "../../ecs/HydraECS.h"
#include "../../ecs/components/HydraPhysicsComponent.h"
#include "../../ecs/components/HydraPositionComponent.h"
@@ -40,14 +41,35 @@ void HydraPhysicsSystem::SetTransform(HydraID entity_id)
HydraPhysicsComponent &phys_comp = GetEngine()->ECS()->GetComponent<HydraPhysicsComponent>(entity_id);
if(!phys_comp.needs_update)
{
m_bodies_to_set.push(entity_id);
m_bodies_to_set_transform.push(entity_id);
phys_comp.needs_update = true;
}
// HydraTaskScheduler *task_scheduler = GetEngine()->TaskScheduler();
// HydraPhysicsComponent& phys_comp = GetEngine()->ECS()->GetComponent<HydraPhysicsComponent>(entity_id);
// HydraPositionComponent& pos_comp = GetEngine()->ECS()->GetComponent<HydraPositionComponent>(entity_id);
// HydraID task_id = task_scheduler->CreateTask<HydraSetPhysicsTransform>(HydraThreadAffinity::Physics);
// HydraSetPhysicsTransform *set_task = static_cast<HydraSetPhysicsTransform *>(task_scheduler->GetTask(task_id));
// set_task->Initialise(phys_comp.body_id, pos_comp.position, glm::quat(pos_comp.orientation));
// task_scheduler->WaitForTask(task_id);
}
void HydraPhysicsSystem::SetLinearVelocity(HydraID entity_id, glm::vec3 velocity)
{
PhysicsVelocity vel = {entity_id, velocity};
m_bodies_to_set_velocity.push(vel);
// HydraPhysicsComponent& phys_comp = GetEngine()->ECS()->GetComponent<HydraPhysicsComponent>(entity_id);
// HydraTaskScheduler *task_scheduler = GetEngine()->TaskScheduler();
// HydraID task_id = task_scheduler->CreateTask<HydraSetPhysicsLinearVelocity>(HydraThreadAffinity::Physics);
// HydraSetPhysicsLinearVelocity *set_task = static_cast<HydraSetPhysicsLinearVelocity *>(task_scheduler->GetTask(task_id));
// set_task->Initialise(phys_comp.body_id, velocity);
// task_scheduler->WaitForTask(task_id);
}
void HydraPhysicsSystem::InitialiseComponent(HydraID entity_id)
{
b3BodyId body_id = {};
HydraPhysicsComponent& phys_comp = GetEngine()->ECS()->GetComponent<HydraPhysicsComponent>(entity_id);
HydraPositionComponent& pos_comp = GetEngine()->ECS()->GetComponent<HydraPositionComponent>(entity_id);
@@ -69,15 +91,16 @@ void HydraPhysicsSystem::InitialiseComponent(HydraID entity_id)
void HydraPhysicsSystem::DestroyComponent(HydraID entity_id)
{
}
void HydraPhysicsSystem::UpdateSystem(float delta_t_seconds)
{
HydraTaskScheduler *task_scheduler = GetEngine()->TaskScheduler();
while(m_bodies_to_set.size() >0)
while(m_bodies_to_set_transform.size() >0)
{
HydraID entity_id = m_bodies_to_set.front();
m_bodies_to_set.pop();
HydraID entity_id = m_bodies_to_set_transform.front();
m_bodies_to_set_transform.pop();
HydraPhysicsComponent& phys_comp = GetEngine()->ECS()->GetComponent<HydraPhysicsComponent>(entity_id);
HydraPositionComponent& pos_comp = GetEngine()->ECS()->GetComponent<HydraPositionComponent>(entity_id);
@@ -86,7 +109,17 @@ void HydraPhysicsSystem::UpdateSystem(float delta_t_seconds)
set_task->Initialise(phys_comp.body_id, pos_comp.position, glm::quat(pos_comp.orientation));
task_scheduler->WaitForTask(task_id);
}
while(m_bodies_to_set_velocity.size() >0)
{
PhysicsVelocity vel = m_bodies_to_set_velocity.front();
m_bodies_to_set_velocity.pop();
HydraPhysicsComponent& phys_comp = GetEngine()->ECS()->GetComponent<HydraPhysicsComponent>(vel.entity_id);
HydraID task_id = task_scheduler->CreateTask<HydraSetPhysicsLinearVelocity>(HydraThreadAffinity::Physics);
HydraSetPhysicsLinearVelocity *set_task = static_cast<HydraSetPhysicsLinearVelocity *>(task_scheduler->GetTask(task_id));
set_task->Initialise(phys_comp.body_id, vel.velocity);
task_scheduler->WaitForTask(task_id);
}
}
void HydraPhysicsSystem::StepPhysics(float delta_t)