using Chessistics.Engine.Commands; using Chessistics.Engine.Events; using Chessistics.Engine.Model; namespace Chessistics.Engine.Simulation; public class GameSim { private readonly BoardState _state; public GameSim(LevelDef level) { _state = BoardState.FromLevel(level); } public GameSim(CampaignDef campaign) { _state = BoardState.FromCampaign(campaign); } public IReadOnlyList ProcessCommand(IWorldCommand command) { var changeList = new List(); try { command.Apply(_state, changeList); } catch (CommandRejectedException ex) { return [ex.RejectionEvent]; } return changeList; } public BoardSnapshot GetSnapshot() => new(_state); }