protected void PrintStatusAddedMessage(IFighter fighter, SpellCostMultiplierStatus status)
        {
            string increaseOrDecrease = status.Multiplier < 1 ? "decreased" : "increased";
            string output             = $"{fighter.DisplayName} has {increaseOrDecrease} cost for magic spells for {GetDurationString(status)}!";

            _output.WriteLine(output);
        }
Пример #2
0
        public void CastSpell_CorrectlySpendsCastersMana_BothTeamAndIndividualSpellCostMultiplierStatuses(
            [Values(2, 4, 8)] int spellCost,
            [Values(1.5, 3.0)] double firstMultiplier,
            [Values(1.0, 2.0)] double secondMultiplier)
        {
            SpellCostMultiplierStatus firstStatus  = new SpellCostMultiplierStatus(1, firstMultiplier);
            SpellCostMultiplierStatus secondStatus = new SpellCostMultiplierStatus(1, secondMultiplier);
            Spell spell = new Spell("foo", MagicType.Wind, SpellType.Attack, TargetType.SingleEnemy, spellCost, 5);
            int   expectedRemainingMana = 100 - (int)(spellCost * firstMultiplier * secondMultiplier);

            _human.SetMana(100);
            _human.SetDeathOnTurnEndEvent();
            _human.AddSpell(spell);
            _human.SetMove(spell);
            _human.SetMoveTarget(_enemy);

            _human.AddStatus(firstStatus);
            _humanTeam.AddStatus(secondStatus);

            _enemy.SetHealth(100);

            _battleManager.Battle(_humanTeam, _enemyTeam);

            Assert.AreEqual(expectedRemainingMana, _human.CurrentMana);
        }
Пример #3
0
        public void CastSpell_CorrectlySpendsCastersMana_SpellCostMultiplierStatus(
            [Values(1, 4, 8)] int spellCost,
            [Values(2.0, 3.0)] double multiplier,
            [Values(false, true)] bool teamStatus)
        {
            SpellCostMultiplierStatus status = new SpellCostMultiplierStatus(1, multiplier);
            Spell spell = new Spell("foo", MagicType.Wind, SpellType.Attack, TargetType.SingleEnemy, spellCost, 5);
            int   expectedRemainingMana = 100 - (int)(spellCost * multiplier);

            _human.SetMana(100);
            _human.SetDeathOnTurnEndEvent();
            _human.AddSpell(spell);
            _human.SetMove(spell);
            _human.SetMoveTarget(_enemy);

            if (teamStatus)
            {
                _humanTeam.AddStatus(status);
            }
            else
            {
                _human.AddStatus(status);
            }
            _enemy.SetHealth(100);

            _battleManager.Battle(_humanTeam, _enemyTeam);

            Assert.AreEqual(expectedRemainingMana, _human.CurrentMana);
        }
Пример #4
0
        public void CastSpell_CorrectlyChecksUserHasEnoughMana_SpellCostMultiplierStatus([Values(4, 8)] int spellCost,
                                                                                         [Values(2, 3)] int costMultiplier1,
                                                                                         [Values(null, 4)] int?costMultiplier2)
        {
            SpellCostMultiplierStatus status1 = new SpellCostMultiplierStatus(1, costMultiplier1);
            Spell spell = new Spell("foo", MagicType.Wind, SpellType.Attack, TargetType.SingleEnemy, spellCost, 5);

            int realCost = spellCost * costMultiplier1;

            if (costMultiplier2.HasValue)
            {
                realCost *= costMultiplier2.Value;
                SpellCostMultiplierStatus status2 = new SpellCostMultiplierStatus(1, costMultiplier2.Value);
                _human.AddStatus(status2);
            }

            int availableMana = realCost - 1;

            _human.SetMana(realCost, availableMana);
            _human.AddStatus(status1);
            _human.SetDeathOnTurnEndEvent();
            _human.AddSpell(spell);
            _human.SetMove(spell);
            _human.SetMoveTarget(_enemy);

            _enemy.SetHealth(100);

            _battleManager.Battle(_humanTeam, _enemyTeam);

            Assert.AreEqual(availableMana, _human.CurrentMana);
        }
        protected void PrintStatusAddedMessage(object sender, StatusAddedEventArgs e)
        {
            Status status = e.Status;

            IFighter senderAsFighter = sender as IFighter;

            if (senderAsFighter == null)
            {
                throw new InvalidOperationException("BattleManager.PrintStatusAddedMessage() should only subscribe to instances of IFighter");
            }

            CriticalChanceMultiplierStatus  criticalChanceStatus       = status as CriticalChanceMultiplierStatus;
            StatMultiplierStatus            statMultiplierStatus       = status as StatMultiplierStatus;
            MagicMultiplierStatus           magicMultiplierStatus      = status as MagicMultiplierStatus;
            MagicResistanceMultiplierStatus resistanceMultiplierStatus = status as MagicResistanceMultiplierStatus;
            ReflectStatus             reflectStatus             = status as ReflectStatus;
            SpellCostMultiplierStatus spellCostMultiplierStatus = status as SpellCostMultiplierStatus;
            AutoEvadeStatus           autoEvadeStatus           = status as AutoEvadeStatus;
            CounterAttackStatus       counterAttackStatus       = status as CounterAttackStatus;
            BlindStatus blindStatus = status as BlindStatus;

            if (criticalChanceStatus != null)
            {
                PrintStatusAddedMessage(senderAsFighter, criticalChanceStatus);
            }
            if (statMultiplierStatus != null)
            {
                PrintStatusAddedMessage(senderAsFighter, statMultiplierStatus);
            }
            if (magicMultiplierStatus != null)
            {
                PrintStatusAddedMessage(senderAsFighter, magicMultiplierStatus);
            }
            if (resistanceMultiplierStatus != null)
            {
                PrintStatusAddedMessage(senderAsFighter, resistanceMultiplierStatus);
            }
            if (reflectStatus != null)
            {
                PrintStatusAddedMessage(senderAsFighter, reflectStatus);
            }
            if (spellCostMultiplierStatus != null)
            {
                PrintStatusAddedMessage(senderAsFighter, spellCostMultiplierStatus);
            }
            if (autoEvadeStatus != null)
            {
                PrintStatusAddedMessage(senderAsFighter, autoEvadeStatus);
            }
            if (counterAttackStatus != null)
            {
                PrintStatusAddedMessage(senderAsFighter, counterAttackStatus);
            }
            if (blindStatus != null)
            {
                PrintStatusAddedMessage(senderAsFighter, blindStatus);
            }
        }
Пример #6
0
        public override bool AreEqual(Status status)
        {
            bool areEqual = false;

            SpellCostMultiplierStatus costMultiplierStatus = status as SpellCostMultiplierStatus;

            if (costMultiplierStatus != null)
            {
                areEqual = base.AreEqual(costMultiplierStatus);
            }

            return(areEqual);
        }