namespace Chessistics.Engine.Model; public class DemandState { public DemandDef Definition { get; } public int ReceivedCount { get; set; } public int MissionIndex { get; } // Recurring demand tracking (only used when Definition.ConsumptionPerTurn > 0) public int Buffer { get; set; } public int SustainedTurns { get; set; } public bool InShortage { get; set; } public DemandState(DemandDef definition, int missionIndex = 0) { Definition = definition; MissionIndex = missionIndex; ReceivedCount = 0; } public bool IsRecurring => Definition.ConsumptionPerTurn > 0; public bool IsSatisfied => IsRecurring ? SustainedTurns >= Definition.SustainTurns : ReceivedCount >= Definition.Amount; public Coords Position => Definition.Position; public string Name => Definition.Name; public CargoType Cargo => Definition.Cargo; public int Required => Definition.Amount; public int Deadline => Definition.Deadline; public DemandState Clone() { return new DemandState(Definition, MissionIndex) { ReceivedCount = ReceivedCount, Buffer = Buffer, SustainedTurns = SustainedTurns, InShortage = InShortage }; } }