53 lines
1.9 KiB
C++
53 lines
1.9 KiB
C++
#ifndef HYDRAGETPHYSICSUPDATESTASK
|
|||
|
|
#define HYDRAGETPHYSICSUPDATESTASK
|
||
|
|
|
||
|
|
#include "../HydraTask.h"
|
||
|
|
#include "../../engine/HydraEngine.h"
|
||
|
|
#include "../../renderer/HydraRenderer.h"
|
||
|
|
|
||
|
|
#include "../../GlewIncludes.h"
|
||
|
|
#include "../../buffer/HydraTextureBufferManager.h"
|
||
|
|
#include "../../scheduler/HydraTaskScheduler.h"
|
||
|
|
#include "../../scheduler/HydraTaskBarrier.h"
|
||
|
|
#include "HydraSetWorldTransformTask.hpp"
|
||
|
|
|
||
|
|
#include <GLMIncludes.h>
|
||
|
|
#include <box3d/box3d.h>
|
||
|
|
|
||
|
|
class HydraGetPhysicsUpdatesTask : public HydraTask
|
||
|
|
{
|
||
|
|
private:
|
||
|
|
b3WorldId m_world_id = {};
|
||
|
|
|
||
|
|
|
||
|
|
protected:
|
||
|
|
public:
|
||
|
|
void Process() override
|
||
|
|
{
|
||
|
|
b3BodyEvents events = b3World_GetBodyEvents(m_world_id);
|
||
|
|
HydraTaskScheduler* task_scheduler = GetEngine()->TaskScheduler();
|
||
|
|
HydraID barrier_id = task_scheduler->CreateBarrier();
|
||
|
|
|
||
|
|
for(uint32_t i = 0; i < events.moveCount; i ++)
|
||
|
|
{
|
||
|
|
HydraID task_id = task_scheduler->CreateTask<HydraSetWorldTransformTask>(HydraThreadAffinity::General, barrier_id);
|
||
|
|
HydraSetWorldTransformTask *set_task = static_cast<HydraSetWorldTransformTask *>(task_scheduler->GetTask(task_id));
|
||
|
|
|
||
|
|
glm::dvec3 position = {events.moveEvents[i].transform.p.x, events.moveEvents[i].transform.p.y, events.moveEvents[i].transform.p.z};
|
||
|
|
glm::quat temp = {events.moveEvents[i].transform.q.v.x, events.moveEvents[i].transform.q.v.y, events.moveEvents[i].transform.q.v.z, events.moveEvents[i].transform.q.s};
|
||
|
|
glm::vec3 rotation = glm::eulerAngles(temp);
|
||
|
|
HydraID* entity_id = reinterpret_cast<HydraID*>(events.moveEvents[i].userData);
|
||
|
|
|
||
|
|
set_task->Initialise(*entity_id, position, rotation);
|
||
|
|
task_scheduler->StartTask(task_id);
|
||
|
|
}
|
||
|
|
task_scheduler->WaitForBarrier(barrier_id);
|
||
|
|
}
|
||
|
|
void Initialise(b3WorldId world_id)
|
||
|
|
{
|
||
|
|
m_world_id = world_id;
|
||
|
|
|
||
|
|
}
|
||
|
|
};
|
||
|
|
#endif /* HYDRAGETPHYSICSUPDATESTASK */
|