Chessistics/chessistics-tests/Helpers/BoardBuilder.cs
Samuel Bouchet a7280b1a5a Overhaul turn mechanics, collision destruction, and visual animations
- New turn order: produce -> transfer -> move -> collision resolution
- Collisions now destroy weaker pieces (status > level > mutual destruction)
  instead of halting the simulation. SimPhase.Collision removed.
- Add piece Level property (all level 1 in proto, prepared for future)
- Production fires every turn (interval concept removed), buffer = Amount
  (default 1, future 2-4), leftovers overwritten each turn
- Transfer tiebreaker: status > level > clockwise direction (alternating
  even/odd turns in y-up coords), replaces distance-to-production
- Demands always accept matching cargo even when already satisfied
- TurnNumber added to all turn events for animation grouping
- Simultaneous animations: produce flash, cargo slide, parallel piece moves
- Camera centering fix + middle-click pan
- GDD updated with new rules + lore section added

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 21:44:12 +02:00

58 lines
1.5 KiB
C#

using Chessistics.Engine.Model;
namespace Chessistics.Tests.Helpers;
public class BoardBuilder
{
private readonly int _width;
private readonly int _height;
private readonly List<ProductionDef> _productions = [];
private readonly List<DemandDef> _demands = [];
private readonly List<Coords> _walls = [];
private readonly List<PieceStock> _stock = [];
public BoardBuilder(int width, int height)
{
_width = width;
_height = height;
}
public BoardBuilder WithProduction(int col, int row, string name, CargoType cargo, int amount = 1)
{
_productions.Add(new ProductionDef(new Coords(col, row), name, cargo, amount));
return this;
}
public BoardBuilder WithDemand(int col, int row, string name, CargoType cargo, int amount, int deadline)
{
_demands.Add(new DemandDef(new Coords(col, row), name, cargo, amount, deadline));
return this;
}
public BoardBuilder WithWall(int col, int row)
{
_walls.Add(new Coords(col, row));
return this;
}
public BoardBuilder WithStock(PieceKind kind, int count)
{
_stock.Add(new PieceStock(kind, count));
return this;
}
public LevelDef Build() => new()
{
Id = 0,
Name = "Test Level",
Description = "Test",
Width = _width,
Height = _height,
Productions = _productions,
Demands = _demands,
Walls = _walls,
Stock = _stock
};
public BoardState BuildState() => BoardState.FromLevel(Build());
}