namespace Syntriax.Engine.Physics2D.Primitives; public record Projection(float Min, float Max) { public static bool Overlaps(Projection left, Projection right) => Overlaps(left, right, out var _); public static bool Overlaps(Projection left, Projection right, out float depth) { bool rightMinInLeft = right.Min > left.Min && right.Min < left.Max; if (rightMinInLeft) { depth = left.Max - right.Min; return true; } bool rightMaxInLeft = right.Max < left.Max && right.Max > left.Min; if (rightMaxInLeft) { depth = left.Min - right.Max; return true; } depth = default; return false; } } public static class ProjectionExtensions { public static bool Overlaps(this Projection left, Projection right) => Projection.Overlaps(left, right); public static bool Overlaps(this Projection left, Projection right, out float depth) => Projection.Overlaps(left, right, out depth); }