private Vector2 DrawGroupedNodes(IEnumerable <ExpertiseNode> expertiseList, float max, ref Vector2 pos) { Vector2 maxView = pos; var techsList = expertiseList.Select(x => x.Tech); var skillSet = TechTracker.FindSkills(x => x.Techs.Any(y => techsList.Contains(y))).OrderByDescending(x => PawnToShowInfoAbout.skills.GetSkill(x).Level); foreach (var skill in skillSet) { var filtered = expertiseList.Where(x => skill.Techs.Contains(x.Tech)).ToList(); if (filtered.NullOrEmpty()) { continue; } var skillRatio = (float)PawnToShowInfoAbout.skills.GetSkill(skill).Level / SkillRecord.MaxLevel; Rect groupTitle = DrawGroupTitle(pos, skill, skillRatio, filtered); pos.y += groupTitle.height + margin; DrawResearchNodes(filtered, max, ref pos, true); if (!fullTechs) { pos.y += margin; } if (maxView.y < pos.y) { maxView.y = pos.y; } if (fullTechs) { breakColumn(ref pos); } if (pos.x > maxView.x) { maxView.x = fullTechs ? pos.x : pos.x + columnWidth; } } return(maxView); }
private static bool SkillIsRelevant(SkillDef skill, TechLevel level) { return(TechTracker.FindSkills(x => x.Skill == skill && x.Techs.Any(y => y.techLevel == level)).Any()); }