コード例 #1
0
        public void ThrowsExceptionIfCannotApplyModifierBecauseStatIsNotFound()
        {
            var container = new ComponentContainer();
            var mod       = new ValueStatModifier("Stat", 10, "Foo");

            Assert.Throws(typeof(StatisticNotFoundException), () => container.Add(mod));
        }
コード例 #2
0
        public void ExecuteStep(CharacterSheet character)
        {
            var baseHitpoints = new ValueStatModifier((int)character.Class.HitDice);
            var hitpoints     = character.FindStat(StatNames.HitPoints);

            hitpoints.AddModifier(baseHitpoints);
            hitpoints.AddModifier(character.AbilityScores.GetAbility(AbilityScoreTypes.Constitution).UniversalStatModifier);
        }
コード例 #3
0
        public void StatsCanHaveMaximumValuesThatClampTheResult()
        {
            var stat = new BasicStat("Stat 1");

            stat.Maximum = 29;
            var mod = new ValueStatModifier(30);

            stat.AddModifier(mod);
            Assert.Equal(stat.TotalValue, 29);
        }
コード例 #4
0
        public void StatsCanHaveAMinimumValueThatClampTheResult()
        {
            var stat = new BasicStat("Stat!");

            stat.Minimum = 3;
            var mod = new ValueStatModifier(-20);

            stat.AddModifier(mod);
            Assert.Equal(stat.TotalValue, 3);
        }
コード例 #5
0
        public void ValueModifiersChangeTheModifierValue()
        {
            var yaml     = @"---
name: Damage
dice: 1d8";
            var diceStat = new DiceStatistic(yaml.ParseYaml());
            var mod      = new ValueStatModifier("Damage", 6, "modifier");

            diceStat.AddModifier(mod);
            Assert.Equal("1d8+6", diceStat.DisplayString());
        }
コード例 #6
0
        public void ModificationToAnAdjustmentAreReflectedInTotalScore()
        {
            var skill     = new Skill("Chew", AbilityScoreTypes.Strength, false);
            var ability   = new AbilityScore(AbilityScoreTypes.Strength, 10);
            var charSkill = new CharacterSkill(skill, ability, false);
            var adj       = new ValueStatModifier("Chew", 0, "Teeth");

            charSkill.AddModifier(adj);
            Assert.Equal(0, charSkill.Score());
            adj.Modifier = 5;
            Assert.Equal(5, charSkill.Score());
        }
コード例 #7
0
        public void StatModifiersCanHaveConditionalModifiers()
        {
            var stat = new BasicStat("TestStat", 10);
            var mod  = new ValueStatModifier("Skill", 5, "bonus");

            mod.Condition = "vs. Giants";
            stat.AddModifier(mod);
            Assert.Equal(10, stat.TotalValue);
            Assert.Equal(15, stat.GetConditionalValue("vs. Giants"));
            Assert.Equal(1, stat.GetConditions().Count());
            Assert.Equal("vs. Giants", stat.GetConditions().First());
        }
コード例 #8
0
        public void ExecuteStep(CharacterSheet character)
        {
            var cup = new Cup();

            cup.AddDie(new Die(character.Class.HitDice));
            var roll      = cup.Roll();
            var modifier  = new ValueStatModifier(roll);
            var hitpoints = character.FindStat(StatNames.HitPoints);

            hitpoints.AddModifier(modifier);
            hitpoints.AddModifier(character.AbilityScores.GetAbility(AbilityScoreTypes.Constitution).UniversalStatModifier);
        }
コード例 #9
0
        public void YouCanAddAnAdjustmentToAdjustTheTotals()
        {
            var score = new AbilityScore(AbilityScoreTypes.Strength, 15);
            var adj   = new ValueStatModifier(
                "Strength",
                2,
                "racial"
                );

            score.AddModifier(adj);
            Assert.Equal(17, score.TotalValue);
            Assert.Equal(3, score.TotalModifier);
        }
コード例 #10
0
        public void SkillsRecalculateWhenAbilityIsUpdated()
        {
            var skill     = new Skill("Chew", AbilityScoreTypes.Strength, false);
            var ability   = new AbilityScore(AbilityScoreTypes.Strength, 10);
            var charSkill = new CharacterSkill(skill, ability, false);

            var oldVal     = charSkill.Score();
            var adjustment = new ValueStatModifier(2);

            adjustment.Modifier = 6;
            ability.AddModifier(adjustment);
            Assert.True(charSkill.Score() > oldVal);
        }
コード例 #11
0
        public void SkillsCanHaveAdjustmentsFromTraitsOrFeats()
        {
            var adjust = new ValueStatModifier(
                "Fly",
                2,
                "Bonus");
            var flySkill  = new Skill("Fly", AbilityScoreTypes.Dexterity, false);
            var charSkill = new CharacterSkill(flySkill, new AbilityScore(AbilityScoreTypes.Dexterity, 10), false);

            charSkill.AddModifier(adjust);

            Assert.Equal(2, charSkill.Score());
        }
コード例 #12
0
        /// <summary>
        /// Setups the skill modifiers.
        /// </summary>
        private void SetupSkillModifiers()
        {
            this.PositiveSizeModifier = new ValueStatModifier("Attack and Defense", 0, "size");
            this.NegativeSizeModifier = new ValueStatModifier("Attack and Defense", 0, "size");
            this.StealthAdj           = new ValueStatModifier("Stealth", 0, "size");
            this.FlyAdj = new ValueStatModifier("Fly", 0, "size");


            this.Modifiers = new List <IValueStatModifier>();
            this.Modifiers.Add(this.StealthAdj);
            this.Modifiers.Add(this.FlyAdj);
            this.Modifiers.Add(this.PositiveSizeModifier);
            this.Modifiers.Add(this.NegativeSizeModifier);
        }
コード例 #13
0
        public void IfStatModifierHasStatisticTypeSetDoNotApplyToUnmatchingTypes()
        {
            var contain = new ComponentContainer();
            var custom  = new CustomStatType("Stat");
            var stat    = new BasicStat("Stat 2");
            var mod     = new ValueStatModifier("%stat%", 10, "foo");

            mod.StatisticType = "Tests.Utility.CustomStatType";

            contain.Add(custom);
            contain.Add(stat);
            contain.Add(mod);
            Assert.Equal(10, custom.TotalValue);
            Assert.Equal(0, stat.TotalValue);
        }
コード例 #14
0
        public void StatModifiersShouldApplyToAllMatchingStatistics()
        {
            var contain = new ComponentContainer();
            var stat1   = new BasicStat("A Statistic");
            var stat2   = new BasicStat("A Statistic");

            contain.Add(stat1);
            contain.Add(stat2);

            var mod = new ValueStatModifier("A Statistic", 10, "foo");

            contain.Add(mod);
            Assert.Equal(10, stat1.TotalValue);
            Assert.Equal(10, stat2.TotalValue);
        }
コード例 #15
0
        public void AddingAModifierWillIncreaseThePowerOfWeaponTraining()
        {
            var wt        = new WeaponTraining(yaml.ParseYaml());
            var character = CharacterTestTemplates.AverageBob();

            character.Add(wt);
            var modYaml  = @"---
name: Weapon Training
modifier: 1
modifier-type: level-up";
            var modifier = new ValueStatModifier(modYaml.ParseYaml());

            character.Add(modifier);
            Assert.Equal(2, wt.TotalValue);
            Assert.Equal(string.Format("Weapon Training ({0} +2)", wt.Group), wt.DisplayString());
        }
コード例 #16
0
        /// <summary>
        /// Parses the yaml.
        /// </summary>
        /// <returns>The yaml.</returns>
        /// <param name="modifierNode">Modifier node.</param>
        /// <param name="source">Source of the modifier.</param>
        public static IList <IValueStatModifier> ParseYaml(IEnumerable <IObjectStore> modifierNode, string source)
        {
            IList <IValueStatModifier> modifiers = new List <IValueStatModifier>();

            foreach (var mod in modifierNode)
            {
                var statName  = mod.GetString("stat");
                var amount    = mod.GetInteger("modifier");
                var type      = mod.GetString("type");
                var condition = mod.GetStringOptional("condition");
                var name      = mod.GetStringOptional("name");
                if (!string.IsNullOrEmpty(name))
                {
                    name = source + " " + name;
                }
                else
                {
                    name = source;
                }
                IValueStatModifier modifier;

                modifier = new ValueStatModifier(
                    statName,
                    amount,
                    type);
                if (!string.IsNullOrEmpty(condition))
                {
                    modifier = new ConditionalStatModifier(
                        modifier,
                        condition
                        );
                }

                modifiers.Add(modifier);
            }

            return(modifiers);
        }