using System.Collections.Generic; using System; using System.Text; using Newtonsoft.Json; namespace EliteBGS.BGS { public class Objective : IComparable { [JsonIgnore] public bool IsEnabled { get; set; } [JsonIgnore] public List Children { get; } = new List(); [JsonIgnore] public string Name { get { return this.ToString(); } } [JsonIgnore] public bool IsExpanded { get; set; } [JsonIgnore] public List LogEntries { get => Children; } public void Clear() { if (LogEntries == null) { return; } LogEntries.RemoveAll(x => !x.ManuallyAdded); } public bool ManuallyAdded { get; set; } public int Matches(LogEntry e) { int match_count = 0; if (e.OnlyControllingFaction) { if (Faction == null || (e.Faction != Faction)) { return 0; } } if (e.Faction != null && Faction != null) { if (string.Compare(e.Faction, Faction, true) != 0) { /* if we have a faction, and it doesn't match we don't care. * faction is the most important comparision, so if it doesn't match * it is not the right objective */ return 0; } else { ++match_count; } } /* system and station only add to the match strength though */ if (e.System != null && System != null) { if (string.Compare(e.System, System, true) == 0) { ++match_count; } } /* station does not matter */ return match_count; } public int CompareTo(Objective other) { return (other.System == System && other.Station == Station && other.Faction == Faction) ? 0 : -1; } public bool IsValid => System != null && Faction != null; public string System { get; set; } public string Station { get; set; } public string Faction { get; set; } public override string ToString() { StringBuilder str = new StringBuilder(); if (!string.IsNullOrEmpty(System)) { str.AppendFormat("System: {0}", System); } if (!string.IsNullOrEmpty(Faction)) { if (str.Length > 0) { str.Append(", "); } str.AppendFormat("Faction: {0}", Faction); } return str.ToString(); } public string ToLocationString() { StringBuilder str = new StringBuilder(); if (!string.IsNullOrEmpty(System)) { str.AppendFormat("{0}", System); } if (!string.IsNullOrEmpty(Station)) { if (str.Length > 0) { str.Append(", "); } str.AppendFormat("{0}", Station); } return str.ToString(); } } }