using System.Text.Json.Serialization; namespace MultiversalDiplomacy.Model; /// /// Represents a unit at a particular point in time. /// public class Unit { /// /// The previous iteration of a unit. This is null if the unit was just built. /// public string? Past { get; } /// /// The location on the map where the unit is. /// public string Location { get; } /// /// The season in time when the unit is. /// public Season Season { get; } /// /// The allegiance of the unit. /// public Power Power { get; } /// /// The type of unit. /// public UnitType Type { get; } /// /// A unique designation for this unit. /// [JsonIgnore] public string Key => $"{Type.ToShort()} {Season.Timeline}-{Location}@{Season.Turn}"; public Unit(string? past, string location, Season season, Power power, UnitType type) { this.Past = past; this.Location = location; this.Season = season; this.Power = power; this.Type = type; } public override string ToString() => $"{Power.Name[0]} {Type.ToShort()} {Season.Timeline}-{Location}@{Season.Turn}"; /// /// Create a new unit. No validation is performed; the adjudicator should only call this /// method after accepting a build order. /// public static Unit Build(string location, Season season, Power power, UnitType type) => new(past: null, location, season, power, type); /// /// Advance this unit's timeline to a new location and season. /// public Unit Next(string location, Season season) => new(past: this.Key, location, season, this.Power, this.Type); }