コード例 #1
0
        public BlockDamageEffect(EffectAmountSettings effectAmountSettings)
        {
            effectAmountSettings.ValidateSettings();

            EffectHolder = effectAmountSettings.EffectHolder;
            Name         = effectAmountSettings.Name;
            BlockAmount  = (int)effectAmountSettings.Amount;
        }
コード例 #2
0
        public ReflectDamageEffect(EffectAmountSettings effectAmountSettings)
        {
            effectAmountSettings.ValidateSettings();

            EffectHolder        = effectAmountSettings.EffectHolder;
            Name                = effectAmountSettings.Name;
            MaxRound            = effectAmountSettings.MaxRound;
            ReflectDamageAmount = (int)effectAmountSettings.Amount;
        }
コード例 #3
0
        public void EffectAmountSettingsWithAllSettingsDoesNotThrowException()
        {
            Player player = new Player("test", PlayerClassType.Mage);
            EffectAmountSettings effectSettings = new EffectAmountSettings {
                Amount       = 50,
                EffectHolder = player,
                Name         = "test"
            };

            Assert.DoesNotThrow(() => effectSettings.ValidateSettings());
        }
コード例 #4
0
        public void EffectAmountSettingsMissingEffectHolderThrowsException()
        {
            EffectAmountSettings effectSettings = new EffectAmountSettings {
                Amount = 50,
                Name   = "test"
            };
            const string expectedErrorMessage = "EffectAmountSettings: EffectHolder has not been set.";

            Exception exception = Assert.Throws <Exception>(() => effectSettings.ValidateSettings());

            Assert.AreEqual(expectedErrorMessage, exception.Message);
        }
コード例 #5
0
        public void EffectAmountSettingsMissingAmountThrowsException()
        {
            Player player = new Player("test", PlayerClassType.Mage);
            EffectAmountSettings effectSettings = new EffectAmountSettings {
                EffectHolder = player,
                Name         = "test"
            };
            const string expectedErrorMessage = "EffectAmountSettings: Amount has not been set.";

            Exception exception = Assert.Throws <Exception>(() => effectSettings.ValidateSettings());

            Assert.AreEqual(expectedErrorMessage, exception.Message);
        }
コード例 #6
0
        public void PlayerHasBlockDamageEffectUnitTest()
        {
            Player player = new Player("test", PlayerClassType.Warrior);
            EffectAmountSettings effectAmountSettings = new EffectAmountSettings {
                Amount       = 50,
                EffectHolder = player,
                Name         = "block test"
            };
            IEffect blockEffect = new BlockDamageEffect(effectAmountSettings);

            player.Effects.Add(blockEffect);

            Assert.AreEqual(1, player.Effects.Count);
            Assert.AreEqual(true, player.Effects[0] is BlockDamageEffect);
            Assert.AreEqual(1, player.Effects[0].CurrentRound);
            Assert.AreEqual(3, player.Effects[0].MaxRound);
            Assert.AreEqual(false, player.Effects[0].IsHarmful);
            Assert.AreEqual(blockEffect.EffectHolder, player);
        }
コード例 #7
0
        public void PlayerHasReflectDamageEffectUnitTest()
        {
            Player player = new Player("test", PlayerClassType.Mage);
            EffectAmountSettings effectAmountSettings = new EffectAmountSettings {
                Amount       = 50,
                EffectHolder = player,
                MaxRound     = 4,
                Name         = "reflect damage test"
            };
            IEffect reflectEffect = new ReflectDamageEffect(effectAmountSettings);

            player.Effects.Add(reflectEffect);

            Assert.AreEqual(1, player.Effects.Count);
            Assert.AreEqual(true, player.Effects[0] is ReflectDamageEffect);
            Assert.AreEqual(1, player.Effects[0].CurrentRound);
            Assert.AreEqual(effectAmountSettings.MaxRound, player.Effects[0].MaxRound);
            Assert.AreEqual(false, player.Effects[0].IsHarmful);
            Assert.AreEqual(reflectEffect.EffectHolder, player);
        }
コード例 #8
0
        public static void CastReflectDamage(Player player, int index)
        {
            player.ManaPoints -= player.Spellbook[index].ManaCost;

            const string reflectString = "You create a shield around you that will reflect damage.";

            OutputHelper.Display.StoreUserOutput(
                Settings.FormatAttackSuccessText(),
                Settings.FormatDefaultBackground(),
                reflectString);

            EffectAmountSettings effectAmountSettings = new EffectAmountSettings {
                Amount       = player.Spellbook[index].ChangeAmount.Amount,
                EffectHolder = player,
                MaxRound     = player.Spellbook[index].ChangeAmount.ChangeMaxRound,
                Name         = player.Spellbook[index].Name
            };

            player.Effects.Add(new ReflectDamageEffect(effectAmountSettings));
        }
コード例 #9
0
        public void ProcessBlockDamageEffectOutOfCombatRoundUnitTest()
        {
            OutputHelper.Display.ClearUserOutput();
            Player player = new Player("test", PlayerClassType.Warrior);
            EffectAmountSettings effectAmountSettings = new EffectAmountSettings {
                Amount       = 50,
                EffectHolder = player,
                Name         = "block test"
            };
            BlockDamageEffect blockEffect = new BlockDamageEffect(effectAmountSettings);

            player.Effects.Add(blockEffect);
            const string blockFadeMessage = "Your block effect is fading away.";

            blockEffect.ProcessRound();

            Assert.AreEqual(blockFadeMessage, OutputHelper.Display.Output[0][2]);
            Assert.AreEqual(effectAmountSettings.Amount, blockEffect.BlockAmount);
            Assert.AreEqual(2, player.Effects[0].CurrentRound);
            Assert.AreEqual(false, blockEffect.IsEffectExpired);
        }
コード例 #10
0
        public static void UseDefenseAbility(Player player, int index)
        {
            DeductAbilityCost(player, index);

            int blockAmount = player.Abilities[index].Defensive.BlockDamage;

            string blockString = $"You start blocking your opponent's attacks! You will block {blockAmount} damage.";

            OutputHelper.Display.StoreUserOutput(
                Settings.FormatSuccessOutputText(),
                Settings.FormatDefaultBackground(),
                blockString);

            EffectAmountSettings effectAmountSettings = new EffectAmountSettings {
                Amount       = blockAmount,
                EffectHolder = player,
                Name         = player.Abilities[index].Name
            };

            player.Effects.Add(new BlockDamageEffect(effectAmountSettings));
        }
コード例 #11
0
        public void ProcessReflectDamageEffectOutOfCombatRoundUnitTest()
        {
            OutputHelper.Display.ClearUserOutput();
            Player player = new Player("test", PlayerClassType.Mage);
            EffectAmountSettings effectAmountSettings = new EffectAmountSettings {
                Amount       = 50,
                EffectHolder = player,
                MaxRound     = 4,
                Name         = "reflect damage test"
            };
            ReflectDamageEffect reflectEffect = new ReflectDamageEffect(effectAmountSettings);

            player.Effects.Add(reflectEffect);
            const string reflectMessage = "Your spell reflect is slowly fading away.";

            reflectEffect.ProcessRound();

            Assert.AreEqual(reflectMessage, OutputHelper.Display.Output[0][2]);
            Assert.AreEqual(effectAmountSettings.Amount, reflectEffect.ReflectDamageAmount);
            Assert.AreEqual(2, player.Effects[0].CurrentRound);
            Assert.AreEqual(false, reflectEffect.IsEffectExpired);
        }
コード例 #12
0
        public void ProcessReflectDamageEffectInCombatRoundUnitTest()
        {
            OutputHelper.Display.ClearUserOutput();
            Player player = new Player("test", PlayerClassType.Mage);
            EffectAmountSettings effectAmountSettings = new EffectAmountSettings {
                Amount       = 50,
                EffectHolder = player,
                MaxRound     = 4,
                Name         = "reflect damage test"
            };
            ReflectDamageEffect reflectEffect = new ReflectDamageEffect(effectAmountSettings);

            player.Effects.Add(reflectEffect);
            const int incomingDamage = 30;
            string    reflectMessage = $"You reflected {incomingDamage} damage back at your opponent!";

            reflectEffect.ProcessChangeDamageRound(incomingDamage);

            Assert.AreEqual(reflectMessage, OutputHelper.Display.Output[0][2]);
            Assert.AreEqual(2, player.Effects[0].CurrentRound);
            Assert.AreEqual(false, reflectEffect.IsEffectExpired);
        }
コード例 #13
0
        public void ProcessBlockDamageEffectInCombatRoundWhereDamageLessThanBlockAmountUnitTest()
        {
            OutputHelper.Display.ClearUserOutput();
            Player player = new Player("test", PlayerClassType.Warrior);
            EffectAmountSettings effectAmountSettings = new EffectAmountSettings {
                Amount       = 50,
                EffectHolder = player,
                Name         = "block test"
            };
            BlockDamageEffect blockEffect = new BlockDamageEffect(effectAmountSettings);

            player.Effects.Add(blockEffect);
            const int incomingDamage = 30;
            string    blockMessage   = $"Your defensive move blocked {incomingDamage} damage!";

            blockEffect.ProcessChangeDamageRound(incomingDamage);

            Assert.AreEqual(blockMessage, OutputHelper.Display.Output[0][2]);
            Assert.AreEqual(blockEffect.BlockAmount, 50 - incomingDamage);
            Assert.AreEqual(2, player.Effects[0].CurrentRound);
            Assert.AreEqual(false, blockEffect.IsEffectExpired);
        }