using System; using System.Linq; namespace EDPlayerJournal.BGS; public class CombatZone : Transaction { /// <summary> /// Type, either on foot or ship /// </summary> public string Type { get; set; } = CombatZones.ShipCombatZone; /// <summary> /// Difficulty type, low, medium or high. Null means unknown. /// </summary> public string? Grade { get; set; } /// <summary> /// Whether spec ops were won. /// </summary> public bool? SpecOps { get; set; } /// <summary> /// Whether allied captain objective was won /// </summary> public bool? AlliedCaptain { get; set; } /// <summary> /// Whether enemy captain objective was won /// </summary> public bool? EnemyCaptain { get; set; } /// <summary> /// Whether the allied correspondent objective was won /// </summary> public bool? AlliedCorrespondent { get; set; } /// <summary> /// Whether the enemy correspondent objective was won /// </summary> public bool? EnemyCorrespondent { get; set; } /// <summary> /// Whether cap ship objective was won /// </summary> public bool? CapitalShip { get; set; } /// <summary> /// If we have a combat zone, this might point to the settlement /// in question. /// </summary> public string? Settlement { get; set; } /// <summary> /// How many optional objectives were completed? /// </summary> public int OptionalObjectivesCompleted { get { if (IsGround) { return 0; } return new List<bool?>() { SpecOps, AlliedCaptain, EnemyCaptain, AlliedCorrespondent, EnemyCorrespondent, CapitalShip } .Where(x => x != null && x == true) .Count() ; } } /// <summary> /// Returns true if it is an on foot/ground combat zone /// </summary> public bool IsGround { get { return string.Compare(Type, CombatZones.GroundCombatZone) == 0; } } /// <summary> /// Returns true if it is an on foot combat zone /// </summary> public bool IsShip { get { return string.Compare(Type, CombatZones.ShipCombatZone) == 0; } } /// <summary> /// Returns true if it is a thargoid combat zone /// </summary> public bool IsThargoid { get { return string.Compare(Type, CombatZones.AXCombatZone) == 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() { if (!string.IsNullOrEmpty(Grade)) { return string.Format("Won {0} {1} Combat Zone", Grade, Type); } else { return string.Format("Won {0} Combat Zone", Type); } } }