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);
        }
Beispiel #2
0
        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);
        }
Beispiel #5
0
        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");
        }
Beispiel #6
0
        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");
        }
Beispiel #7
0
        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);
        }
Beispiel #8
0
        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);
        }