public static IEnumerable <Dialog_InfoCard.Hyperlink> FocusObjectsForPawnHyperlinks(Pawn pawn) { for (int i = 0; i < DefDatabase <MeditationFocusDef> .AllDefsListForReading.Count; i++) { MeditationFocusDef meditationFocusDef = DefDatabase <MeditationFocusDef> .AllDefsListForReading[i]; if (!meditationFocusDef.CanPawnUse(pawn)) { continue; } if (!focusObjectHyperlinksPerTypeCache.ContainsKey(meditationFocusDef)) { List <Dialog_InfoCard.Hyperlink> list2 = new List <Dialog_InfoCard.Hyperlink>(); foreach (ThingDef item in DefDatabase <ThingDef> .AllDefsListForReading) { CompProperties_MeditationFocus compProperties = item.GetCompProperties <CompProperties_MeditationFocus>(); if (compProperties != null && compProperties.focusTypes.Contains(meditationFocusDef)) { list2.Add(new Dialog_InfoCard.Hyperlink(item)); } } focusObjectHyperlinksPerTypeCache[meditationFocusDef] = list2; } List <Dialog_InfoCard.Hyperlink> list = focusObjectHyperlinksPerTypeCache[meditationFocusDef]; for (int j = 0; j < list.Count; j++) { yield return(list[j]); } } }
public static string FocusTypeAvailableExplanation(Pawn pawn) { string text = ""; for (int i = 0; i < DefDatabase <MeditationFocusDef> .AllDefsListForReading.Count; i++) { MeditationFocusDef meditationFocusDef = DefDatabase <MeditationFocusDef> .AllDefsListForReading[i]; if (!meditationFocusDef.CanPawnUse(pawn)) { continue; } text = text + "MeditationFocusCanUse".Translate(meditationFocusDef.label).RawText + ":\n" + meditationFocusDef.EnablingThingsExplanation(pawn) + "\n\n"; if (!focusObjectsPerTypeCache.ContainsKey(meditationFocusDef)) { List <string> list = new List <string>(); foreach (ThingDef item in DefDatabase <ThingDef> .AllDefsListForReading) { CompProperties_MeditationFocus compProperties = item.GetCompProperties <CompProperties_MeditationFocus>(); if (compProperties != null && compProperties.focusTypes.Contains(meditationFocusDef)) { list.AddDistinct(item.label); } } focusObjectsPerTypeCache[meditationFocusDef] = list.ToLineList(" - ", capitalizeItems: true); } text += "MeditationFocusObjects".Translate(meditationFocusDef.label).CapitalizeFirst() + ":\n" + focusObjectsPerTypeCache[meditationFocusDef] + "\n\n"; } return(text); }
public static IEnumerable <MeditationFocusDef> FocusTypesAvailableForPawn(Pawn pawn) { for (int i = 0; i < DefDatabase <MeditationFocusDef> .AllDefsListForReading.Count; i++) { MeditationFocusDef meditationFocusDef = DefDatabase <MeditationFocusDef> .AllDefsListForReading[i]; if (meditationFocusDef.CanPawnUse(pawn)) { yield return(meditationFocusDef); } } }