static CollisionData ShapeProjectionOverlapWithPoint(IShapeVertices shape, Vector3 point, Vector3 projectionTo) { projectionTo = projectionTo.normalized; shape.MinMaxVertexProjection(projectionTo, out float min, out float max); float pointProjection = Vector3.Dot(point, projectionTo); return(new CollisionData(pointProjection > min && pointProjection < max, pointProjection - min, projectionTo)); }
//Projection static CollisionData ShapesProjectionOverlap(IShapeVertices shapeA, IShapeVertices shapeB, Vector3 projectionTo) { shapeA.MinMaxVertexProjection(projectionTo, out float minA, out float maxA); shapeB.MinMaxVertexProjection(projectionTo, out float minB, out float maxB); bool shapeOrder = shapeA.ShapePositionProjection(projectionTo) > shapeB.ShapePositionProjection(projectionTo); if (shapeOrder) { return(new CollisionData(maxB > minA, maxB - minA, projectionTo)); } else { return(new CollisionData(maxA > minB, maxA - minB, -projectionTo)); } }