protected override void LoadContent()
        {
            // Create a new SpriteBatch, which can be used to draw textures.
            spriteBatch = new SpriteBatch(GraphicsDevice);

            var fs = File.Open(@"C:\Users\ANTHONY\Downloads\tilesets2\tileset1.png", FileMode.Open);
            Texture2D tilesetTexture = Texture2D.FromStream(GraphicsDevice, fs);
            tileSet = new TileSet(tilesetTexture, Engine.TileWidth, Engine.TileHeight);
            fs.Close();
            fs.Dispose();

            map = new TileMap(40, 40);

            MapLayer mapLayer = new MapLayer(map);
            MapLayer bushes = new MapLayer(map);

            for (int x = 0; x < 40; x++)
                for (int y = 0; y < 40; y++)
                    mapLayer.SetTile(x, y, new Tile(0, 0));

            mapLayer.Visible = false;

            map.AddTileSet(tileSet);
            map.AddLayer(mapLayer);
            map.AddLayer(bushes);

            map.CurrentLayerIndex = 1;

            Camera.Initialize(
                Vector2.Zero,
                new Rectangle()
                {
                    Width = graphics.PreferredBackBufferWidth,
                    Height = graphics.PreferredBackBufferHeight
                },
                new Vector2(map.WidthInTiles * Engine.TileWidth,
                    map.HeightInTiles * Engine.TileHeight)
            );

            Camera.MaxClamp = new Vector2(
                                  map.WidthInTiles * Engine.TileWidth - Camera.View.Width,
                                  map.HeightInTiles * Engine.TileHeight - Camera.View.Height
            );
        }
 /// <summary>
 /// Adds a layer to the map
 /// </summary>
 /// <param name="l"></param>
 public void AddLayer(MapLayer l)
 {
     layers.Add(l);
 }
 /// <summary>
 /// Adds a layer to the map
 /// </summary>
 /// <param name="l"></param>
 public void AddLayer(MapLayer l)
 {
     layers.Add(l);
 }
        private void btnOK_Click(object sender, EventArgs e)
        {
            this.DialogResult = System.Windows.Forms.DialogResult.OK;
            var tileSets = gameRef.level.TileSets;

            gameRef.level = new TileMap((int)numWidth.Value, (int)numHeight.Value);

            if (cboGeneration.SelectedIndex != 0)
            {
                foreach (TileSet s in tileSets)
                    gameRef.level.AddTileSet(s);
            }
            else
            {
                gameRef.level.AddTileSet(new TileSet(@"TileSheets\dirt.png", Engine.TileWidth, Engine.TileHeight));
            }

            var layer1 = new MapLayer(gameRef.level);
            var layer2 = new MapLayer(gameRef.level);
            var layer3 = new MapLayer(gameRef.level);

            switch (cboGeneration.SelectedIndex)
            {
                case 1:
                    // TODO: Generate level with dungeon algorithm
                    for (int x = 0; x < layer1.WidthInTiles; x++)
                        for (int y = 0; y < layer1.HeightInTiles; y++)
                        {
                            layer1.SetTile(x, y, new Tile(groundTile_Layer1, selectedTileSet_Layer1));
                        }

                    layer2 = MapLayer.GenerateFromAlgorithm(MapLayer.GenerationAlgorithm.Dungeon_DrunkenWalk,
                        gameRef.level, selectedTileSet_Layer2, wallTile:wallTile_Layer2);

                    break;
                case 2:
                    // TODO: Generate level with perlin algorithm
                    break;
            }

            gameRef.level.AddLayer(layer1);
            gameRef.level.AddLayer(layer2);
            gameRef.level.AddLayer(layer3);

            Camera.MaxClamp = new Vector2(gameRef.level.WidthInPixels - Canvas.CANVAS_WIDTH,
                gameRef.level.HeightInPixels - Canvas.CANVAS_HEIGHT);

            this.Close();
        }