Physics stuff
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user