using Chessistics.Engine.Commands; using Chessistics.Engine.Events; using Chessistics.Engine.Model; using Chessistics.Engine.Simulation; namespace Chessistics.Tests.Helpers; public class SimHelper { public GameSim Sim { get; } private SimHelper(GameSim sim) => Sim = sim; public static SimHelper FromLevel(LevelDef level) => new(new GameSim(level)); public IReadOnlyList Place(PieceKind kind, Coords start, Coords end) => Sim.ProcessCommand(new PlacePieceCommand(kind, start, end)); public IReadOnlyList Place(PieceKind kind, (int col, int row) start, (int col, int row) end) => Place(kind, new Coords(start.col, start.row), new Coords(end.col, end.row)); public IReadOnlyList Remove(int pieceId) => Sim.ProcessCommand(new RemovePieceCommand(pieceId)); public IReadOnlyList Start() => Sim.ProcessCommand(new StartSimulationCommand()); public IReadOnlyList Step() => Sim.ProcessCommand(new StepSimulationCommand()); public IReadOnlyList Pause() => Sim.ProcessCommand(new PauseSimulationCommand()); public IReadOnlyList Resume() => Sim.ProcessCommand(new ResumeSimulationCommand()); public IReadOnlyList Stop() => Sim.ProcessCommand(new StopSimulationCommand()); public IReadOnlyList Reset() => Sim.ProcessCommand(new ResetLevelCommand()); public List StepN(int n) { var allEvents = new List(); for (int i = 0; i < n; i++) allEvents.AddRange(Step()); return allEvents; } public BoardSnapshot Snapshot => Sim.GetSnapshot(); }