using Chessistics.Engine.Model; namespace Chessistics.Engine.Rules; public static class CollisionDetector { public static IReadOnlyList<(int PieceIdA, int PieceIdB, Coords Cell)> DetectCollisions( IReadOnlyList pieces) { var collisions = new List<(int, int, Coords)>(); var byCell = new Dictionary>(); foreach (var piece in pieces) { if (!byCell.TryGetValue(piece.CurrentCell, out var list)) { list = []; byCell[piece.CurrentCell] = list; } list.Add(piece); } foreach (var (cell, occupants) in byCell) { if (occupants.Count < 2) continue; for (int i = 0; i < occupants.Count; i++) for (int j = i + 1; j < occupants.Count; j++) collisions.Add((occupants[i].Id, occupants[j].Id, cell)); } return collisions; } }