public void CastEggs_Level3Spells([Range(0, 2)] int level3EggIndex) { Tuple <MagicType, string> level3EggCombo = _level3Eggs[level3EggIndex]; string spellName = level3EggCombo.Item2; MagicType spellType = level3EggCombo.Item1; int typeIndex = Globals.EggMagicTypes.ToList().IndexOf(spellType); Spell spell = SpellFactory.GetSpell(spellName); int damage = spell.Power + _chicken.MagicStrength; _hero.SetHealth(damage + 1); _hero.SetMove(_doNothingMove, 4); _hero.SetMove(_runawayMove); _hero.SetMoveTarget(_hero); _sidekick.SetMove(_doNothingMove); _sidekick.SetMoveTarget(_sidekick); //first 3 determine the egg type, the fourth is who the chicken is targetting _chanceService.PushWhichEventsOccur(typeIndex, typeIndex, typeIndex, 0); _battleManager.SuppressBattleIntroAndOutroMessages(); _battleManager.Battle(_humanTeam, _enemyTeam); var outputs = _output.GetOutputs(); Assert.AreEqual(5, outputs.Length); // 1 for each egg lay, 1 for actual attack, 1 to output how much damage the fighter took Assert.AreEqual($"{_castPrefix}{spellName}!\n", outputs[3].Message); Assert.AreEqual(1, _hero.CurrentHealth); }
public void TeamClass_CorrectlyGetsInputs_TeamComprisedOnlyOfEnemyFighters() { Team testTeam = new Team(_menuManager, _enemyPlayer1, _enemyPlayer2); _chanceService.PushWhichEventsOccur(0, 0); List <BattleMoveWithTarget> selectedMoves = testTeam.GetInputs(_enemyTeam); Assert.AreEqual(2, selectedMoves.Count); }
public void CorrectNumberOfBattlesBeforeBoss([Range(1, 3)] int numberBattles) { TeamConfiguration bossConfiguration = new TeamConfiguration(new EnemyConfiguration(FighterType.Barbarian, 5), new EnemyConfiguration(FighterType.ShieldGuy, 2), new EnemyConfiguration(FighterType.ShieldGuy, 3)); SubRegion subRegion = new SubRegion(WorldSubRegion.Fields, numberBattles, new[] { new ChanceEvent <int>(1, 1) }, new[] { FighterType.Egg }, new BattlefieldConfiguration(bossConfiguration)); SubRegion[] subRegions = { subRegion }; Region fakeFieldsRegion = new Region(WorldRegion.Fields, new BattleMove[0], subRegions); _regionFactory.SetRegion(WorldRegion.Fields, fakeFieldsRegion); for (int i = 0; i < numberBattles; ++i) { Team team = GetSingleEnemyTeam(); _teamFactory.PushTeams(team); _chanceService.PushWhichEventOccurs(0); } _regionManager = GetRegionManager(); IFighter target = TestFighterFactory.GetFighter(TestFighterType.TestEnemy, 1); target.PhysicalDamage(target.MaxHealth); _humanFighter1.SetMove(_basicAttackMove, numberBattles); _humanFighter1.SetMoveTarget(target); _chanceService.PushAttackHitsNotCrit(numberBattles); _humanFighter1.SetMove(_runawayMove); _humanFighter2.SetMove(_doNothingMove); _chanceService.PushWhichEventsOccur(0, 0, 0, 0, 0, 0); //used for when the bosses are selecting their moves _regionManager.Battle(_battleManager, _humanTeam); List <Team> enemyTeams = _battleManager.GetAllEnemyTeams(); Assert.AreEqual(numberBattles + 1, enemyTeams.Count); Team bossTeam = enemyTeams[numberBattles]; Assert.AreEqual(3, bossTeam.Fighters.Count); Assert.True(bossTeam.Fighters.Exists(f => f is Barbarian && f.Level == 5)); Assert.True(bossTeam.Fighters.Exists(f => f is ShieldGuy && f.Level == 2)); Assert.True(bossTeam.Fighters.Exists(f => f is ShieldGuy && f.Level == 3)); }
public void BattleManagerCorrectlyExecutesBellSealingMove() { //Arrange List <Shade> shades = _shadeGrouping.GetShades(); _humanFighter.SetSpeed(shades[0].Speed + 1); List <Bell> bells = GetBells(BellType.Copper, BellType.Silver); _input.Push("special", "pray copper", "1", "run", "y"); _chanceService.PushEventOccurs(true); //sealing is effective int attackIndex = shades[0].AvailableMoves.FindIndex(am => am.MoveType == BattleMoveType.Attack); _chanceService.PushWhichEventsOccur(attackIndex, attackIndex, attackIndex); _chanceService.PushEventsOccur(false, false); //both remaining shades will attack //Act _battleManager.Battle(_humanTeam, _shadeTeam, bells.Cast <TerrainInteractable>().ToList()); //Assert //1st shade was sealed Assert.AreEqual(0, shades[0].CurrentHealth); //other shades did not absorb its power Assert.AreEqual(1, shades[1].ShadeExperience); Assert.AreEqual(1, shades[2].ShadeExperience); }
public void PersonalityQuiz_RandomizedEntries_CorrectlyHandlesNeitherOption() { HumanFighter dante = (HumanFighter)FighterFactory.GetFighter(FighterType.HumanControlledPlayer, 1, "Dante"); HumanFighter arrokoh = (HumanFighter)FighterFactory.GetFighter(FighterType.HumanControlledPlayer, 1, "Arrokoh"); MockChanceService chanceService = new MockChanceService(); for (var i = 0; i < 8; ++i) { chanceService.PushWhichEventsOccur(i == 5 ? 3 : 0); } _decisionManager.PersonalityQuiz(dante, arrokoh, true, chanceService); Assert.AreEqual(0, _relationshipManager.GetFighterRelationshipValue(dante, GodEnum.MalevolentGod), "sixth question should not raise malevolent god relationship for either fighters for 'neither' result"); Assert.AreEqual(0, _relationshipManager.GetFighterRelationshipValue(arrokoh, GodEnum.MalevolentGod), "sixth question should not raise malevolent god relationship for either fighters for 'neither' result"); Assert.AreEqual(1, _relationshipManager.GetFighterRelationshipValue(dante, GodEnum.MercyGod), "sixth question should raise mercy god relationship for both fighters for 'neither' result"); Assert.AreEqual(1, _relationshipManager.GetFighterRelationshipValue(arrokoh, GodEnum.MercyGod), "sixth question should raise mercy god relationship for both fighters for 'neither' result"); }
public void PersonalityQuiz_RandomizedEntries_CorrectlySetsInitializationValues([Values(0, 1)] int selectedFighterInput) { HumanFighter dante = (HumanFighter)FighterFactory.GetFighter(FighterType.HumanControlledPlayer, 1, "Dante"); HumanFighter arrokoh = (HumanFighter)FighterFactory.GetFighter(FighterType.HumanControlledPlayer, 1, "Arrokoh"); HumanFighter selectedFighter = selectedFighterInput == 0 ? dante : arrokoh; HumanFighter notSelectedFighter = selectedFighterInput == 0 ? arrokoh : dante; int luckBefore = selectedFighter.Luck; MockChanceService chanceService = new MockChanceService(); for (var i = 0; i < 8; ++i) { chanceService.PushWhichEventsOccur(selectedFighterInput); } _decisionManager.PersonalityQuiz(dante, arrokoh, true, chanceService); int luckAfter = selectedFighter.Luck; //who is more enigmatic? Assert.Contains(PersonalityFlag.Enigmatic, selectedFighter.PersonalityFlags, "first question should assign enigmatic flag"); //who always wins at cards? Assert.AreEqual(10, luckAfter - luckBefore, "second question should raise luck"); //who is more likely to seek treasure? Assert.Contains(PersonalityFlag.Adventurous, selectedFighter.PersonalityFlags, "third question should assign adventurous flag"); //who sometimes watches the stars at night? Assert.Contains(PersonalityFlag.Dreamer, selectedFighter.PersonalityFlags, "fourth question should assign dreamer flag"); //who is better at solving maze puzzles? Assert.AreEqual(1, _relationshipManager.GetFighterRelationshipValue(selectedFighter, GodEnum.IntellectGod), "fifth question should raise IntellectGod relationship"); Assert.Contains(PersonalityFlag.MazeSolver, selectedFighter.PersonalityFlags, "fifth quesiton should assign mazeSolver flag"); //who would succumb to an evil gem? Assert.AreEqual(1, _relationshipManager.GetFighterRelationshipValue(selectedFighter, GodEnum.MalevolentGod), "sixth question should raise malevolent god relationship for selected fighter"); Assert.AreEqual(1, _relationshipManager.GetFighterRelationshipValue(notSelectedFighter, GodEnum.MercyGod), "sixth question should raise mercy god relationship for not selected fighter"); //who believes in ghosts? Assert.AreEqual(1, _relationshipManager.GetFighterRelationshipValue(notSelectedFighter, GodEnum.MachineGod), "seventh question should raise Machine God relationship for selected fighter"); //who eats the last donut without asking? Assert.Contains(PersonalityFlag.SelfishDonutEater, selectedFighter.PersonalityFlags, "eigth question should assign selfishDonutEater flag"); }
public void Level1ShieldGuy_DoesNotTryToSelectShieldFortifyingMoves_NoAlliesWithShields() { _chanceService.PushWhichEventsOccur(0); //have to set this up to prevent error _level1ShieldGuy.SelectMove(_shieldGuyTeam, _humanTeam); double[] lastEventOccursArgs = _chanceService.LastEventOccursArgs; Assert.AreEqual(2, lastEventOccursArgs.Length); Assert.AreEqual(0.2, lastEventOccursArgs[0]); Assert.AreEqual(0.8, lastEventOccursArgs[1]); _chanceService.PushWhichEventsOccur(0); //have to set this up to prevent error BattleMove returnedMove = _level1ShieldGuy.SelectMove(_shieldGuyTeam, _humanTeam); Assert.AreEqual(BattleMoveType.Attack, returnedMove.MoveType); _chanceService.PushWhichEventsOccur(1); //have to set this up to prevent error returnedMove = _level1ShieldGuy.SelectMove(_shieldGuyTeam, _humanTeam); Assert.IsTrue(returnedMove is ShieldMove); }
public void ShadeCorrectlyTargetsShadeWithLowestHealth_AbsorbMove() { //arrange _logger.Subscribe(_shade1, EventType.ShadeAbsorbed); _shade2.PhysicalDamage(_shade2.MaxHealth + _shade2.Defense - 1); _chanceService.PushWhichEventsOccur( _absorptionMoveIndex, //shade A's move _malevolenceChargeIndex, //shade B's move _malevolenceChargeIndex, //shade C's move 0, //absorption bonus _malevolenceChargeIndex, _malevolenceChargeIndex, _malevolenceChargeIndex); _humanFighter.SetMove(_doNothingMove, 1); _humanFighter.SetMove(_runawayMove); //act _battleManager.Battle(_humanTeam, _shadeTeam); //assert Assert.AreEqual(1, _logger.Logs.Count); Assert.AreEqual(_shade2, (_logger.Logs[0].E as ShadeAbsorbedEventArgs)?.AbsorbedShade); }