public ParseResult Parse(IReadOnlyList <Skill> skills) { var activeSkills = new List <Skill>(); var supportSkills = new List <Skill>(skills.Count); foreach (var skill in skills) { if (_skillDefinitions.GetSkillById(skill.Id).IsSupport) { supportSkills.Add(skill); } else { activeSkills.Add(skill); } } var parseResults = new List <ParseResult>(activeSkills.Count * supportSkills.Count); foreach (var activeSkill in activeSkills) { parseResults.Add(_activeSkillParser.Parse(activeSkill)); var supportingSkills = _supportabilityTester.SelectSupportingSkills(activeSkill, supportSkills); foreach (var supportingSkill in supportingSkills) { parseResults.Add(_supportSkillParser.Parse(activeSkill, supportingSkill)); } } return(ParseResult.Aggregate(parseResults)); }
private IEnumerable <ParseResult> ParseAdditionalSkillStats(IReadOnlyList <Skill> skills, Entity entity) { var(supportSkills, activeSkills) = skills.Partition(s => _skillDefinitions.GetSkillById(s.Id).IsSupport); supportSkills = supportSkills.ToList(); foreach (var activeSkill in activeSkills) { var supportingSkills = _supportabilityTester.SelectSupportingSkills(activeSkill, supportSkills).ToList(); yield return(_additionalSkillStatParser.Parse(activeSkill, supportingSkills, entity)); } }
private IEnumerable <ParseResult> Parse(IEnumerable <Skill> activeSkills, IReadOnlyList <Skill> supportSkills, Entity entity) { foreach (var activeSkill in activeSkills) { var supportingSkills = _supportabilityTester.SelectSupportingSkills(activeSkill, supportSkills); yield return(_activeSkillParser.Parse(activeSkill, entity)); foreach (var supportingSkill in supportingSkills) { yield return(_supportSkillParser.Parse(activeSkill, supportingSkill, entity)); } } }