public void ShadeDoesNotTargetFoeAlreadyInflictedWithBlindness() { StatusMove darkFogMove = _shade1.GetExecutableMoves(_humanTeam)[_darkFogIndex] as StatusMove; _humanFighter.AddStatus(darkFogMove?.Status); Egg blindEgg = new Egg(MagicType.Fire); blindEgg.AddStatus(darkFogMove?.Status); Team humanTeam = new Team(TestMenuManager.GetTestMenuManager(), _humanFighter, blindEgg, new Egg(MagicType.Fire)); _chanceService.PushWhichEventOccurs(_darkFogIndex); BattleMoveWithTarget moveWithTarget = null; //will throw if multiple targets Assert.DoesNotThrow(() => moveWithTarget = _shade1.SetupMove(_shadeTeam, humanTeam)); Assert.NotNull(moveWithTarget); Assert.AreEqual(darkFogMove, moveWithTarget.Move); Assert.AreEqual(humanTeam.Fighters[2], moveWithTarget.Target); }
public void ShadeCorrectlyTargetsShade_AbsorbMove() { //arrange _chanceService.PushWhichEventOccurs(_absorptionMoveIndex); Team mixedTeam = new Team(TestMenuManager.GetTestMenuManager(), _shade1, _shade2, FighterFactory.GetFighter(FighterType.Fairy, 1), FighterFactory.GetFighter(FighterType.Goblin, 1), FighterFactory.GetFighter(FighterType.Golem, 1), FighterFactory.GetFighter(FighterType.Ogre, 1)); //act BattleMoveWithTarget moveWithTarget = null; //will throw if the filters do not appropriately filter out all non shades Assert.DoesNotThrow(() => moveWithTarget = _shade1.SetupMove(mixedTeam, _humanTeam)); //assert Assert.True(moveWithTarget.Move is ShadeAbsorbingMove); Assert.AreEqual(_shade2, moveWithTarget.Target); }
public void Team_TestRemove_CorrectlyUpdatesDisplayNames() { Goblin goblin1 = (Goblin)FighterFactory.GetFighter(FighterType.Goblin, 1); Goblin goblin2 = (Goblin)FighterFactory.GetFighter(FighterType.Goblin, 1); Goblin goblin3 = (Goblin)FighterFactory.GetFighter(FighterType.Goblin, 1); Goblin goblin4 = (Goblin)FighterFactory.GetFighter(FighterType.Goblin, 1); Team testTeam = new Team(TestMenuManager.GetTestMenuManager(), goblin1, goblin2, goblin3, goblin4 ); Assert.AreEqual("D", goblin4.AppendText); testTeam.Remove(goblin2); testTeam.Remove(goblin3); Assert.AreEqual("B", goblin2.AppendText); }
public void Team_AddStatusMethod_CorrectlyAssignsStatusesToFighters([Values(2, 4)] int numberOfFighters) { IList <IFighter> fighters = new List <IFighter>(); for (var i = 0; i < numberOfFighters; ++i) { fighters.Add(TestFighterFactory.GetFighter(TestFighterType.TestEnemy, 1)); } Team team = new Team(TestMenuManager.GetTestMenuManager(), fighters.ToArray()); Status status = new CriticalChanceMultiplierStatus(2, 1.5); team.AddStatus(status); foreach (IFighter fighter in fighters) { Assert.AreEqual(1, fighter.Statuses.Count); Assert.IsTrue(status.AreEqual(fighter.Statuses[0])); } }
public void SetUp() { _chanceService = new MockChanceService(); _output = new MockOutput(); _input = new MockInput(); _battleManager = new TestBattleManager(_chanceService, _input, _output); _config = new SilentBattleConfiguration(); _battleManager.SetConfig(_config); _teamFactory = new TestTeamFactory(_chanceService); _mapManager = new MockMapManager(); _decisionManager = new MockDecisionManager(new GodRelationshipManager()); _regionFactory = new MockRegionFactory(_decisionManager); _groupingFactory = new GroupingFactory(_chanceService, _teamFactory, new FighterFactory()); _humanFighter1 = (TestHumanFighter)TestFighterFactory.GetFighter(TestFighterType.TestHuman, 1); _humanFighter2 = (TestHumanFighter)TestFighterFactory.GetFighter(TestFighterType.TestHuman, 1); _humanTeam = new Team(TestMenuManager.GetTestMenuManager(), _humanFighter1, _humanFighter2); _oneEnemyTeam = GetSingleEnemyTeam(); }
public void CorrectlyHandles_MultiTurnMoves() { DoNothingMove firstMove = new DoNothingMove("foo"); DoNothingMove secondMove = new DoNothingMove("bar"); DoNothingMove thirdMove = new DoNothingMove("baz"); TestMultiTurnMove multiTurnMove = new TestMultiTurnMove("foo", TargetType.Self, firstMove, secondMove, thirdMove); TestEnemyFighter enemy = (TestEnemyFighter)TestFighterFactory.GetFighter(TestFighterType.TestEnemy, 1); enemy.SetMove(new DoNothingMove("fwop")); _enemyTeam = new Team(TestMenuManager.GetTestMenuManager(), enemy); TestHumanFighter human = (TestHumanFighter)TestFighterFactory.GetFighter(TestFighterType.TestHuman, 1); human.AddSpecialMove(multiTurnMove); _playerTeam = new Team(_manager, human); _manager.InitializeForBattle(_playerTeam, _enemyTeam); _input.Push(new List <string> { "fight", "special move", "foo", "1" }); List <HumanFighter> inputList = new List <HumanFighter> { human }; List <BattleMoveWithTarget> returnedList = _manager.GetInputs(inputList); Assert.AreEqual(firstMove, returnedList[0].Move); returnedList = _manager.GetInputs(inputList); Assert.AreEqual(secondMove, returnedList[0].Move); returnedList = _manager.GetInputs(inputList); Assert.AreEqual(thirdMove, returnedList[0].Move); }
public void MalevolenceCharge_CorrectlyCapsMalevolenceAfterAbsorption() { int maxMalevolenceLevel = Shade.MaxMalevolenceLevel; List <Shade> shadeFighters = new List <Shade> { _shade1, _shade2 }; //arrange for (var i = 0; i < maxMalevolenceLevel; ++i) { List <BattleMoveWithTarget> battleMoves = shadeFighters.Select(s => new BattleMoveWithTarget(_malevolenceChargeMove, s, s)).ToList(); _battleManager.SetBattleMoveQueues(new BattleMoveQueue(battleMoves)); } //third turn, first shade absorbs second _battleManager.SetBattleMoveQueues(new BattleMoveQueue(new List <BattleMoveWithTarget> { new BattleMoveWithTarget(_shadeAbsorbingMove, _shade2, _shade1) })); //have to set which bonus is set when Shade is absorbed _chanceService.PushWhichEventOccurs(0); //fourth turn, shade attacks and hits _battleManager.SetBattleMoveQueues(new BattleMoveQueue(new List <BattleMoveWithTarget> { new BattleMoveWithTarget(_malevolenceAttackMove, _humanFighter, _shade1) })); _chanceService.PushAttackHitsNotCrit(); _humanFighter.SetDefense(_shade1.Strength); _humanFighter.SetHealth(maxMalevolenceLevel * 2); _humanFighter.SetMove(_runawayMove); Team shadeTeam = new Team(TestMenuManager.GetTestMenuManager(), shadeFighters.OfType <IFighter>().ToList()); //act _battleManager.Battle(_humanTeam, shadeTeam); //assert Assert.AreEqual(maxMalevolenceLevel, _humanFighter.CurrentHealth); }
public void SetUp() { _input = new MockInput(); _output = new MockOutput(); _menuManager = new TestMenuManager(_input, _output); _chanceService = new MockChanceService(); _battleManager = new BattleManager(_chanceService, _input, _output); _human = (TestHumanFighter)TestFighterFactory.GetFighter(TestFighterType.TestHuman, 1); _humanTeam = new TestTeam(_menuManager, _human); _enemy = (TestEnemyFighter)TestFighterFactory.GetFighter(TestFighterType.TestEnemy, 1); _enemyTeam = new Team(_menuManager, _enemy); _doNothingMove = (DoNothingMove)MoveFactory.Get(BattleMoveType.DoNothing); _restoreHealthEffect = new RestorationBattleMoveEffect(RestorationType.Health, 5, BattleMoveEffectActivationType.OnAttackHit); _attackWithRestoreHealthEffect = new AttackBattleMove("foo", TargetType.SingleEnemy, 100, 10, effects: _restoreHealthEffect); _restoreManaEffect = new RestorationBattleMoveEffect(RestorationType.Mana, 5, BattleMoveEffectActivationType.OnAttackHit); _attackWithRestoreManaEffect = new AttackBattleMove("foo", TargetType.SingleEnemy, 100, 10, effects: _restoreManaEffect); }
public void Setup() { _logger = new EventLogger(); _input = new MockInput(); _output = new MockOutput(); _menuManager = new TestMenuManager(_input, _output); _chanceService = new MockChanceService(); _battleManager = new BattleManager(_chanceService, _input, _output); _humanPlayer1 = (TestHumanFighter)TestFighterFactory.GetFighter(TestFighterType.TestHuman, 1, "Ted"); _humanPlayer2 = (TestHumanFighter)TestFighterFactory.GetFighter(TestFighterType.TestHuman, 1, "Jed"); _enemyPlayer1 = (TestEnemyFighter)TestFighterFactory.GetFighter(TestFighterType.TestEnemy, 1, "Enemy"); _enemyPlayer2 = (TestEnemyFighter)TestFighterFactory.GetFighter(TestFighterType.TestEnemy, 1, "Enemy"); _humanTeam = new Team(_menuManager, _humanPlayer1, _humanPlayer2); _enemyTeam = new Team(_menuManager, _enemyPlayer1, _enemyPlayer2); _shield = new ElementalBattleShield(5, 0, ShieldMagicResistance, MagicType.None); _logger.SubscribeAll(_shield); }
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 SetUp() { _input = new MockInput(); _output = new MockOutput(); _menuManager = new TestMenuManager(_input, _output); _chanceService = new MockChanceService(); _battleManager = new TestBattleManager(_chanceService, _input, _output); _combiner = new TestFieldEffectCombiner(); _logger = new EventLogger(); _enemy1 = (TestEnemyFighter)TestFighterFactory.GetFighter(TestFighterType.TestEnemy, 1); _enemy1.SetDefense(OriginalDefense); _enemy2 = (TestEnemyFighter)TestFighterFactory.GetFighter(TestFighterType.TestEnemy, 1); _enemy2.SetDefense(OriginalDefense); _enemyTeam = new Team(_menuManager, _enemy1, _enemy2); _human1 = (TestHumanFighter)TestFighterFactory.GetFighter(TestFighterType.TestHuman, 1); _human1.SetDefense(OriginalDefense); _human2 = (TestHumanFighter)TestFighterFactory.GetFighter(TestFighterType.TestHuman, 1); _human2.SetDefense(OriginalDefense); _humanTeam = new TestTeam(_human1, _human2); _testTechnique = (TestDanceMove)TestMoveFactory.Get(TargetType.Field, moveType: BattleMoveType.Dance); _testTechnique.AddEffect(_raiseTeamDefense50Percent); _testTechnique.AddEffect(_lowerEnemyDefense50Percent); _testTechnique.SetDuration(_testTechniqueDefaultDuration); _testTechnique.SetDanceEffect(DanceEffectType.Fire); var firstTurn = (TestDoNothingMove)TestMoveFactory.Get(moveType: BattleMoveType.DoNothing); firstTurn.SetMessage(FirstTurnMessage); _testTechnique.AddMove(firstTurn); var secondTurn = (TestDoNothingMove)TestMoveFactory.Get(moveType: BattleMoveType.DoNothing); secondTurn.SetMessage("Continue the Defense dance"); _testTechnique.AddMove(secondTurn); }
public void Setup() { _input = new MockInput(); _output = new MockOutput(); _menuManager = new TestMenuManager(_input, _output); _chanceService = new MockChanceService(); _battleManager = new TestBattleManager(_chanceService, _input, _output); TestFighterFactory.SetChanceService(_chanceService); _chicken = (MegaChicken)FighterFactory.GetFighter(FighterType.MegaChicken, 1); _enemyTeam = new Team(_menuManager, _chicken); _hero = (TestHumanFighter)TestFighterFactory.GetFighter(TestFighterType.TestHuman, 1, "Hero"); _sidekick = (TestHumanFighter)TestFighterFactory.GetFighter(TestFighterType.TestHuman, 1, "SideKick"); _humanTeam = new TestTeam(new List <HumanFighter> { _hero, _sidekick }); _castPrefix = $"{_chicken.DisplayName} draws in the power of its magic eggs, sacrificing them and casts "; }
public void BattleCorrectlyEnds_AllShadesSealed([Range(1, 3)] int numberShades) { List <Bell> bells = GetBells(BellType.Copper); List <Shade> shades = new List <Shade>(); int chargeMoveIndex = -1; for (int i = numberShades; i > 0; --i) { shades.Add(new Shade(1, _chanceService, 1)); } ShadeFighterGrouping shadeGrouping = new ShadeFighterGrouping(_chanceService, shades.ToArray()); _shadeTeam = new Team(TestMenuManager.GetTestMenuManager(), shadeGrouping); chargeMoveIndex = shades[0].GetExecutableMoves(_humanTeam).FindIndex(am => am.MoveType == BattleMoveType.Special); for (int i = numberShades; i > 0; --i) { _input.Push("special", "pray copper", "1"); _chanceService.PushEventOccurs(true); //sealing is successful for (int j = i; j > 0; --j) { _chanceService.PushWhichEventOccurs(chargeMoveIndex); } } //act BattleEndStatus battleEndStatus = _battleManager.Battle(_humanTeam, _shadeTeam, bells.Cast <TerrainInteractable>().ToList()); Assert.AreEqual(BattleEndStatus.Victory, battleEndStatus); }
public void Team_AddStatusMethod_CorrectlyDoesNotAssignsStatusToDefeatedFighters([Values(3, 5)] int numberOfFighters) { IList <IFighter> fighters = new List <IFighter>(); numberOfFighters += 2; for (var i = 0; i < numberOfFighters; ++i) { fighters.Add(TestFighterFactory.GetFighter(TestFighterType.TestEnemy, 1)); } int lastIndex = numberOfFighters - 1; fighters[0].PhysicalDamage(fighters[0].MaxHealth); fighters[lastIndex].PhysicalDamage(fighters[lastIndex].MaxHealth); Team team = new Team(TestMenuManager.GetTestMenuManager(), fighters.ToArray()); Status status = new CriticalChanceMultiplierStatus(2, 1.5); team.AddStatus(status); for (var i = 0; i < numberOfFighters; ++i) { IFighter fighter = fighters[i]; if (i == 0 || i == lastIndex) { Assert.AreEqual(0, fighter.Statuses.Count); } else { Assert.AreEqual(1, fighter.Statuses.Count); Assert.IsTrue(status.AreEqual(fighter.Statuses[0])); } } }