using System; using System.Linq; namespace EDPlayerJournal.BGS; public class CombatZone : Transaction { /// /// Type string for ground combat zone /// public static readonly string GroundCombatZone = "Ground"; /// /// Type string for ship combat zones /// public static readonly string ShipCombatZone = "Ship"; /// /// Difficulty low /// public static readonly string DifficultyLow = "Low"; /// /// Difficulty medium /// public static readonly string DifficultyMedium = "Medium"; /// /// Difficulty high /// public static readonly string DifficultyHigh = "High"; /// /// Type, either on foot or ship /// public string Type { get; set; } = ShipCombatZone; /// /// Difficulty type, low, medium or high. /// public string Grade { get; set; } = DifficultyLow; /// /// Whether spec ops were won. /// public bool? SpecOps { get; set; } /// /// Whether captain was won /// public bool? Captain { get; set; } /// /// Whether correspondent objective was won /// public bool? Correspondent { get; set; } /// /// Whether cap ship objective was won /// public bool? CapitalShip { get; set; } /// /// How many optional objectives were completed? /// public int OptionalObjectivesCompleted { get { if (IsGround) { return 0; } return new List() { SpecOps, Captain, Correspondent, CapitalShip } .Where(x => x != null && x == true) .Count() ; } } /// /// Returns true if it is an on foot/ground combat zone /// public bool IsGround { get { return string.Compare(Type, GroundCombatZone) == 0; } } /// /// Returns true if it is an on foot combat zone /// public bool IsShip { get { return string.Compare(Type, ShipCombatZone) == 0; } } public override int CompareTo(Transaction? obj) { if (obj == null || obj.GetType() != typeof(CombatZone)) { return -1; } CombatZone? b = obj as CombatZone; if (b == null) { return -1; } if (b.Faction != Faction || b.System != System) { return -1; // System and faction don't match } if (b.Type != b.Type || b.Grade != b.Grade) { return -1; // grade and type don't match } return 0; } public override string ToString() { return string.Format("Won {0} {1} Combat Zone", Grade, Type); } }