예제 #1
0
        public void IfAllOptionsAreDisabledThanFlagAsEmpty()
        {
            var table = new WeightedOptionTable <int>();

            table.AddEntry(1, 1);
            table.Disable(1);
            Assert.True(table.IsEmpty);
        }
예제 #2
0
 private void DisableOptionsThatAlreadyHaveSkillFocus(WeightedOptionTable <string> skillTable, IEnumerable <SkillFocus> existingSkillFocuses)
 {
     foreach (var sf in existingSkillFocuses)
     {
         if (sf != this)
         {
             ShortLog.DebugFormat("Skill Focus - Disable Skill {0}", sf.CharacterSkill.Name);
             skillTable.Disable(sf.CharacterSkill.Name);
         }
     }
 }
예제 #3
0
        public void BecauseStringComparisonsCanBeMessyIfFindingEntryByStringUseCaseInsensitiveIfString()
        {
            var table = new WeightedOptionTable <string>();

            table.AddEntry("Foo", 1);
            table.AddEntry("Bar", 2);

            table.Disable("foo");
            Assert.Equal(1, table.Enabled.Count());
            Assert.True(table.HasOption("bar"));
        }
예제 #4
0
        public void DisabledEntriesCanBeReenabled()
        {
            var table = new WeightedOptionTable <string>();

            table.AddEntry("Foo", 483);
            var entry       = table.All.First();
            var originalMax = entry.MaximumValue;

            table.Disable("Foo");
            Assert.True(entry.Disabled);
            table.Enable("Foo");
            Assert.False(entry.Disabled);
            Assert.Equal(originalMax, entry.MaximumValue);
        }
예제 #5
0
        public void EntriesCanBeDisabledWhichForcesADifferentOptionToBeChosen()
        {
            var table = new WeightedOptionTable <string>();

            table.AddEntry("Foo", 12);
            table.AddEntry("Bar", 100);

            table.Disable("Bar");
            for (int i = 0; i < 1000; i++)
            {
                var result = table.ChooseRandomly();
                Assert.Equal("Foo", result);
            }
        }
예제 #6
0
 private void FilterPreferredFeats(CharacterSheet character, WeightedOptionTable <string> preferredFeats, FeatToken token)
 {
     foreach (var entry in preferredFeats.All)
     {
         var f = feats.Find(entry.Option);
         if (FeatIsValid(f, token, character))
         {
             preferredFeats.Enable(entry.Option);
         }
         else
         {
             preferredFeats.Disable(entry.Option);
             ShortLog.DebugFormat("Preferred Feat [{0}] Token [{1}]- Not meeting requirements", f.Name, token.ToString());
         }
     }
 }
예제 #7
0
        private CharacterSkill ChooseSkill(SkillRanks skills, WeightedOptionTable <string> preferredSkills, int maxLevel)
        {
            if (!preferredSkills.IsEmpty)
            {
                var option = preferredSkills.ChooseRandomly();
                var skill  = skills.GetSkill(option);

                if (skill.Ranks < maxLevel)
                {
                    return(skill);
                }
                else
                {
                    preferredSkills.Disable(option);
                }
            }
            else
            {
                // no preferred skills so just pick class skills
                var skill = skills.GetSkills().Where(
                    x => x.ClassSkill &&
                    x.Ranks < maxLevel
                    ).ToList().ChooseOne();

                // Background skills require special attention
                // In general just take one background skill
                if (skill.Skill.IsBackgroundSkill)
                {
                    if (skill.Ranks > 0 || skills.GetSkills().Where(x => x.Skill.IsBackgroundSkill).All(x => x.Ranks == 0))
                    {
                        return(skill);
                    }
                }
                else
                {
                    return(skill);
                }
            }
            return(null);
        }