public DungeonLayout( int gameId, WorldTemplate worldTemplate, RoomTemplateSet roomTemplateSet, MobSpawnTableSet mobSpawnTableSet) { m_gameId = gameId; m_worldTemplate = worldTemplate; m_roomTemplateSet = roomTemplateSet; m_mobSpawnTableSet = mobSpawnTableSet; m_roomGrid = null; m_nextPortalId = 0; }
public bool ValidateDungeons(Command command) { bool success = true; string result= SuccessMessages.GENERAL_SUCCESS; RoomTemplateSet roomTemplateSet = new RoomTemplateSet(); MobTypeSet mobTypeSet = new MobTypeSet(); MobSpawnTableSet mobSpawnTableSet = new MobSpawnTableSet(); int game_id_min = 0; int game_id_max = 100000; // Int32.MaxValue; This will take ~100 days to finish all 2 billion dungeons string connection_string = ""; string dumpGeometryPath = ""; if (command.HasArgumentWithName("C")) { connection_string = command.GetTypedArgumentByName<CommandArgument_String>("C").ArgumentValue; } else { _logger.WriteLine("DungeonValidator: Missing expected connection string parameter"); success = false; } if (command.HasArgumentWithName("G")) { game_id_min = command.GetTypedArgumentByName<CommandArgument_Int32>("G").ArgumentValue; game_id_max = game_id_min; } else { _logger.WriteLine("DungeonValidator: No game id given, evaluating all possible game ids"); } if (game_id_min == game_id_max && command.HasArgumentWithName("D")) { dumpGeometryPath = command.GetTypedArgumentByName<CommandArgument_String>("D").ArgumentValue; } _logger.WriteLine("Validating layouts for game_ids {0} to {1}", game_id_min, game_id_max); // Get the room templates from the DB if (success && !roomTemplateSet.Initialize(connection_string, out result)) { _logger.WriteLine(string.Format("DungeonValidator: Failed to load the room templates from the DB: {0}", result)); success = false; } // Get the mob type set from the DB if (success && !mobTypeSet.Initialize(connection_string, out result)) { _logger.WriteLine(string.Format("DungeonValidator: Failed to load the mob types from the DB: {0}", result)); success = false; } // Get the mob spawn templates from the DB if (success && !mobSpawnTableSet.Initialize(connection_string, mobTypeSet, out result)) { _logger.WriteLine(string.Format("DungeonValidator: Failed to load the mob spawn tables from the DB: {0}", result)); success = false; } if (success) { DateTime startTime = DateTime.Now; // Test all possible world size configurations for each desired game id WorldTemplate[] worldTemplates = new WorldTemplate[] { new WorldTemplate(GameConstants.eDungeonSize.small, GameConstants.eDungeonDifficulty.normal), new WorldTemplate(GameConstants.eDungeonSize.medium, GameConstants.eDungeonDifficulty.normal), new WorldTemplate(GameConstants.eDungeonSize.large, GameConstants.eDungeonDifficulty.normal), }; for (int game_id = game_id_min; success && game_id <= game_id_max; ++game_id) { foreach (WorldTemplate worldTemplate in worldTemplates) { DungeonLayout layout = new DungeonLayout(game_id, worldTemplate, roomTemplateSet, mobSpawnTableSet); // Create the initial set of rooms for the world if (!layout.BuildRoomLayout(out result)) { _logger.WriteLine( string.Format("DungeonValidator: Failed to generate dungeon layout, game_id:{0}, size:{1}", game_id, worldTemplate.dungeon_size)); _logger.WriteLine(result); success = false; } // Verify that this is a valid dungeon if (success) { Dictionary<int, Portal> portalIdToPortalMap = BuildPortalIdMap(layout); // Verify that all portals are connected correctly success &= VerifyRoomPortals(layout, portalIdToPortalMap); // Verify that every room is accessible to every other room success &= VerifyRoomAccessibility(layout, portalIdToPortalMap); // Verify monster spawners success &= VerifyMobSpawners(layout); } // Dump the generated layout to a .obj file if (dumpGeometryPath.Length > 0) { DumpLayoutGeometry(dumpGeometryPath, layout); } } if (game_id_max > game_id_min) { if ((game_id % 1000) == 0) { TimeSpan elapsed = DateTime.Now.Subtract(startTime); int percent_complete = 100 * (game_id - game_id_min) / (game_id_max - game_id_min); _logger.Write("\r[{0:c}] {1}/{2} {3}%", elapsed, game_id-game_id_min, game_id_max-game_id_min, percent_complete); } } } // Write out a new line after the timing info _logger.WriteLine(); } return success; }
public WorldBuilder() { m_roomTemplateSet = new RoomTemplateSet(); m_mobTypeSet = new MobTypeSet(); m_mobSpawnTableSet = new MobSpawnTableSet(); }