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) { // TODO Try to improve this 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; } bool leftMinInRight = left.Min > right.Min && left.Min < right.Max; if (leftMinInRight) { depth = right.Max - left.Min; return true; } bool leftMaxInRight = left.Max < right.Max && left.Max > right.Min; if (leftMaxInRight) { depth = right.Min - left.Max; return true; } depth = 0f; 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); }