Example #1
0
        public void ParseFrenzyReturnsCorrectResult()
        {
            var frenzyGem                   = new Gem("Frenzy", 20, 20, ItemSlot.Boots, 0, 0, true);
            var frenzy                      = Skill.FromGem(frenzyGem, true);
            var definition                  = _skillDefinitions.GetSkillById("Frenzy");
            var levelDefinition             = definition.Levels[20];
            var local                       = new ModifierSource.Local.Skill("Frenzy", "Frenzy");
            var global                      = new ModifierSource.Global(local);
            var valueCalculationContextMock = new Mock <IValueCalculationContext>();
            var isMainSkillStat             = SetupIsActiveSkillInContext(valueCalculationContextMock, frenzy);
            var offHandTagsStat             = new Stat("OffHand.ItemTags");

            valueCalculationContextMock.Setup(c => c.GetValue(offHandTagsStat, NodeType.Total, PathDefinition.MainPath))
            .Returns(new NodeValue(Tags.Weapon.EncodeAsDouble()));
            var mainHandTagsStat = new Stat("MainHand.ItemTags");

            valueCalculationContextMock
            .Setup(c => c.GetValue(mainHandTagsStat, NodeType.Total, PathDefinition.MainPath))
            .Returns(new NodeValue(Tags.Ranged.EncodeAsDouble()));
            var frenzyAmountStat = new Stat("Frenzy.Amount");

            valueCalculationContextMock
            .Setup(c => c.GetValue(frenzyAmountStat, NodeType.Total, PathDefinition.MainPath))
            .Returns(new NodeValue(3));
            var baseCostStat = new Stat("Boots.0.0.Cost");

            valueCalculationContextMock
            .Setup(c => c.GetValue(baseCostStat, NodeType.Total, PathDefinition.MainPath))
            .Returns((NodeValue?)levelDefinition.ManaCost);
            var expectedModifiers =
                new (string stat, Form form, double?value, ModifierSource source, bool mainSkillOnly)[]
        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));
        }
        public ParseResult Parse(GemParserParameter parameter)
        {
            var(gem, modifierSourceEntity) = parameter;
            var skillDefinition = _skillDefinitions.GetSkillById(gem.SkillId);

            parameter.Skills.AddRange(ParseSkills(gem, skillDefinition));
            return(ParseRequirements(gem, modifierSourceEntity, skillDefinition));
        }
 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));
     }
 }
Example #5
0
 public ISkillBuilder FromId(string skillId)
 => new SkillBuilder(_statFactory, CoreBuilder.Create(_skills.GetSkillById(skillId)));
 protected SkillDefinition GetSkillDefinition(string skillId) => _skillDefinitions.GetSkillById(skillId);
Example #7
0
 public ParseResult Parse(SkillsParserParameter parameter)
 {
     var(skills, entity) = parameter;
     var(supportSkills, activeSkills) = skills.Partition(s => _skillDefinitions.GetSkillById(s.Id).IsSupport);
     return(ParseResult.Aggregate(Parse(activeSkills.ToList(), supportSkills.ToList(), entity)));
 }