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; } } } }
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); }
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); }