Black box sim engine (commands in, events out) with 3 piece types (Rook, Bishop, Knight), cargo transfer system with social status priority, collision detection, and victory/defeat conditions. 57 tests covering rules, simulation, loading, and solvability. Godot 4 presentation layer scaffolding.
34 lines
985 B
C#
34 lines
985 B
C#
using Chessistics.Engine.Model;
|
|
|
|
namespace Chessistics.Engine.Rules;
|
|
|
|
public static class CollisionDetector
|
|
{
|
|
public static IReadOnlyList<(int PieceIdA, int PieceIdB, Coords Cell)> DetectCollisions(
|
|
IReadOnlyList<PieceState> pieces)
|
|
{
|
|
var collisions = new List<(int, int, Coords)>();
|
|
var byCell = new Dictionary<Coords, List<PieceState>>();
|
|
|
|
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;
|
|
}
|
|
}
|