#ifndef HYDRACREATEPHYSICSOBJECTTASK #define HYDRACREATEPHYSICSOBJECTTASK #include "../HydraTask.h" #include "../../engine/HydraEngine.h" #include "../../renderer/HydraRenderer.h" #include #include "../../GlewIncludes.h" #include "../../buffer/HydraTextureBufferManager.h" #include "../../ecs/components/HydraPhysicsComponent.h" #include 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; shapeDef.baseMaterial.restitution = 0.4f; b3CreateHullShape(*m_body_id, &shapeDef, &box.base ); } 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 */