public void TestMovesNumber() { var game = CreateGame(false); Assert.Null(game.Hero); var gi = new Roguelike.Generators.GenerationInfo(); gi.MakeEmpty(); var level = game.GenerateLevel(0, gi); Assert.AreEqual(game.GameManager.Context.TurnOwner, TurnOwner.Hero); var heroPrevPos = game.Hero.point; //var emptyHeroNeib = level.GetEmptyNeighborhoodPoint(game.Hero, Dungeons.TileContainers.DungeonNode.EmptyNeighborhoodCallContext.Move); //game.GameManager.HandleHeroShift(emptyHeroNeib.Item2); TryToMoveHero(); Assert.AreNotEqual(heroPrevPos, game.Hero.point); Assert.AreEqual(game.GameManager.Context.TurnOwner, TurnOwner.Allies); heroPrevPos = game.Hero.point; var emptyHeroNeib = level.GetEmptyNeighborhoodPoint(game.Hero, EmptyNeighborhoodCallContext.Move); game.GameManager.HandleHeroShift(emptyHeroNeib.Item2); Assert.AreEqual(heroPrevPos, game.Hero.point);//shall not move as already did in turn Assert.AreEqual(game.GameManager.Context.TurnOwner, TurnOwner.Allies); }
private DungeonLevel GenRoomWithEnemies(int numEnemies) { var generator = Container.GetInstance <Dungeons.IDungeonGenerator>(); var info = new Roguelike.Generators.GenerationInfo(); info.NumberOfRooms = 1; info.GenerateEnemies = false; info.MinNodeSize = new Size(8, 8); info.MaxNodeSize = info.MinNodeSize; var level = generator.Generate(0, info); Assert.Greater(level.GetTiles().Where(i => i.IsEmpty).Count(), 0); int y = 2; for (int i = 0; i < numEnemies; i++) { var en = SpawnEnemy(); var pt = new Point(2, y++); var set = level.SetTile(en, pt); Assert.True(set); //en = SpawnEnemy(); //pt = new Point(2, 3); //set = level.SetTile(en, pt); //Assert.True(set); } return(level); }
public void TestFight() { for (int i = 0; i < 2; i++) { var game = CreateGame(false); Assert.Null(game.Hero); var gi = new Roguelike.Generators.GenerationInfo(); gi.MakeEmpty(); var level = game.GenerateLevel(0, gi); game.Hero.Stats.SetNominal(Roguelike.Attributes.EntityStatKind.ChanceToMeleeHit, 100); var heroPos = game.Hero.point; Assert.AreEqual(game.GameManager.Context.TurnOwner, TurnOwner.Hero); var en = SpawnEnemy(); var enHealth = en.Stats.Health; var emptyHeroNeib = SetCloseToHero(en); //move hero toward enemy - hit it var res = game.GameManager.HandleHeroShift(emptyHeroNeib.Item2); Assert.AreEqual(heroPos, game.Hero.point); Assert.Less(en.Stats.Health, enHealth); Assert.AreEqual(game.GameManager.Context.TurnOwner, TurnOwner.Allies); } }
public void TestCustomInteriorGen() { var game = CreateGame(false); Assert.Null(game.Hero); Assert.AreEqual(game.Level, null); game.LevelGenerator.CustomNodeCreator = (int nodeIndex, Dungeons.GenerationInfo gi) => { //TODO typed CreateDungeonNodeInstance var dungeon = game.LevelGenerator.CreateDungeonNodeInstance() as Roguelike.Generators.TileContainers.DungeonNode; dungeon.Create(10, 10, gi); var li = game.LevelGenerator.LevelIndex + 1; dungeon.SetTileAtRandomPosition <Enemy>(li, Container); dungeon.SetTileAtRandomPosition <Barrel>(li); dungeon.SetTileAtRandomPosition <Barrel>(li); return(dungeon); }; var info = new Roguelike.Generators.GenerationInfo(); info.NumberOfRooms = 1; info.MakeEmpty(); info.GenerateOuterWalls = false; var level = game.LevelGenerator.Generate(0, info); Assert.AreEqual(level.GetTiles <Wall>().Count, 0); Assert.AreEqual(level.GetTiles <Enemy>().Count, 1); Assert.AreEqual(level.GetTiles <Barrel>().Count, 2); }
public void TestPowerIncrease() { var game = CreateGame(); Enemy lastPlain = null; Enemy lastChemp = null; Enemy lastBoss = null; var hero = game.Level.GetTiles <Hero>().SingleOrDefault(); EntityStatKind[] statKinds = new[] { EntityStatKind.MeleeAttack, EntityStatKind.Defense, EntityStatKind.Magic }; float lastDamageFromPlain = 0; float lastDamageFromChemp = 0; float lastDamageFromBoss = 0; var gi = new Roguelike.Generators.GenerationInfo(); for (var levelIndex = 0; levelIndex < gi.MaxLevelIndex; levelIndex++) { var enemies = AllEnemies; Assert.Greater(enemies.Count, 2); var boss = enemies.Where(i => i.PowerKind == EnemyPowerKind.Plain).First(); boss.SetBoss(); Assert.AreEqual(boss.PowerKind, EnemyPowerKind.Boss); var chemp = enemies.Where(i => i.PowerKind == EnemyPowerKind.Champion).First(); var plain = enemies.Where(i => i.PowerKind == EnemyPowerKind.Plain).First(); if (levelIndex > 0) { Assert.Greater(plain.Level, lastPlain.Level); Assert.Greater(chemp.Level, lastChemp.Level); Assert.Greater(boss.Level, lastBoss.Level); foreach (var esk in statKinds) { Assert.Greater(plain.Stats.GetStat(esk).Value.TotalValue, lastPlain.Stats.GetStat(esk).Value.TotalValue); Assert.Greater(chemp.Stats.GetStat(esk).Value.TotalValue, lastChemp.Stats.GetStat(esk).Value.TotalValue); Assert.Greater(boss.Stats.GetStat(esk).Value.TotalValue, lastBoss.Stats.GetStat(esk).Value.TotalValue); } } float diffPlain = CheckHit(hero, lastDamageFromPlain, plain); float diffChemp = CheckHit(hero, lastDamageFromChemp, chemp); float diffBoss = CheckHit(hero, lastDamageFromBoss, boss); lastDamageFromPlain = diffPlain; lastDamageFromChemp = diffChemp; lastDamageFromBoss = diffBoss; lastPlain = plain; lastChemp = chemp; lastBoss = boss; GoDown(); } }
public void TestFightHitNumberCustomTurnOwner() { var game = CreateGame(false); Assert.Null(game.Hero); var gi = new Roguelike.Generators.GenerationInfo(); gi.MakeEmpty(); var level = game.GenerateLevel(0, gi); game.GameManager.Context.AutoTurnManagement = false; game.Hero.Stats.SetNominal(Roguelike.Attributes.EntityStatKind.ChanceToMeleeHit, 100); Assert.AreEqual(game.GameManager.Context.TurnOwner, TurnOwner.Hero); var heroPos = game.Hero.point; var en = SpawnEnemy(); var enHealth = en.Stats.Health; var emptyHeroNeib = SetCloseToHero(en); var neib = emptyHeroNeib.Item2; game.GameManager.HandleHeroShift(neib); Assert.AreEqual(heroPos, game.Hero.point); Assert.Less(en.Stats.Health, enHealth); Assert.AreEqual(Game.GameManager.Context.GetActionsCount(), 1); enHealth = en.Stats.Health; game.GameManager.HandleHeroShift(neib); Assert.AreEqual(heroPos, game.Hero.point); //hit not done as hero already hit in this turn Assert.AreEqual(en.Stats.Health, enHealth); Assert.AreEqual(Game.GameManager.Context.GetActionsCount(), 1); MoveToHeroTurn(game); game.GameManager.HandleHeroShift(neib); Assert.AreEqual(heroPos, game.Hero.point); Assert.Less(en.Stats.Health, enHealth); Assert.AreEqual(Game.GameManager.Context.GetActionsCount(), 1); heroPos = game.Hero.point; TryToMoveHero(); Assert.AreEqual(heroPos, game.Hero.point);//hero shall not move as it already made action this turn }
public void FixedRoomSize() { //game can have 1-n levels (sub-dungeons) var game = CreateGame(false); Assert.Null(game.Hero); var gi = new Roguelike.Generators.GenerationInfo(); gi.NumberOfRooms = 1;//tmp gi.MaxNodeSize = new System.Drawing.Size(11, 11); gi.MinNodeSize = gi.MaxNodeSize; gi.PreventSecretRoomGeneration = true; var level0 = game.GenerateLevel(0, gi); Assert.NotNull(level0); Assert.AreEqual(level0.GeneratorNodes.Count, 1); Assert.AreEqual(level0.GeneratorNodes[0].Width, gi.MaxNodeSize.Width); Assert.AreEqual(level0.GeneratorNodes[0].Height, gi.MaxNodeSize.Height); }
public void TestLootRevealFlagBasic() { Log("TestLootRevealFlagBasic start"); var info = new Roguelike.Generators.GenerationInfo(); info.NumberOfRooms = 1; info.MinNodeSize = new Size(15, 15); info.MaxNodeSize = new Size(30, 30); info.ForceChildIslandInterior = true; info.PreventSecretRoomGeneration = true; var game = CreateGame(gi: info); var level = game.Level; Assert.GreaterOrEqual(level.Width, info.MinNodeSize.Width); Assert.GreaterOrEqual(level.Height, info.MinNodeSize.Height); Assert.AreEqual(level.Nodes.Count, 1); var normalRoom = level.Nodes[0]; Assert.AreEqual(normalRoom.ChildIslands.Count, 1); Assert.True(normalRoom.Revealed); var island = normalRoom.ChildIslands[0]; Assert.False(island.Revealed); Assert.Greater(level.GetTiles().Where(i => i.DungeonNodeIndex == island.NodeIndex).Count(), 0); var en = level.GetTiles().Where(i => i is Enemy).ToList(); //var enNormal = normalRoom.GetTiles<Enemy>(); //var enIsland = normalRoom.GetTiles<Enemy>(); //Assert.AreEqual(en.Count, enNormal.Count + enIsland.Count); var normalRoomEnemies = en.Where(i => i.DungeonNodeIndex == normalRoom.NodeIndex).ToList(); var islandRoomEnemies = en.Where(i => i.DungeonNodeIndex == island.NodeIndex).ToList(); Assert.AreEqual(en.Count, normalRoomEnemies.Count + islandRoomEnemies.Count); Assert.Greater(normalRoomEnemies.Count, 0); Assert.Greater(islandRoomEnemies.Count, 0); Log("TestLootRevealFlagBasic end"); }
public void TestMovesNumberCustomTurnOwner() { var game = CreateGame(false); Assert.Null(game.Hero); var gi = new Roguelike.Generators.GenerationInfo(); gi.MakeEmpty(); var level = game.GenerateLevel(0, gi); //do not change turn owner automatically! game.GameManager.Context.AutoTurnManagement = false; Assert.AreEqual(game.GameManager.Context.TurnOwner, TurnOwner.Hero); //var emptyHeroNeib = level.GetEmptyNeighborhoodPoint(game.Hero, Dungeons.TileContainers.DungeonNode.EmptyNeighborhoodCallContext.Move); var heroPos = game.Hero.point; //game.GameManager.HandleHeroShift(emptyHeroNeib.Item2); TryToMoveHero(); Assert.AreNotEqual(heroPos, game.Hero.point); Assert.AreEqual(game.GameManager.Context.TurnActionsCount[TurnOwner.Hero], 1); heroPos = game.Hero.point; TryToMoveHero(); Assert.AreEqual(heroPos, game.Hero.point);//hero shall not move as it already move this turn Assert.AreEqual(Game.GameManager.Context.GetActionsCount(), 1); Assert.AreEqual(game.GameManager.Context.TurnOwner, TurnOwner.Hero); MoveToHeroTurn(game); //try move agin TryToMoveHero(); Assert.AreNotEqual(heroPos, game.Hero.point);//now shall move! Assert.AreEqual(Game.GameManager.Context.GetActionsCount(), 1); }
public void TestLootRevealFlagAdv() { var info = new Roguelike.Generators.GenerationInfo(); info.NumberOfRooms = 2; info.MinNodeSize = new Size(15, 15); info.MaxNodeSize = new Size(30, 30); info.ForceChildIslandInterior = true; info.PreventSecretRoomGeneration = true; var game = CreateGame(gi: info); var level = game.Level; Assert.GreaterOrEqual(level.Width, info.MinNodeSize.Width); Assert.GreaterOrEqual(level.Height, info.MinNodeSize.Height); Assert.AreEqual(level.Nodes.Count, 2); Assert.AreEqual(level.Nodes[0].ChildIslands.Count, 1); Assert.AreEqual(level.Nodes[1].ChildIslands.Count, 1); Assert.True(level.Nodes[0].Revealed); Assert.False(level.Nodes[1].Revealed); var chidIsl1 = level.Nodes[0].ChildIslands[0]; Assert.False(chidIsl1.Revealed); var chidIsl2 = level.Nodes[1].ChildIslands[0]; Assert.False(chidIsl2.Revealed); Assert.Greater(level.GetTiles().Where(i => i.DungeonNodeIndex == chidIsl1.NodeIndex).Count(), 1); Assert.Greater(level.GetTiles().Where(i => i.DungeonNodeIndex == chidIsl2.NodeIndex).Count(), 1); //Assert.AreEqual(level.Height, info.MaxNodeSize); //var en = level.GetTiles().Where(i => i is Enemy).ToList(); //var lootGrouped = level.GetTiles().Where(i=> i is Loot).ToList().GroupBy(i=>i.DungeonNodeIndex).ToList(); //var zeroIndexCount = tiles.Where(i => i.DungeonNodeIndex == 0).Count(); //var nonZero = level.GetTiles().Where(i => i.DungeonNodeIndex != 0).ToList(); //Assert.AreEqual(zeroIndexCount, tiles.Count); }
public void ChempionsCount() { //game can have 1-n levels (sub-dungeons) var game = CreateGame(false); Assert.Null(game.Hero); var gi = new Roguelike.Generators.GenerationInfo(); Assert.Greater(gi.NumberOfRooms, 3); Assert.Greater(gi.ForcedNumberOfEnemiesInRoom, 2); //gi.NumberOfRooms = 5; //gi.ForcedNumberOfEnemiesInRoom = 4; var level_0 = game.GenerateLevel(0, gi); Assert.AreEqual(level_0.Nodes.Count, 6); var enemies = level_0.GetTiles <Enemy>(); Assert.Greater(enemies.Count, 5); var chemps = enemies.Where(i => i.PowerKind == EnemyPowerKind.Champion).Count(); Assert.Greater(chemps, 1); Assert.Less(chemps, gi.NumberOfRooms); }