public void CorrectlyGeneratesBattlefield_ShadeGroupingAndBellTerrainConfiguration()
        {
            const int fighterLevel = 1;
            FighterGroupingConfiguration groupingConfig = new ShadeGroupingConfiguration(3, fighterLevel);

            BellType[] bellTypes = { BellType.Copper, BellType.Silver };
            TerrainInteractablesConfiguration terrainConfiguration = new BellTerrainConfiguration(bellTypes);

            BattlefieldConfiguration config = new BattlefieldConfiguration(groupingConfig, terrainConfiguration);

            BattleFieldInfo returnedBattleFieldInfo = _factory.GetBattleFieldSetUp(config);

            List <IFighter> fighters = returnedBattleFieldInfo.EnemyTeam.Fighters;

            Assert.AreEqual(3, fighters.Count);
            Assert.True(fighters.TrueForAll(f => f is Shade), "the returned fighters should be Shades!");
            Assert.True(fighters.TrueForAll(f => f.Level == fighterLevel), $"the returned fighters should all be level {fighterLevel}!");

            List <TerrainInteractable> terrainInteractables = returnedBattleFieldInfo.TerrainInteractables.ToList();

            Assert.AreEqual(2, terrainInteractables.Count);
            Assert.True(terrainInteractables.TrueForAll(b => b is Bell));

            List <Bell> bells = terrainInteractables.OfType <Bell>().ToList();

            for (var i = 0; i < bellTypes.Length; ++i)
            {
                Assert.AreEqual(bellTypes[i], bells[i].BellType);
            }
        }
Ejemplo n.º 2
0
        public BattleFieldInfo GetBattleFieldInfo(SubRegion region, int round)
        {
            BattleFieldInfo generatedBattleFieldInfo = null;

            if (round < region.NumberRegularBattles)
            {
                BattlefieldConfiguration battlefieldConfig =
                    region.ScriptedBattlefieldConfigurations.FirstOrDefault(script => script.BattleIndex == round)?
                    .BattlefieldConfig;

                if (battlefieldConfig == null)
                {
                    Team generatedTeam = _teamFactory.GetTeam(region);
                    generatedBattleFieldInfo = new BattleFieldInfo(generatedTeam, new List <TerrainInteractable>());
                }
                else
                {
                    generatedBattleFieldInfo = _battlefieldFactory.GetBattleFieldSetUp(battlefieldConfig);
                }
            }
            else
            {
                generatedBattleFieldInfo = _battlefieldFactory.GetBattleFieldSetUp(region.BossConfiguration);
            }

            return(generatedBattleFieldInfo);
        }
Ejemplo n.º 3
0
        public void CorrectlyGeneratesEnemyTeams_FromBattlefieldConfiguration([Values(new[] { FighterType.Goblin, FighterType.Fairy }, new[] { FighterType.Warrior, FighterType.ShieldGuy })] IEnumerable <FighterType> enemyTypes)
        {
            List <FighterType> enemyTypesList = enemyTypes.ToList();

            TeamConfiguration bossConfiguration = new TeamConfiguration(new EnemyConfiguration(FighterType.Barbarian, 5), new EnemyConfiguration(FighterType.ShieldGuy, 2), new EnemyConfiguration(FighterType.ShieldGuy, 3));

            ShadeGroupingConfiguration shadeGroupingConfig = new ShadeGroupingConfiguration(3, 1);

            BellType[] bellTypes = { BellType.Silver, BellType.Copper };
            BellTerrainConfiguration bellConfig   = new BellTerrainConfiguration(bellTypes);
            BattlefieldConfiguration battleConfig = new BattlefieldConfiguration(shadeGroupingConfig, bellConfig);

            List <ScriptedBattlefieldConfiguration> scriptedBattlefieldConfigurations = new List
                                                                                        <ScriptedBattlefieldConfiguration>
            {
                new ScriptedBattlefieldConfiguration(battleConfig, 0)
            };

            SubRegion subRegion = new SubRegion(WorldSubRegion.Fields,
                                                1,
                                                new[] { new ChanceEvent <int>(2, 1) },
                                                enemyTypesList,
                                                new BattlefieldConfiguration(bossConfiguration),
                                                scriptedBattlefieldConfigurations);

            SubRegion[] subRegions = { subRegion };

            Region fakeFieldsRegion = new Region(WorldRegion.Fields, new BattleMove[0], subRegions);

            _regionFactory.SetRegion(WorldRegion.Fields, fakeFieldsRegion);

            _regionManager = GetRegionManager();

            _humanFighter1.SetMove(_runawayMove);
            _humanFighter1.SetMoveTarget(_humanFighter1);

            _humanFighter2.SetMove(_doNothingMove);

            _regionManager.Battle(_battleManager, _humanTeam);

            Team            enemyTeam     = _battleManager.GetAllEnemyTeams()[0];
            List <IFighter> enemyFighters = enemyTeam.Fighters;

            Assert.AreEqual(3, enemyFighters.Count);
            Assert.True(enemyFighters.TrueForAll(ef => ef is Shade));

            List <TerrainInteractable> terrainInteractables = _battleManager.GetAllTerrainInteractableLists()[0];

            Assert.NotNull(terrainInteractables);
            Assert.AreEqual(2, terrainInteractables.Count);

            List <Bell> bells = terrainInteractables.OfType <Bell>().ToList();

            Assert.AreEqual(bellTypes.Length, bells.Count);
            for (var i = 0; i < bellTypes.Length; ++i)
            {
                Assert.AreEqual(bellTypes[i], bells[i].BellType);
            }
        }
        public void CorrectlyGeneratesEmptyListOfTerrainInteractables_FromNullInput()
        {
            TeamConfiguration        teamInfo          = new TeamConfiguration(new EnemyConfiguration(FighterType.Goblin, 1), new EnemyConfiguration(FighterType.Fairy, 1));
            BattlefieldConfiguration battlefieldConfig = new BattlefieldConfiguration(teamInfo);

            BattleFieldInfo returnedBattleFieldInfo = _factory.GetBattleFieldSetUp(battlefieldConfig);

            Assert.NotNull(returnedBattleFieldInfo.TerrainInteractables);
            Assert.AreEqual(0, returnedBattleFieldInfo.TerrainInteractables.ToList().Count);
        }
Ejemplo n.º 5
0
 /// <summary>
 /// Call this constructor when all enemy types have an equal chance of being selected, it will construct the appropriate input into the "real" constructor
 /// </summary>
 /// <param name="areaId"></param>
 /// <param name="numberRegularBattles"></param>
 /// <param name="numberEnemyFighterChances"></param>
 /// <param name="enemyTypes"></param>
 /// <param name="bossConfiguration"></param>
 /// <param name="scriptedBattlefieldConfigurations"></param>
 /// <param name="regionIntro"></param>
 /// <param name="regionCompletedCutscene"></param>
 public SubRegion(WorldSubRegion areaId,
                  int numberRegularBattles,
                  IEnumerable <ChanceEvent <int> > numberEnemyFighterChances,
                  IEnumerable <FighterType> enemyTypes,
                  BattlefieldConfiguration bossConfiguration,
                  List <ScriptedBattlefieldConfiguration> scriptedBattlefieldConfigurations = null,
                  string regionIntro = null,
                  Cutscene regionCompletedCutscene = null)
     : this(areaId, numberRegularBattles, numberEnemyFighterChances, ConvertToChanceEvents(enemyTypes),
            bossConfiguration, scriptedBattlefieldConfigurations, regionIntro, regionCompletedCutscene)
 {
 }
Ejemplo n.º 6
0
        private static List <ScriptedBattlefieldConfiguration> GetScriptedBattlefieldConfigurationsForRegion(WorldSubRegion subRegion)
        {
            List <ScriptedBattlefieldConfiguration> generatedScriptedBattlefieldConfigurations = new List <ScriptedBattlefieldConfiguration>();

            switch (subRegion)
            {
            case WorldSubRegion.DesertCrypt:
                BattlefieldConfiguration         firstBattleConfig = new BattlefieldConfiguration(new ShadeGroupingConfiguration(3, 1), new BellTerrainConfiguration(BellType.Copper, BellType.Silver));
                ScriptedBattlefieldConfiguration firstBattleScript = new ScriptedBattlefieldConfiguration(firstBattleConfig, 0);
                generatedScriptedBattlefieldConfigurations.Add(firstBattleScript);
                break;
            }

            return(generatedScriptedBattlefieldConfigurations);
        }
Ejemplo n.º 7
0
        private static BattlefieldConfiguration GetBossConfigurationForBossRegion(WorldSubRegion subRegion)
        {
            TeamConfiguration teamInfo;
            TerrainInteractablesConfiguration fieldInfo = null;

            switch (subRegion)
            {
            case WorldSubRegion.Fields:
                //teamInfo = new TeamConfiguration(new EnemyConfiguration(FighterType.MegaChicken, 1));
                teamInfo = new TeamConfiguration(new EnemyConfiguration(FighterType.Egg, 1, MagicType.Fire), new EnemyConfiguration(FighterType.Egg, 1, MagicType.Ice));
                break;

            case WorldSubRegion.DesertIntro:
                //teamInfo = new TeamConfiguration(new EnemyConfiguration(FighterType.Barbarian, 1));
                teamInfo = new TeamConfiguration(new EnemyConfiguration(FighterType.Egg, 1, MagicType.Fire), new EnemyConfiguration(FighterType.Egg, 1, MagicType.Ice));
                break;

            //TODO: needs to be filled out
            case WorldSubRegion.DesertCrypt:
            case WorldSubRegion.TavernOfHeroes:
            case WorldSubRegion.AncientLibrary:
            case WorldSubRegion.Oasis:
            case WorldSubRegion.CliffsOfAThousandPushups:
            case WorldSubRegion.TempleOfDarkness:
            case WorldSubRegion.VillageCenter:
            case WorldSubRegion.BeastTemple:
            case WorldSubRegion.Coliseum:
            case WorldSubRegion.CasinoIntro:
            case WorldSubRegion.CavesIntro:
            case WorldSubRegion.DarkCastleIntro:
                teamInfo = new TeamConfiguration(new EnemyConfiguration(FighterType.MegaChicken, 1), new EnemyConfiguration(FighterType.ShieldGuy, 1));
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(subRegion), subRegion, null);
            }

            var ret = new BattlefieldConfiguration(teamInfo, fieldInfo);

            return(ret);
        }
        public void CorrectlyGeneratesBattlefield_TeamConfiguration_NoTerrainConfiguration()
        {
            TeamConfiguration        teamInfo          = new TeamConfiguration(new EnemyConfiguration(FighterType.Goblin, 1), new EnemyConfiguration(FighterType.Fairy, 1));
            BattlefieldConfiguration battlefieldConfig = new BattlefieldConfiguration(teamInfo);

            BattleFieldInfo returnedBattleFieldInfo = _factory.GetBattleFieldSetUp(battlefieldConfig);

            List <IFighter> fighters = returnedBattleFieldInfo.EnemyTeam.Fighters;

            Assert.AreEqual(2, fighters.Count);

            IFighter firstFighter = fighters[0];

            Assert.True(firstFighter is Goblin, $"first fighter should be a Goblin but was {firstFighter.GetType()}");
            Assert.True(firstFighter.Level == 1, "first fighter should be level 1");

            IFighter secondFighter = fighters[1];

            Assert.True(secondFighter is Fairy, $"second fighter should be a fairy but was {secondFighter.GetType()}");
            Assert.True(secondFighter.Level == 1, "second fighter should be level 1");
        }
Ejemplo n.º 9
0
        public SubRegion(WorldSubRegion areaId,
                         int numberRegularBattles,
                         IEnumerable <ChanceEvent <int> > numberEnemyFighterChances,
                         IEnumerable <ChanceEvent <FighterType> > enemyTypes,
                         BattlefieldConfiguration bossConfiguration,
                         List <ScriptedBattlefieldConfiguration> scriptedBattlefieldConfigurations = null,
                         ColorString regionIntro          = null,
                         Cutscene regionCompletedCutscene = null) :
            base(areaId, regionIntro)
        {
            NumberEnemyFighterChances = numberEnemyFighterChances;
            NumberRegularBattles      = numberRegularBattles;
            EnemyTypes        = enemyTypes;
            BossConfiguration = bossConfiguration;
            ScriptedBattlefieldConfigurations = scriptedBattlefieldConfigurations ??
                                                new List <ScriptedBattlefieldConfiguration>();
            RegionCompletedCutscene = regionCompletedCutscene;

            if (RegionCompletedCutscene != null)
            {
                RegionCompletedCutscene.Fooed += PropagateFooEvent;
            }
        }
 public ScriptedBattlefieldConfiguration(BattlefieldConfiguration battlefieldConfig, int battleIndex)
 {
     BattlefieldConfig = battlefieldConfig;
     BattleIndex       = battleIndex;
 }