public override DungeonLevel GetLevel(int level, Dungeon dungeon, Point? startTile)
{
DungeonLevel dungeonLevel = null;
if (Data.Maps.Count <= level)
throw new ArgumentException("Level does not exist.");
if (loadedLevels.TryGetValue(level, out dungeonLevel))
return dungeonLevel;
Initialize(level, startTile);
stack.Push(new TileInfo<TileData>
{
Position = start,
Tile = CurrentMap[start.X, start.Y]
});
bitMap[start.X, start.Y] = true;
while (stack.Count > 0)
{
currentTile = stack.Pop();
var nextTiles = CreateTile(currentTile).Where(t => t.Tile != null && t.Tile.GetType() != typeof(WallTileData) && !bitMap[t.Position.X, t.Position.Y]);
foreach (var t in nextTiles) //recursion
{
stack.Push(t);
bitMap[t.Position.X, t.Position.Y] = true;
}
}
SetupNeighbours(TilesPositions, outputTiles);
SetupItems();
dungeonLevel = new DungeonLevel(dungeon, outputTiles, creatures, level, TilesPositions, TilesPositions[start], legacyTileCreator.MiniMap);
loadedLevels.Add(level, dungeonLevel);
return dungeonLevel;
}