protected override bool CharacterClassIsAllowed(string className, Alignment alignment) { var spellcasters = collectionsSelector.SelectFrom(TableNameConstants.Set.Collection.ClassNameGroups, GroupConstants.Spellcasters); var alignmentClasses = collectionsSelector.SelectFrom(TableNameConstants.Set.Collection.ClassNameGroups, alignment.ToString()); var allowedClasses = alignmentClasses.Except(spellcasters); return allowedClasses.Contains(className); }
protected override bool CharacterClassIsAllowed(string className, Alignment alignment) { var warriors = collectionsSelector.SelectFrom(TableNameConstants.Set.Collection.ClassNameGroups, GroupConstants.Warriors); var alignmentClasses = collectionsSelector.SelectFrom(TableNameConstants.Set.Collection.ClassNameGroups, alignment.ToString()); var allowedClasses = warriors.Intersect(alignmentClasses); return allowedClasses.Contains(className); }
public IEnumerable<string> RegenerateSpecialistFields(Alignment alignment, CharacterClass characterClass, Race race) { if (characterClass.SpecialistFields.Any() == false || race.Metarace == RaceConstants.Metaraces.None) return characterClass.SpecialistFields; var allClassSpecialistFields = collectionsSelector.SelectFrom(TableNameConstants.Set.Collection.SpecialistFields, characterClass.Name); var allMetaraceSpecialistFields = collectionsSelector.SelectFrom(TableNameConstants.Set.Collection.SpecialistFields, race.Metarace); var applicableFields = allClassSpecialistFields.Intersect(allMetaraceSpecialistFields); if (applicableFields.Any() == false) return characterClass.SpecialistFields; var nonAlignmentFields = collectionsSelector.SelectFrom(TableNameConstants.Set.Collection.ProhibitedFields, alignment.ToString()); var possibleSpecialistFields = applicableFields.Except(nonAlignmentFields); return PopulateFields(characterClass.SpecialistFields.Count(), possibleSpecialistFields); }
public void ClassNameRandomizerTestsSetup() { mockCollectionsSelector = new Mock<ICollectionsSelector>(); mockPercentileResultSelector = new Mock<IPercentileSelector>(); generator = new ConfigurableIterationGenerator(); alignment = new Alignment(); alignmentClasses = new List<string>(); groupClasses = new List<string>(); alignment.Goodness = "goodness"; alignment.Lawfulness = "lawfulness"; mockCollectionsSelector.Setup(s => s.SelectFrom(TableNameConstants.Set.Collection.ClassNameGroups, classNameGroup)).Returns(groupClasses); mockPercentileResultSelector.Setup(s => s.SelectAllFrom(It.IsAny<string>())).Returns(new[] { ClassName, AlignmentClassName, GroupClassName }); mockCollectionsSelector.Setup(s => s.SelectFrom(TableNameConstants.Set.Collection.ClassNameGroups, alignment.ToString())).Returns(alignmentClasses); alignmentClasses.Add(AlignmentClassName); groupClasses.Add(GroupClassName); }
public void AttractCohortOfDifferingAlignment() { mockLeadershipSelector.Setup(s => s.SelectCohortLevelFor(9265)).Returns(42); mockBooleanPercentileSelector.Setup(s => s.SelectFrom(TableNameConstants.Set.TrueOrFalse.AttractCohortOfDifferentAlignment)).Returns(true); var incompatibleAlignment = new Alignment("incompatible alignment"); var cohortAlignment = new Alignment("cohort alignment"); allowedAlignments.Add(cohortAlignment.ToString()); mockAlignmentGenerator.SetupSequence(g => g.GenerateWith(mockAnyAlignmentRandomizer.Object)) .Returns(incompatibleAlignment).Returns(cohortAlignment); var cohort = new Character(); mockCharacterGenerator.Setup(g => g.GenerateWith(mockSetAlignmentRandomizer.Object, mockAnyPlayerClassNameRandomizer.Object, mockSetLevelRandomizer.Object, mockAnyBaseRaceRandomizer.Object, mockAnyMetaraceRandomizer.Object, mockRawStatRandomizer.Object)) .Returns(cohort); var generatedCohort = leadershipGenerator.GenerateCohort(9266, 90210, leaderAlignment, "class name"); Assert.That(generatedCohort, Is.EqualTo(cohort)); mockSetAlignmentRandomizer.VerifySet(r => r.SetAlignment = cohortAlignment); }
private IEnumerable<string> GenerateSpecialistFields(CharacterClass characterClass, Alignment alignment) { var allSpecialistFields = collectionsSelector.SelectFrom(TableNameConstants.Set.Collection.SpecialistFields, characterClass.Name); var specialistFieldQuantities = adjustmentsSelector.SelectFrom(TableNameConstants.Set.Adjustments.SpecialistFieldQuantities); var nonAlignmentFields = collectionsSelector.SelectFrom(TableNameConstants.Set.Collection.ProhibitedFields, alignment.ToString()); var possibleSpecialistFields = allSpecialistFields.Except(nonAlignmentFields); return PopulateFields(specialistFieldQuantities[characterClass.Name], possibleSpecialistFields); }
private string DetermineMetaraceSpecies(Alignment alignment, string metarace) { if (metarace != RaceConstants.Metaraces.HalfDragon) return string.Empty; return collectionsSelector.SelectRandomFrom(TableNameConstants.Set.Collection.DragonSpecies, alignment.ToString()); }
public void FollowerCannotOpposeAlignment() { var incompatibleAlignment = new Alignment("incompatible alignment"); var followerAlignment = new Alignment("cohort alignment"); allowedAlignments.Add(followerAlignment.ToString()); mockAlignmentGenerator.SetupSequence(g => g.GenerateWith(mockAnyAlignmentRandomizer.Object)) .Returns(incompatibleAlignment).Returns(followerAlignment); var follower = new Character(); mockCharacterGenerator.Setup(g => g.GenerateWith(mockSetAlignmentRandomizer.Object, mockAnyPlayerClassNameRandomizer.Object, mockSetLevelRandomizer.Object, mockAnyBaseRaceRandomizer.Object, mockAnyMetaraceRandomizer.Object, mockRawStatRandomizer.Object)) .Returns(follower); var generatedFollower = leadershipGenerator.GenerateFollower(9266, leaderAlignment, "class name"); Assert.That(generatedFollower, Is.EqualTo(follower)); mockSetLevelRandomizer.VerifySet(r => r.SetLevel = 9266); mockSetAlignmentRandomizer.VerifySet(r => r.SetAlignment = followerAlignment); }