public void ThrowsExceptionIfCannotApplyModifierBecauseStatIsNotFound() { var container = new ComponentContainer(); var mod = new ValueStatModifier("Stat", 10, "Foo"); Assert.Throws(typeof(StatisticNotFoundException), () => container.Add(mod)); }
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); }
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); }
public void StatsCanHaveAMinimumValueThatClampTheResult() { var stat = new BasicStat("Stat!"); stat.Minimum = 3; var mod = new ValueStatModifier(-20); stat.AddModifier(mod); Assert.Equal(stat.TotalValue, 3); }
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()); }
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()); }
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()); }
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); }
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); }
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); }
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()); }
/// <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); }
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); }
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); }
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()); }
/// <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); }