private float DrawUnlockableHyperlinks(Rect rect, ResearchProjectDef project)
        {
            List <Pair <ResearchPrerequisitesUtility.UnlockedHeader, List <Def> > > list = UnlockedDefsGroupedByPrerequisites(project);

            if (list.NullOrEmpty())
            {
                return(0f);
            }
            float yMin = rect.yMin;
            float x    = rect.x;

            foreach (Pair <ResearchPrerequisitesUtility.UnlockedHeader, List <Def> > item in list)
            {
                ResearchPrerequisitesUtility.UnlockedHeader first = item.First;
                rect.x = x;
                if (!first.unlockedBy.Any())
                {
                    Widgets.LabelCacheHeight(ref rect, "Unlocks".Translate() + ":");
                }
                else
                {
                    Widgets.LabelCacheHeight(ref rect, string.Concat("UnlockedWith".Translate(), " ", HeaderLabel(first), ":"));
                }
                rect.x    += 6f;
                rect.yMin += rect.height;
                foreach (Def item2 in item.Second)
                {
                    Widgets.HyperlinkWithIcon(hyperlink: new Dialog_InfoCard.Hyperlink(item2), rect: new Rect(rect.x, rect.yMin, rect.width, 24f));
                    rect.yMin += 24f;
                }
            }
            return(rect.yMin - yMin);
        }
        private string HeaderLabel(ResearchPrerequisitesUtility.UnlockedHeader headerProject)
        {
            StringBuilder stringBuilder = new StringBuilder();
            string        value         = "";

            for (int i = 0; i < headerProject.unlockedBy.Count; i++)
            {
                ResearchProjectDef researchProjectDef = headerProject.unlockedBy[i];
                string             text = researchProjectDef.LabelCap;
                if (!researchProjectDef.IsFinished)
                {
                    text = text.Colorize(MissingPrerequisiteColor);
                }
                stringBuilder.Append(text).Append(value);
                value = ", ";
            }
            return(stringBuilder.ToString());
        }