Program Listing for File fracturer.hpp¶
↰ Return to documentation for file (/home/runner/work/Legion-Engine/Legion-Engine/legion/engine/physics/components/fracturer.hpp
)
#pragma once
#include <core/core.hpp>
#include <physics/components/physics_component.hpp>
#include <physics/mesh_splitter_utils/mesh_splitter.hpp>
#include <physics/data/fractureparams.hpp>
namespace legion::physics
{
struct physics_manifold;
struct FracturerColliderToMeshPairing
{
FracturerColliderToMeshPairing(
std::shared_ptr<ConvexCollider> pColliderPair,
ecs::component_handle<MeshSplitter> pMeshSplitterPairing) :
colliderPair(pColliderPair) , meshSplitterPairing(pMeshSplitterPairing)
{
assert(pMeshSplitterPairing.entity);
}
std::shared_ptr<ConvexCollider> colliderPair;
ecs::component_handle<MeshSplitter> meshSplitterPairing;
void GenerateSplittingParamsFromCollider(std::shared_ptr<ConvexCollider> instantiatedCollider
, std::vector<physics::MeshSplitParams>& meshSplitParams);
};
struct Fracturer
{
void HandleFracture(physics_manifold& manifold,bool& manifoldValid, bool isfracturingA);
void ExplodeEntity(ecs::entity_handle ownerEntity,
const FractureParams& fractureParams, PhysicsCollider* entityCollider = nullptr);;
bool IsFractureConditionMet(physics_manifold& manifold, bool isfracturingA);
void InitializeVoronoi(ecs::component_handle<physicsComponent> physicsComponent);
void InvestigateColliderToMeshPairing(ecs::entity_handle ent
,std::vector<FracturerColliderToMeshPairing> colliderToMeshPairings);
void InstantiateColliderMeshPairingWithEntity(ecs::entity_handle ent,
std::vector< FracturerColliderToMeshPairing>& colliderToMeshPairings);
void GetVoronoiPoints(std::vector<std::vector<math::vec3>>& groupedPoints,
std::vector<math::vec3>& voronoiPoints, math::vec3 min, math::vec3 max);
void InstantiateVoronoiColliders(std::vector<std::shared_ptr<ConvexCollider>>& voronoiColliders
, std::vector<std::vector<math::vec3>>& groupedPoints);
void GenerateFractureFragments(std::vector<ecs::entity_handle>& entitiesGenerated
, std::vector< FracturerColliderToMeshPairing>& colliderToMeshPairings
, std::vector< std::shared_ptr<ConvexCollider>>& voronoiColliders
, ecs::entity_handle fracturedEnt);
void QuadrantVoronoi(math::vec3& min, math::vec3& max, std::vector<math::vec3>& voronoiPoints);
void BalancedVoronoi(math::vec3& min, math::vec3& max, std::vector<math::vec3>& voronoiPoints);
math::vec3 GetImpactPointFromManifold(physics_manifold& manifold);
int fractureCount = 0;
std::vector<std::vector<math::vec3>> verticesList;
std::vector<std::shared_ptr<ConvexCollider>> debugVectorcolliders;
std::vector<math::mat4> transforms;
static ecs::EcsRegistry* registry;
};
}