private IEnumerable <Feat> GetFeats( int quantity, int baseAttackBonus, Dictionary <string, Ability> abilities, IEnumerable <Skill> skills, IEnumerable <Attack> attacks, IEnumerable <Feat> specialQualities, int casterLevel, Dictionary <string, Measurement> speeds, int naturalArmor, int hands, string size, bool canUseEquipment) { var featSelections = featsSelector.SelectFeats(); //INFO: Calling immediate execution, so this doesn't reevaluate every time the collection is called var availableFeats = featSelections .Where(f => f.ImmutableRequirementsMet( baseAttackBonus, abilities, skills, attacks, casterLevel, speeds, naturalArmor, hands, size, canUseEquipment)) .ToArray(); var feats = PopulateFeatsRandomlyFrom(abilities, skills, baseAttackBonus, specialQualities, availableFeats, quantity, casterLevel, attacks); return(feats); }
public void BonusFeatsHaveCorrectData(string creature) { Assert.That(table, Contains.Key(creature)); var feats = featsSelector.SelectFeats(); var datas = table[creature] .Select(helper.ParseEntry) .Where(d => feats.Any(f => f.Feat == d[DataIndexConstants.SpecialQualityData.FeatNameIndex])); var testCaseSpecialQualityDatas = GetTestCaseData(creature); foreach (var data in datas) { var matchingFeat = feats.First(f => f.Feat == data[DataIndexConstants.SpecialQualityData.FeatNameIndex]); Assert.That(testCaseSpecialQualityDatas.Any(d => d[DataIndexConstants.SpecialQualityData.FeatNameIndex] == matchingFeat.Feat), Is.True, $"TEST CASE: {matchingFeat.Feat}"); var testCaseData = testCaseSpecialQualityDatas.First(d => d[DataIndexConstants.SpecialQualityData.FeatNameIndex] == matchingFeat.Feat); Assert.That(testCaseData[DataIndexConstants.SpecialQualityData.FrequencyQuantityIndex], Is.EqualTo(matchingFeat.Frequency.Quantity.ToString()), $"TEST CASE: {matchingFeat.Feat} - Frequency Quantity"); Assert.That(testCaseData[DataIndexConstants.SpecialQualityData.FrequencyTimePeriodIndex], Is.EqualTo(matchingFeat.Frequency.TimePeriod), $"TEST CASE: {matchingFeat.Feat} - Frequency Time Period"); Assert.That(testCaseData[DataIndexConstants.SpecialQualityData.PowerIndex], Is.EqualTo(matchingFeat.Power.ToString()), $"TEST CASE: {matchingFeat.Feat} - Power"); Assert.That(data[DataIndexConstants.SpecialQualityData.FrequencyQuantityIndex], Is.EqualTo(matchingFeat.Frequency.Quantity.ToString()), $"XML: {matchingFeat.Feat} - Frequency Quantit"); Assert.That(data[DataIndexConstants.SpecialQualityData.FrequencyTimePeriodIndex], Is.EqualTo(matchingFeat.Frequency.TimePeriod), $"XML: {matchingFeat.Feat} - Frequency Time Period"); Assert.That(data[DataIndexConstants.SpecialQualityData.PowerIndex], Is.EqualTo(matchingFeat.Power.ToString()), $"XML: {matchingFeat.Feat} - Power"); } }