Exemplo n.º 1
0
        public void BattleManager_CorrectlyCalculatesDamageForShield()
        {
            int shieldDefense = 10;

            IronBattleShield shield = new IronBattleShield((shieldDefense * 2) + 1, shieldDefense, 0);

            _humanPlayer1.SetBattleShield(shield);

            _logger.SubscribeAll(_humanPlayer1.BattleShield);

            _humanPlayer1.SetDefense(shieldDefense);
            _humanPlayer1.SetStrength(_enemyPlayer1.MaxHealth + _enemyPlayer1.Defense);
            _humanPlayer1.SetMove(_basicAttackMove);
            _humanPlayer1.SetMoveTarget(_enemyPlayer1);

            _enemyPlayer1.SetSpeed(1);
            _enemyPlayer1.SetStrength(shieldDefense * 2);
            _enemyPlayer1.SetMove(_basicAttackMove);

            _chanceService.PushEventsOccur(true, false, true, false); //attacks hit, not misses

            _humanTeam = new Team(_menuManager, _humanPlayer1);
            _enemyTeam = new Team(_menuManager, _enemyPlayer1);

            _battleManager.Battle(_humanTeam, _enemyTeam);

            List <EventLog> logs = _logger.Logs;

            Assert.AreEqual(1, logs.Count);

            PhysicalDamageTakenEventArgs e = logs[0].E as PhysicalDamageTakenEventArgs;

            Assert.NotNull(e);
            Assert.AreEqual(shieldDefense, e.Damage);
        }
Exemplo n.º 2
0
        public void BattleManager_AppropriatelyExecutesDanceTechnique_DoesNotThrowException()
        {
            _enemy1.SetMove(_testTechnique);
            _enemy1.SetSpeed(10);
            _enemy2.SetMove(_doNothingMove);

            _human1.SetMove(_basicAttack);
            _human1.SetMoveTarget(_enemy1);
            _human1.SetStrength(EnemyDefenseAfterDanceMove + _enemy1.MaxHealth);

            _human2.SetMove(_basicAttack);
            _human2.SetMoveTarget(_enemy2);
            _human2.SetStrength(EnemyDefenseAfterDanceMove + _enemy2.MaxHealth);
            _chanceService.PushEventsOccur(true, false, true, false); //set up attack hits, attack crits for both attacks

            Assert.DoesNotThrow(() => { _battleManager.Battle(_humanTeam, _enemyTeam); });
        }
        private void PhysicalDamageEvent_Setup(int expectedDamage, bool showPhysicalDamageMessages)
        {
            Team             mixedPlayerTeam = new Team(_menuManager, _humanPlayer1, _enemyPlayer1);
            TestEnemyFighter enemy3          = (TestEnemyFighter)TestFighterFactory.GetFighter(TestFighterType.TestEnemy, 1);
            Team             enemyTeam       = new Team(_menuManager, _enemyPlayer2, enemy3);

            _humanPlayer1.SetSpeed(2);
            _humanPlayer1.SetStrength(expectedDamage);
            _humanPlayer1.SetMove(_basicAttackMove, 1);
            _humanPlayer1.SetMove(_runawayMove);
            _humanPlayer1.SetMoveTarget(_enemyPlayer2);
            _enemyPlayer2.SetHealth(expectedDamage + 1);

            _enemyPlayer1.SetSpeed(1);
            _enemyPlayer1.SetStrength(expectedDamage);
            _enemyPlayer1.SetMove(_basicAttackMove);
            _enemyPlayer1.SetMoveTarget(enemy3);
            enemy3.SetHealth(expectedDamage + 1);

            _mockChanceService.PushEventsOccur(true, false, true, false); //both attacks hit, neither are crits
            _logger.Subscribe(EventType.DamageTaken, _enemyPlayer2);
            _logger.Subscribe(EventType.DamageTaken, enemy3);

            _enemyPlayer2.SetMove(_doNothingMove);
            enemy3.SetMove(_doNothingMove);

            BattleManagerBattleConfiguration config = new BattleManagerBattleConfiguration
            {
                ShowIntroAndOutroMessages  = false,
                ShowExpAndLevelUpMessages  = false,
                ShowDeathMessages          = false,
                ShowAttackMessages         = false,
                ShowPhysicalDamageMessages = showPhysicalDamageMessages
            };

            _battleManager.Battle(mixedPlayerTeam, enemyTeam, config: config);
        }
Exemplo n.º 4
0
        public void TestUndoDebuffsEffect_IndividualEffect()
        {
            StatMultiplierStatus lowerAttackStatus    = new StatMultiplierStatus(3, StatType.Strength, 1.0 / 3);
            StatusMove           lowerEnemyAttackMove = new StatusMove("raise attack", TargetType.SingleEnemy, lowerAttackStatus);

            UndoDebuffsStatus undoDebuffStatus = new UndoDebuffsStatus(1);
            StatusMove        undoDebuffMove   = new StatusMove("reset stats", TargetType.SingleAlly, undoDebuffStatus);

            TestHumanFighter fighter2 = new TestHumanFighter("foo 2", 1);

            _humanTeam = new TestTeam(_humanFighter, fighter2);

            //enemy won't be killed if the status isn't assigned to _fighter2
            _enemy.SetHealth(3);
            _enemy.SetSpeed(2);
            _enemy.SetMove(lowerEnemyAttackMove);
            _chanceService.PushEventOccurs(true); //status hits
            _enemy.SetMoveTarget(fighter2);

            _humanFighter.SetSpeed(1);
            _humanFighter.SetMove(undoDebuffMove);
            _chanceService.PushEventOccurs(true); //status hits
            _humanFighter.SetMoveTarget(fighter2);
            _logger.Subscribe(EventType.StatusAdded, fighter2);
            _logger.Subscribe(EventType.StatusRemoved, fighter2);

            BattleMove attack = MoveFactory.Get(BattleMoveType.Attack);

            fighter2.SetStrength(3);
            fighter2.SetMove(attack);
            fighter2.SetMoveTarget(_enemy);
            _chanceService.PushEventOccurs(true);  //attack hits
            _chanceService.PushEventOccurs(false); //attack is not a crit

            //once Statuses are removed after battle, won't be able to
            _battleManager.Battle(_humanTeam, _enemyTeam);

            List <EventLog> logs = _logger.Logs;

            Assert.AreEqual(2, logs.Count);

            EventLog log = logs[1];

            Assert.AreEqual(EventType.StatusRemoved, log.Type);
            StatusRemovedEventArgs e = log.E as StatusRemovedEventArgs;

            Assert.NotNull(e);
            Assert.IsTrue(lowerAttackStatus.AreEqual(e.Status));
        }
Exemplo n.º 5
0
        public void SetUp()
        {
            _output        = new MockOutput();
            _input         = new MockInput();
            _menuManager   = new TestMenuManager(_input, _output);
            _chanceService = new MockChanceService();
            _battleManager = new TestBattleManager(_chanceService, _input, _output);
            _logger        = new EventLogger();

            _human     = (TestHumanFighter)TestFighterFactory.GetFighter(TestFighterType.TestHuman, 1);
            _enemy     = (TestEnemyFighter)TestFighterFactory.GetFighter(TestFighterType.TestEnemy, 1);
            _humanTeam = new TestTeam(_human);
            _enemyTeam = new Team(_menuManager, _enemy);

            _human.SetSpeed(10);
            _enemy.SetSpeed(0);

            doNothing = new DoNothingMove();
            _enemy.SetMove(doNothing);

            _fireballSpell = SpellFactory.GetSpell(MagicType.Fire, 1);
        }
        public void SetEnemy_ProperlySetsHumanControlledEnemyStats()
        {
            TestEnemyFighter enemy = (TestEnemyFighter)TestFighterFactory.GetFighter(TestFighterType.TestEnemy, 1, "Grumbles");

            enemy.SetHealth(10);
            enemy.SetMana(10);
            enemy.SetMagicStrength(2);
            enemy.SetMagicResistance(2);
            enemy.SetStrength(3);
            enemy.SetDefense(2);
            enemy.SetSpeed(5);
            enemy.SetEvade(5);
            enemy.SetLuck(20);

            Assert.AreNotEqual(enemy.MaxHealth, _fighter.MaxHealth, "maxHealth");
            Assert.AreNotEqual(enemy.MaxMana, _fighter.MaxMana, "maxMana");
            Assert.AreNotEqual(enemy.MagicStrength, _fighter.MagicStrength, "magicStrength");
            Assert.AreNotEqual(enemy.MagicResistance, _fighter.MagicResistance, "magicResistance");
            Assert.AreNotEqual(enemy.Strength, _fighter.Strength, "strength");
            Assert.AreNotEqual(enemy.Defense, _fighter.Defense, "defense");
            Assert.AreNotEqual(enemy.Speed, _fighter.Speed, "speed");
            Assert.AreNotEqual(enemy.Evade, _fighter.Evade, "evade");
            Assert.AreNotEqual(enemy.Luck, _fighter.Luck, "luck");
            Assert.AreNotEqual(enemy.DisplayName, _fighter.DisplayName, "displayName");

            _fighter.SetEnemy(enemy);

            Assert.AreEqual(enemy.MaxHealth, _fighter.MaxHealth, "maxHealth");
            Assert.AreEqual(enemy.MaxMana, _fighter.MaxMana, "maxMana");
            Assert.AreEqual(enemy.MagicStrength, _fighter.MagicStrength, "magicStrength");
            Assert.AreEqual(enemy.MagicResistance, _fighter.MagicResistance, "magicResistance");
            Assert.AreEqual(enemy.Strength, _fighter.Strength, "strength");
            Assert.AreEqual(enemy.Defense, _fighter.Defense, "defense");
            Assert.AreEqual(enemy.Speed, _fighter.Speed, "speed");
            Assert.AreEqual(enemy.Evade, _fighter.Evade, "evade");
            Assert.AreEqual(enemy.Luck, _fighter.Luck, "luck");
            Assert.AreEqual(enemy.DisplayName, _fighter.DisplayName, "displayName");
        }