2026-04-10 14:58:03 +02:00
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
|
2026-04-16 21:22:49 +02:00
|
|
|
public GameSim(CampaignDef campaign)
|
|
|
|
|
{
|
|
|
|
|
_state = BoardState.FromCampaign(campaign);
|
|
|
|
|
}
|
|
|
|
|
|
2026-04-10 14:58:03 +02:00
|
|
|
public IReadOnlyList<IWorldEvent> ProcessCommand(IWorldCommand command)
|
|
|
|
|
{
|
|
|
|
|
var changeList = new List<IWorldEvent>();
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
command.Apply(_state, changeList);
|
|
|
|
|
}
|
|
|
|
|
catch (CommandRejectedException ex)
|
|
|
|
|
{
|
|
|
|
|
return [ex.RejectionEvent];
|
|
|
|
|
}
|
|
|
|
|
return changeList;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public BoardSnapshot GetSnapshot() => new(_state);
|
|
|
|
|
}
|