Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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]));
            }
        }
Ejemplo n.º 5
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();
        }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 9
0
        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);
        }
Ejemplo n.º 10
0
        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);
        }
Ejemplo n.º 11
0
        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);
        }
Ejemplo n.º 12
0
        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);
        }
Ejemplo n.º 14
0
        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]));
                }
            }
        }