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); } } }
public MultiTurnSelection(IFighter owner, MultiTurnBattleMove move, int index, IFighter target) { Move = move; Owner = owner; Index = index; Target = target; }
protected BattleMove AfterSelectMove(BattleMove move) { var multiMove = move as MultiTurnBattleMove; if (multiMove != null) { _multiMove = multiMove; _multiMoveIndex = 1; } return(move); }
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); }