コード例 #1
0
        public void Test_BasicAttack_AbilityScoreRangedWeaponCombinations(int strength, int constitution, int dexterity, int intelligence,
            RangedType type, WeaponHandedness handedness, WeaponWeight weight, int expectedAttackBonus, int expectedDamageDiceCount, 
            DiceType expectedDamageDiceType, int expectedDamageBonus, int expectedRange)
        {
            Character character;
            BasicAttack basicAttack;

            character = new Character(new int[] { strength, constitution, dexterity, intelligence },
                new NullOrigin(ScoreType.Wisdom), new NullOrigin(ScoreType.Charisma), ScoreType.Acrobatics);
            character.SetHeldItem(Hand.Main, new RangedWeapon(type, handedness, weight));
            character.Update();

            basicAttack = character.GetPowers().First(x => x is BasicAttack) as BasicAttack;
            Assert.That(basicAttack, !Is.Null, "Basic Attack is null");
            Assert.That(basicAttack.Attacks.Count, Is.EqualTo(1), "Incorrect number of Basic Attack attacks");
            Assert.That(basicAttack.Attacks[0].AttackBonus.Total, Is.EqualTo(expectedAttackBonus),
                string.Format("Incorrect Basic Attack attack bonus: {0}", basicAttack.Attacks[0].AttackBonus));
            Assert.That(basicAttack.Attacks[0].Damage.Dice, Is.EqualTo(new Dice(expectedDamageDiceCount, expectedDamageDiceType)),
                "Incorrect Basic Attack damage");
            Assert.That(basicAttack.Attacks[0].DamageBonus.Total, Is.EqualTo(expectedDamageBonus),
                string.Format("Incorrect Basic Attack damage bonus: {0}", basicAttack.Attacks[0].DamageBonus));
            Assert.That(basicAttack.AttackTypeAndRange.AttackType, Is.EqualTo(AttackType.Ranged),
                "Incorrect Basic Attack attack type");
            Assert.That(basicAttack.AttackTypeAndRange.Range, Is.EqualTo(expectedRange.ToString()),
                "Incorrect Basic Attack range");
        }
コード例 #2
0
 /// <summary>
 /// Get the ranged weapon's name.
 /// </summary>
 /// <param name="rangedType">
 /// Whether the weapon requires ammunition.
 /// </param>
 /// <param name="handedness">
 /// Whether the weapon is one or two handed.
 /// </param>
 /// <param name="weight">
 /// Whether the weapon is light or heavy.
 /// </param>
 /// <returns>
 /// The weapon's name.
 /// </returns>
 internal static string GetRangedWeaponName(RangedType rangedType, WeaponHandedness handedness, WeaponWeight weight)
 {
     return string.Format("{0} {1}-handed {2}",
         weight == WeaponWeight.Heavy ? "Heavy" : "Light",
         handedness == WeaponHandedness.TwoHanded ? "two" : "one",
         rangedType == RangedType.Weapon ? "ranged weapon" : "gun");
 }
コード例 #3
0
 /// <summary>
 /// Create a new <see cref="MeleeWeapon"/>.
 /// </summary>
 /// <param name="handedness">
 /// Is the weapon one or two handed?
 /// </param>
 /// <param name="weight">
 /// is the weapon light or heavy?
 /// </param>
 public MeleeWeapon(WeaponHandedness handedness, WeaponWeight weight)
     : base(WeaponHelper.GetMeleeWeaponName(handedness, weight), handedness, weight)
 {
     // Do nothing
 }
コード例 #4
0
 /// <summary>
 /// Get the melee weapon's name.
 /// </summary>
 /// <param name="handedness">
 /// Whether the weapon is one or two handed.
 /// </param>
 /// <param name="weight">
 /// Whether the weapon is light or heavy.
 /// </param>
 /// <returns>
 /// The weapon's name.
 /// </returns>
 public static string GetMeleeWeaponName(WeaponHandedness handedness, WeaponWeight weight)
 {
     return string.Format("{0} {1}-handed melee weapon",
         weight == WeaponWeight.Heavy ? "Heavy" : "Light",
         handedness == WeaponHandedness.TwoHanded ? "two" : "one");
 }
コード例 #5
0
ファイル: Weapon.cs プロジェクト: Curlystraw/Moonrise
        public Weapon(WeaponType type, WeaponWeight weight, WeaponPrefix prefix, WeaponInfix infix, WeaponSuffix suffix)
        {
            this.itemClass = ItemClass.Weapon;
            this.type      = type;
            this.weight    = weight;
            this.prefix    = prefix;
            this.infix     = infix;
            this.suffix    = suffix;

            attackBonus = 0;
            attackMult  = 1;
            speedMult   = 1;
            hpBonus     = 0;

            switch (prefix)
            {
            case WeaponPrefix.Great:
                attackMult = 1.15;
                break;

            case WeaponPrefix.Mighty:
                attackMult = 1.25;
                break;

            case WeaponPrefix.Masterful:
                attackMult = 1.4;
                break;

            case WeaponPrefix.Soldier:
                attackMult = 1.2;
                break;

            case WeaponPrefix.Knight:
                attackMult = 1.3;
                break;

            case WeaponPrefix.Captain:
                attackMult = 1.45;
                break;

            case WeaponPrefix.Ogre:
                attackMult = 1.3;
                break;

            case WeaponPrefix.Titan:
                attackMult = 1.4;
                break;

            case WeaponPrefix.Dragon:
                attackMult = 1.6;
                break;

            case WeaponPrefix.Medic:
                hpBonus = 20;
                break;

            case WeaponPrefix.Doctor:
                hpBonus = 30;
                break;

            case WeaponPrefix.Surgeon:
                hpBonus = 40;
                break;
            }

            switch (infix)
            {
            case WeaponInfix.Bronze:
                attackBonus = 10;
                break;

            case WeaponInfix.Steel:
                attackBonus = 15;
                break;

            case WeaponInfix.Silver:
                attackBonus = 20;
                break;

            case WeaponInfix.Platinum:
                attackBonus = 25;
                break;

            case WeaponInfix.Titanium:
                attackBonus = 30;
                break;

            case WeaponInfix.Diamond:
                attackBonus = 35;
                break;

            case WeaponInfix.Obsidian:
                attackBonus = 40;
                break;
            }

            switch (suffix)
            {
            case WeaponSuffix.Wind:
                speedMult = 1.15;
                break;

            case WeaponSuffix.Gale:
                speedMult = 1.2;
                break;

            case WeaponSuffix.Storm:
                speedMult = 1.25;
                break;
            }

            string weightStr, prefixStr, infixStr, typeStr, suffixStr;

            weightStr = weight.ToString();

            prefixStr = prefix.ToString();
            if (prefixApostrophes.Contains(prefix))
            {
                prefixStr += "'s";
            }

            infixStr = infix.ToString();

            typeStr = type.ToString();

            suffixStr = suffix.ToString();
            if (suffix == WeaponSuffix.Sight)
            {
                suffixStr = "True " + suffixStr;
            }
            if (!suffixNoThes.Contains(suffix))
            {
                suffixStr = "of the " + suffixStr;
            }

            name = String.Join(" ", new[] {
                weightStr, prefixStr, infixStr, typeStr, suffixStr
            });
        }
コード例 #6
0
 public void TestWeaponAbilityScore(WeaponWeight weight, IEnumerable<ScoreType> expectedAbilityScores)
 {
     Assert.That(new MeleeWeapon(WeaponHandedness.TwoHanded, weight).BasicAttackAbilityScores,
         Is.EquivalentTo(expectedAbilityScores));
 }
コード例 #7
0
 public void TestName(RangedType rangedType, WeaponHandedness handedness, WeaponWeight weight, string expectedName)
 {
     Assert.That(new RangedWeapon(rangedType, handedness, weight).Name, Is.EqualTo(expectedName));
 }
コード例 #8
0
 public void TestExpectedRange(RangedType rangedType, WeaponHandedness handedness, WeaponWeight weight, int expectedRange)
 {
     Assert.That(new RangedWeapon(rangedType, handedness, weight).Range, Is.EqualTo(expectedRange));
 }
コード例 #9
0
 public void TestExpectedDamageDice(RangedType rangedType, WeaponHandedness handedness, WeaponWeight weight, int expectedNumber, DiceType expectedDiceType)
 {
     Assert.That(new RangedWeapon(rangedType, handedness, weight).Damage, Is.EqualTo(new Dice(expectedNumber, expectedDiceType)));
 }
コード例 #10
0
 public void TestAccuracyBonus(RangedType rangedType, WeaponHandedness handedness, WeaponWeight weight, int expectedAccuracyBonus)
 {
     Assert.That(new RangedWeapon(rangedType, handedness, weight).AccuracyBonus, Is.EqualTo(expectedAccuracyBonus));
 }
コード例 #11
0
 public void TestName(WeaponHandedness handedness, WeaponWeight weight, string expectedName)
 {
     Assert.That(new MeleeWeapon(handedness, weight).Name, Is.EqualTo(expectedName));
 }
コード例 #12
0
 public void TestAccuracyBonus(WeaponWeight weight, int expectedBonus)
 {
     Assert.That(new MeleeWeapon(WeaponHandedness.OneHanded, weight).AccuracyBonus, Is.EqualTo(expectedBonus));
 }
コード例 #13
0
 /// <summary>
 /// Create a new <see cref="RangedWeapon"/>.
 /// </summary>
 /// <param name="rangedType">
 /// Is the weapon a gun?
 /// </param>
 /// <param name="handedness">
 /// Is the weapon one or two handed?
 /// </param>
 /// <param name="weight">
 /// is the weapon light or heavy?
 /// </param>
 public RangedWeapon(RangedType rangedType, WeaponHandedness handedness, WeaponWeight weight)
     : base(WeaponHelper.GetRangedWeaponName(rangedType, handedness, weight), handedness, weight)
 {
     Type = rangedType;
 }
コード例 #14
0
 /// <summary>
 /// Create a new <see cref="Weapon"/>.
 /// </summary>
 /// <param name="name">
 /// The weapon's name.
 /// </param>
 /// <param name="handedness">
 /// Is the weapon one or two handed?
 /// </param>
 /// <param name="weight">
 /// is the weapon light or heavy?
 /// </param>
 /// <exception cref="ArgumentNullException">
 /// <paramref name="name"/> cannot be null or empty.
 /// </exception>
 protected Weapon(string name, WeaponHandedness handedness, WeaponWeight weight)
     : base(name, Slot.Hands)
 {
     Handedness = handedness;
     Weight = weight;
 }