Ejemplo n.º 1
0
        public void Battle(BattleManager manager, Team playerTeam)
        {
            bool continuer = true;

            while (continuer)
            {
                Region region = _regionalMap.CurrentArea;

                ColorString introString = new ColorString($"You have entered the {region.AreaId} region");

                if (!string.IsNullOrWhiteSpace(region.RegionIntro?.GetFullString()))
                {
                    introString = region.RegionIntro;
                }

                _output.WriteLine(introString);

                BattleEndStatus battleEndStatus = BattleThroughRegion(region, manager, playerTeam);

                if (battleEndStatus != BattleEndStatus.Victory)
                {
                    continuer = false;
                }
                else
                {
                    region = _regionalMap.Advance(_decisionManager, playerTeam);

                    if (region == null)
                    {
                        continuer = false;
                    }
                }
            }
        }
Ejemplo n.º 2
0
        private BattleEndStatus BattleThroughRegion(Region region, BattleManager manager, Team playerTeam)
        {
            bool            continuer       = true;
            BattleEndStatus battleEndStatus = BattleEndStatus.None;

            foreach (HumanFighter fighter in playerTeam.Fighters.OfType <HumanFighter>())
            {
                foreach (BattleMove regionMove in region.MovesUnlockedUponEnteringRegion)
                {
                    fighter.AddMove(regionMove);
                }
            }

            AreaMap <SubRegion, WorldSubRegion> subRegionalMap = _mapManager.GetSubRegionalMap(region.AreaId, region.SubRegions);

            while (continuer)
            {
                SubRegion subRegion = subRegionalMap.CurrentArea;
                subRegion.Fooed += PleaseDeleteMeIAmTerribleCode;
                _playerTeam      = playerTeam;

                ColorString introString = new ColorString($"You have entered the {subRegion.AreaId} sub region");

                if (!string.IsNullOrWhiteSpace(subRegion.RegionIntro?.GetFullString()))
                {
                    introString = subRegion.RegionIntro;
                }

                _output.WriteLine(introString);

                battleEndStatus = BattleThroughSubRegion(subRegion, manager, playerTeam);

                if (battleEndStatus != BattleEndStatus.Victory)
                {
                    continuer        = false;
                    subRegion.Fooed += PleaseDeleteMeIAmTerribleCode;
                }
                else
                {
                    List <HumanFighter> fighters = playerTeam.GetHumanFighters().ToList();
                    subRegion.ExecuteCutscene(_input, _output, fighters[0], fighters[1]);

                    subRegion.Fooed += PleaseDeleteMeIAmTerribleCode;

                    subRegion = subRegionalMap.Advance(_decisionManager, playerTeam);

                    if (subRegion == null)
                    {
                        continuer = false;
                    }
                }
            }

            return(battleEndStatus);
        }
Ejemplo n.º 3
0
        private BattleEndStatus BattleThroughSubRegion(SubRegion subRegion, BattleManager manager, Team playerTeam)
        {
            bool            continuer       = true;
            BattleEndStatus battleEndStatus = BattleEndStatus.None;

            int numberRegularBattles = subRegion.NumberRegularBattles;

            for (var i = 0; i <= numberRegularBattles && continuer; ++i)
            {
                //var enemyTeam = GetEnemies(subRegion, i);
                BattleFieldInfo battlefiendInfo = GetBattleFieldInfo(subRegion, i);

                BattleManagerBattleConfiguration config = GetBattleConfiguration(subRegion, i);

                if (i == numberRegularBattles)
                {
                    PrintBossIntro(subRegion.AreaId);
                }

                battleEndStatus = manager.Battle(playerTeam, battlefiendInfo.EnemyTeam, battlefiendInfo.TerrainInteractables.ToList(), config);

                if (battleEndStatus != BattleEndStatus.Victory)
                {
                    continuer = false;
                }
                else
                {
                    foreach (IFighter player in playerTeam.Fighters)
                    {
                        if (!player.IsAlive())
                        {
                            player.Revive(1);
                        }
                        player.Heal(player.MaxHealth);
                        player.RestoreMana(player.MaxMana);
                    }

                    _output.WriteLine("HP and Mana fully restored!");
                    _input.WaitAndClear(_output);
                }
            }

            return(battleEndStatus);
        }
        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);
        }