void UpdateMessageIndex(ExtendedSituation extendedSituation) { if (DateTime.Now - lastDraw < minimumInterval && messageIndices[extendedSituation] > -1) { // Historian.Print("No index update"); } else { messageIndices[extendedSituation]++; if (isRandom) { messageIndices[extendedSituation] = rnd.Next(0, situationTokenizedTexts[extendedSituation].Count - 1); } else { if (resetOnLaunch && lastVessel != FlightGlobals.ActiveVessel) { // Historian.Print("Vessel changed - reseting messages"); messageIndices[extendedSituation] = 0; } } if (messageIndices[extendedSituation] >= situationTokenizedTexts[extendedSituation].Count) { messageIndices[extendedSituation] = 0; // wrap around after end of list } } }
protected override void OnLoad(ConfigNode node) { base.OnLoad(node); situationTokenizedTexts = new Dictionary <ExtendedSituation, List <List <Token> > >(); isRandom = node.GetBoolean("Random", false); resetOnLaunch = node.GetBoolean("ResetOnLaunch", false); evaOnly = node.GetEnum("EvaOnly", TriState.UseDefault); foreach (ConfigNode section in node.GetNodes()) { string name = section.name; try { ExtendedSituation situation = (ExtendedSituation)(object)ConfigNode.ParseEnum(typeof(ExtendedSituation), name); if (!situationTokenizedTexts.ContainsKey(situation)) { situationTokenizedTexts.Add(situation, new List <List <Token> >()); messageIndices.Add(situation, -1); } situationTokenizedTexts[situation].AddTokenizedRange(section.GetValues("Text")); } catch { Historian.Print($"Unrecognised situation block {name} in TEXT_LIST"); } } }
protected override void OnDraw(Rect bounds) { TriState isEva = (FlightGlobals.ActiveVessel?.isEVA).ToTriState(); if (evaOnly != TriState.UseDefault && evaOnly != isEva) { return; } ExtendedSituation situation = SituationExtensions.Extend(FlightGlobals.ActiveVessel?.situation, isEva, false); ExtendedSituation fallback = SituationExtensions.Extend(FlightGlobals.ActiveVessel?.situation, isEva, true); TokenizedText = (situations.ContainsKey(situation)) ? situations[situation] : situations[fallback]; base.OnDraw(bounds); }
protected override void OnDraw(Rect bounds) { TriState isEva = (FlightGlobals.ActiveVessel?.isEVA).ToTriState(); if (evaOnly != TriState.UseDefault && evaOnly != isEva) { return; } ExtendedSituation situation = SituationExtensions.Extend(FlightGlobals.ActiveVessel?.situation, isEva, false); ExtendedSituation fallback = SituationExtensions.Extend(FlightGlobals.ActiveVessel?.situation, isEva, true); ExtendedSituation extendedSituation = situationTokenizedTexts.ContainsKey(situation) ? situation : fallback; List <List <Token> > texts = situationTokenizedTexts[extendedSituation]; // debug // Historian.Print($"Random text: {isRandom}, Reset: {resetOnLaunch}, Index: {messageIndices[extendedSituation]}, isEva: {isEva}, situation: {extendedSituation}, #Messages: {texts.Count}"); if (texts != null && texts.Count < 1) { return; } UpdateMessageIndex(extendedSituation); try { TokenizedText = texts[messageIndices[extendedSituation]]; } catch (Exception e) { TokenizedText = TokenizedError; Historian.Print($"TextList error: {e.Message}, situation: {extendedSituation}, index: {messageIndices[extendedSituation]}"); } base.OnDraw(bounds); lastVessel = FlightGlobals.ActiveVessel; lastDraw = DateTime.Now; }