namespace Chessistics.Engine.Model; public class CampaignState { public CampaignDef CampaignDef { get; } public int CurrentMissionIndex { get; set; } public List CompletedMissions { get; } = new(); public HashSet AvailablePieceKinds { get; } = new(); public HashSet AvailableLevels { get; } = new(); public CampaignState(CampaignDef campaignDef) { CampaignDef = campaignDef; CurrentMissionIndex = 0; } public MissionDef CurrentMission => CampaignDef.Missions[CurrentMissionIndex]; public bool IsLastMission => CurrentMissionIndex >= CampaignDef.Missions.Count - 1; public bool IsPieceAvailable(PieceKind kind) => AvailablePieceKinds.Contains(kind); public bool IsLevelAvailable(PieceKind kind, int level) => AvailableLevels.Contains(new PieceUpgrade(kind, level)); }