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);
         }
     }
 }