using System; namespace AutoMiningScript { public partial class Program { // Resources are selected at build time. Wire values and persisted codes stay invariant. public static partial class L { public static string F(string format, params object[] args) => string.Format(Data.Culture, format, args); public static string Bool(bool value) => value ? DisplayYes : DisplayNo; public static string Service(int flags) => flags == 3 ? DisplayStateServicing : flags == 1 ? DisplayStateUnloading : flags == 2 ? DisplayStateCharging : DisplayStateStandby; public static string State(Telemetry t) => t.Connected && t.ServiceFlags >= 0 && t.State != FlightState.Fault ? Service(t.ServiceFlags) : State(t.State); // Keep this table in the persisted FlightState numeric order. static readonly string[] states = { DisplayStateBoot, DisplayStateDocked, DisplayStateServicing, DisplayStateReady, DisplayStateDeparting, DisplayStateTransit, DisplayStateSurvey, DisplayStateAlign, DisplayStateDrilling, DisplayStateRetreat, DisplayStateReturning, DisplayStateHolding, DisplayStateDockAlign, DisplayStateDockApproach, DisplayStateDockRetreat, DisplayStatePaused, DisplayStateManual, DisplayStateFault }; static readonly string[] outcomeCodes = "|Pending|Complete|Blocked|SurveyHit|SurveyEmpty|InvalidSample|Discovery|Paused".Split('|'); static readonly string[] outcomes = { DisplayOutcomePending, DisplayOutcomePending, DisplayOutcomeComplete, DisplayOutcomeBlocked, DisplayOutcomeSurveyHit, DisplayOutcomeSurveyEmpty, DisplayOutcomeInvalidSample, DisplayOutcomeDiscovery, DisplayStatePaused }; static readonly string[] oreCodes = "Iron|Nickel|Cobalt|Magnesium|Silicon|Silver|Gold|Platinum|Uranium|Stone|Ice|Scrap".Split('|'); static readonly string[] ores = { DisplayOreIron, DisplayOreNickel, DisplayOreCobalt, DisplayOreMagnesium, DisplayOreSilicon, DisplayOreSilver, DisplayOreGold, DisplayOrePlatinum, DisplayOreUranium, DisplayOreStone, DisplayOreIce, DisplayOreScrap }; public static string State(FlightState state) => (uint)state < states.Length ? states[(int)state] : DisplayUnknown; static string Lookup(string code, string[] codes, string[] labels) { int index = Array.IndexOf(codes, code); return index < 0 ? code : labels[index]; } public static string Outcome(string code) => Lookup(code, outcomeCodes, outcomes); public static string Ore(string code) => Lookup(code, oreCodes, ores); public static string OreList(string value) { if (string.IsNullOrEmpty(value)) return ""; var items = value.Split(','); for (int i = 0; i < items.Length; i++) { var item = items[i].Trim(); int colon = item.IndexOf(':'); items[i] = colon >= 0 ? Ore(item.Substring(0, colon)) + item.Substring(colon) : Ore(item); } return string.Join(", ", items); } } } }