Exemple #1
0
        public void CastMethod_AppropriatelyRaisesEvents([Values(false, true)] bool enemyDies)
        {
            var spellDamage = _fireballSpell.Power + _human.MagicStrength;
            int enemyHealth = spellDamage + (enemyDies ? 0 : 1);

            _enemy.SetHealth(enemyHealth);

            _human.SetDeathOnTurnEndEvent();
            _human.AddSpell(_fireballSpell);
            _human.SetMana(_fireballSpell.Cost);
            _human.SetMove(_fireballSpell);
            _human.SetMoveTarget(_enemy);

            _logger.Subscribe(EventType.ManaLost, _human);
            _logger.Subscribe(EventType.SpellSuccessful, _human);
            _logger.Subscribe(EventType.EnemyKilled, _human);

            _logger.Subscribe(EventType.MagicalDamageTaken, _enemy);
            _logger.Subscribe(EventType.Killed, _enemy);

            _battleManager.Battle(_humanTeam, _enemyTeam);

            var logs = _logger.Logs;

            int expectedLogCount = enemyDies ? 5 : 3;

            Assert.AreEqual(expectedLogCount, logs.Count);

            int i = 0;

            //first event, mana spent
            EventLog log = logs[i++];

            Assert.AreEqual(EventType.ManaLost, log.Type);
            Assert.AreEqual(_human, log.Sender);
            ManaLostEventArgs e1 = log.E as ManaLostEventArgs;

            Assert.That(e1, Is.Not.Null);
            if (e1 != null)
            {
                Assert.AreEqual(_fireballSpell.Cost, e1.ManaSpent);
            }

            //second event, magical damage taken
            log = logs[i++];
            Assert.AreEqual(EventType.MagicalDamageTaken, log.Type);
            Assert.AreEqual(_enemy, log.Sender);
            MagicalDamageTakenEventArgs e2 = log.E as MagicalDamageTakenEventArgs;

            Assert.That(e2, Is.Not.Null);
            if (e2 != null)
            {
                Assert.AreEqual(spellDamage, e2.Damage);
                Assert.AreEqual(_fireballSpell.ElementalType, e2.MagicType);
            }

            //killed event sent by enemy, potentially
            if (enemyDies)
            {
                log = logs[i++];
                Assert.AreEqual(EventType.Killed, log.Type);
                Assert.AreEqual(_enemy, log.Sender);
                KilledEventArgs e3 = log.E as KilledEventArgs;
                Assert.That(e3, Is.Not.Null);
            }

            //Spell successful
            log = logs[i++];
            Assert.AreEqual(EventType.SpellSuccessful, log.Type);
            Assert.AreEqual(_human, log.Sender);
            SpellSuccessfulEventArgs e4 = log.E as SpellSuccessfulEventArgs;

            Assert.That(e4, Is.Not.Null);
            if (e4 != null)
            {
                Assert.AreEqual(_fireballSpell, e4.Spell);
                Assert.AreEqual(spellDamage, e4.DamageDealt);
                Assert.AreEqual(_enemy, e4.TargettedFoe);
            }

            //enemy killed, potentially
            if (enemyDies)
            {
                log = logs[i];
                Assert.AreEqual(EventType.EnemyKilled, log.Type);
                Assert.AreEqual(_human, log.Sender);
                EnemyKilledEventArgs e5 = log.E as EnemyKilledEventArgs;
                Assert.That(e5, Is.Not.Null);
                if (e5 != null)
                {
                    Assert.AreEqual(_enemy, e5.Enemy);
                }
            }
        }
 private void _logManaLost(object sender, ManaLostEventArgs e)
 {
     Logs.Add(new EventLog(EventType.ManaLost, sender, e));
 }
Exemple #3
0
 public void OnManaLost(ManaLostEventArgs e)
 {
     ManaLost?.Invoke(this, e);
 }