public void FirstBattle_BarbarianRunsAway_3TurnsAfterShieldDestroyed()
        {
            _barbarian.PreBattleSetup(_enemyTeam, _humanTeam, _output, BattleConfigurationSpecialFlag.FirstBarbarianBattle);

            BattleMoveWithTarget moveWithTarget = _barbarian.SetupMove(_enemyTeam, _humanTeam);
            BattleMove           battleMove     = moveWithTarget.Move;
            MultiTurnBattleMove  multiTurnMove  = battleMove as MultiTurnBattleMove;

            Assert.NotNull(multiTurnMove);
            Assert.AreEqual(3, multiTurnMove.Moves.Count);

            for (int i = 0; i < 3; ++i)
            {
                battleMove = multiTurnMove.Moves[i];

                if (i < 2)
                {
                    Assert.IsAssignableFrom <DoNothingMove>(battleMove);
                }
                else
                {
                    Assert.AreEqual(BattleMoveType.Runaway, battleMove.MoveType);
                }
            }
        }
Beispiel #2
0
 public MultiTurnSelection(IFighter owner, MultiTurnBattleMove move, int index, IFighter target)
 {
     Move   = move;
     Owner  = owner;
     Index  = index;
     Target = target;
 }
Beispiel #3
0
        protected BattleMove AfterSelectMove(BattleMove move)
        {
            var multiMove = move as MultiTurnBattleMove;

            if (multiMove != null)
            {
                _multiMove      = multiMove;
                _multiMoveIndex = 1;
            }

            return(move);
        }
Beispiel #4
0
        protected BattleMove BeforeSelectMove()
        {
            BattleMove ret = null;

            if (_multiMove != null)
            {
                ret = _multiMove.Moves[_multiMoveIndex++];

                if (_multiMoveIndex >= _multiMove.Moves.Count)
                {
                    _multiMove      = null;
                    _multiMoveIndex = 0;
                }
            }

            return(ret);
        }
        public void SetupMove_CorrectlyHandlesMultiTurnMoves()
        {
            Goblin goblin = (Goblin)FighterFactory.GetFighter(FighterType.Goblin, 1);

            _enemyTeam = new Team(_menuManager, goblin);

            MultiTurnBattleMove multiTurnMove =
                goblin.AvailableMoves.OfType <MultiTurnBattleMove>().First(am => am.MoveType == BattleMoveType.MultiTurn);

            _fighter.SetEnemy(goblin);

            _ownTeam = new Team(_menuManager, _fighter);

            _input.Push("2", "1");

            BattleMoveWithTarget returnedMove = _fighter.SetupMove(_ownTeam, _enemyTeam);

            Assert.AreEqual(multiTurnMove, returnedMove.Move);

            returnedMove = _fighter.SetupMove(_ownTeam, _enemyTeam);

            Assert.AreEqual(multiTurnMove.Moves[1], returnedMove.Move);
        }
        public void SelectMove_MultiTurnMoveSelected()
        {
            var enemy     = (TestEnemyFighter)TestFighterFactory.GetFighter(TestFighterType.TestEnemy, 1);
            var enemyTeam = new Team(_menuManager, enemy);

            var human     = (TestHumanFighter)TestFighterFactory.GetFighter(TestFighterType.TestHuman, 1);
            var humanTeam = new Team(_menuManager, human);

            var fooMove = new DoNothingMove("Foo!");
            var barMove = new DoNothingMove("Bar!");
            var bazMove = new AttackBattleMove("Baz", TargetType.SingleEnemy, 50, 100);

            var multiTurnMove = new MultiTurnBattleMove("multi turn move", TargetType.SingleEnemy,
                                                        fooMove,
                                                        barMove,
                                                        bazMove);

            enemy.SetAvailableMove(multiTurnMove);

            var selectedMove = enemy.SetupMove(enemyTeam, humanTeam);

            Assert.AreEqual(multiTurnMove, selectedMove.Move);

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

            enemy.SetAvailableMove(attack);

            selectedMove = enemy.SetupMove(enemyTeam, humanTeam);
            Assert.AreEqual(barMove, selectedMove.Move);

            selectedMove = enemy.SetupMove(enemyTeam, humanTeam);
            Assert.AreEqual(bazMove, selectedMove.Move);

            selectedMove = enemy.SetupMove(enemyTeam, humanTeam);
            Assert.AreEqual(attack, selectedMove.Move);
        }