2026-08-24 20:59:24 +01:00
|
|
|
#ifndef HYDRACREATEPHYSICSOBJECTTASK
|
|
|
|
|
#define HYDRACREATEPHYSICSOBJECTTASK
|
|
|
|
|
|
|
|
|
|
#include "../HydraTask.h"
|
|
|
|
|
#include "../../engine/HydraEngine.h"
|
|
|
|
|
#include "../../renderer/HydraRenderer.h"
|
|
|
|
|
#include <GLMIncludes.h>
|
|
|
|
|
#include "../../GlewIncludes.h"
|
|
|
|
|
#include "../../buffer/HydraTextureBufferManager.h"
|
|
|
|
|
#include "../../ecs/components/HydraPhysicsComponent.h"
|
|
|
|
|
|
|
|
|
|
#include <box3d/box3d.h>
|
|
|
|
|
|
|
|
|
|
class HydraCreatePhysicsObjectTask : public HydraTask
|
|
|
|
|
{
|
|
|
|
|
private:
|
|
|
|
|
b3WorldId m_world_id = {};
|
|
|
|
|
b3BodyId *m_body_id = {};
|
|
|
|
|
HydraID m_entity_id = INVALID_HYDRA_ID;
|
|
|
|
|
HydraPhysicsComponent m_physics_comp;
|
|
|
|
|
protected:
|
|
|
|
|
public:
|
|
|
|
|
void Process() override
|
|
|
|
|
{
|
|
|
|
|
b3BodyDef bodyDef = b3DefaultBodyDef();
|
|
|
|
|
switch(m_physics_comp.phyics_type)
|
|
|
|
|
{
|
|
|
|
|
case HYDRA_PHYSICS_TYPE::HYDRA_RIGID_BODY:
|
|
|
|
|
{
|
|
|
|
|
bodyDef.type = b3_dynamicBody;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case HYDRA_PHYSICS_TYPE::HYDRA_STATIC_BODY:
|
|
|
|
|
{
|
|
|
|
|
bodyDef.type = b3_staticBody;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
default:
|
|
|
|
|
{
|
|
|
|
|
bodyDef.type = b3_dynamicBody;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HydraID* user_entity_id = new HydraID();
|
|
|
|
|
*user_entity_id = m_entity_id;
|
|
|
|
|
|
|
|
|
|
bodyDef.isEnabled = true;
|
|
|
|
|
bodyDef.name = std::to_string(m_entity_id).c_str();
|
|
|
|
|
bodyDef.userData = user_entity_id;
|
|
|
|
|
|
|
|
|
|
*m_body_id = b3CreateBody( m_world_id, &bodyDef );
|
|
|
|
|
|
|
|
|
|
b3BoxHull box = b3MakeBoxHull(m_physics_comp.width/2.0f, m_physics_comp.height/2.0f, m_physics_comp.depth/2.0f);
|
|
|
|
|
|
|
|
|
|
b3ShapeDef shapeDef = b3DefaultShapeDef();
|
|
|
|
|
b3Pos pos = {};
|
|
|
|
|
|
|
|
|
|
shapeDef.density = 1.0f;
|
2026-08-28 16:36:25 +01:00
|
|
|
shapeDef.baseMaterial.restitution = 0.6f;
|
2026-08-24 20:59:24 +01:00
|
|
|
|
|
|
|
|
b3CreateHullShape(*m_body_id, &shapeDef, &box.base );
|
2026-08-28 16:36:25 +01:00
|
|
|
DebugLog("B3LOG " + std::to_string(m_entity_id) + " BODY " + std::to_string(m_body_id->index1) + "\n");
|
2026-08-24 20:59:24 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Initialise(b3WorldId world_id, HydraPhysicsComponent physics_comp, b3BodyId* body_id, HydraID entity_id)
|
|
|
|
|
{
|
|
|
|
|
m_body_id = body_id;
|
|
|
|
|
m_world_id = world_id;
|
|
|
|
|
m_entity_id = entity_id;
|
|
|
|
|
m_physics_comp = physics_comp;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
#endif /* HYDRACREATEPHYSICSOBJECTTASK */
|
|
|
|
|
|