private CollisionPointStructure SoftBodyNarrowPhase( ShapeDecompositionOutput A, ShapeDecompositionOutput B, int ID_A, int ID_B) { List <CollisionPointStructure> collisionPointStructure = ConvexCollisionStep(A, B, ID_A, ID_B, parameters.CollisionDistance); if (collisionPointStructure.Count > 1) { List <CollisionPointBaseStructure> baseStructure = new List <CollisionPointBaseStructure>(); foreach (CollisionPointStructure cps in collisionPointStructure) { if (cps != null) { baseStructure.AddRange(cps.CollisionPointBase); } } collisionPointStructure[0].SetBaseCollisionPoint(baseStructure.ToArray()); } if (collisionPointStructure.Count > 0) { return(collisionPointStructure[0]); } return(null); }
private List <CollisionPointStructure> ConvexCollisionStep( ShapeDecompositionOutput A, ShapeDecompositionOutput B, int ID_A, int ID_B, double collisionDistance) { VertexProperties[] vertexObjA = Array.ConvertAll(A.Vertex3Idx.ToArray(), x => new VertexProperties(x.Vector3, x.ID)); VertexProperties[] vertexObjB = Array.ConvertAll(B.Vertex3Idx.ToArray(), x => new VertexProperties(x.Vector3, x.ID)); List <CollisionPointStructure> collisionPointStructure = new List <CollisionPointStructure>(); var cps = convexBodyNarrowPhase.Execute(vertexObjA, vertexObjB, ID_A, ID_B, collisionDistance); if (cps != null) { collisionPointStructure.Add(cps); } return(collisionPointStructure); }