public void DrawMap(Map map, Tool currentTool, Rectangle toolPreviewRect, Rectangle viewingRectangle, TileType tileType, bool showOtherLayers, bool showCollisionLayer, bool showGrid, bool renderDisplay)
        {
            Vector3 previewCamera = new Vector3(-viewingRectangle.X, -viewingRectangle.Y, 0f);

            spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, null, null, null, null, Matrix.CreateTranslation(previewCamera));

            spriteBatch.GraphicsDevice.Clear(displayClearColor);

            if (renderDisplay)
            {
                DrawLayersWithToolPreviews(map, currentTool, toolPreviewRect, viewingRectangle, tileType, showOtherLayers, showCollisionLayer);

                if (showGrid)
                    DrawGrid(map.TileSize, viewingRectangle);
            }

            spriteBatch.End();
        }
        private void DrawLayersWithToolPreviews(Map map, Tool currentTool, Rectangle toolPreviewRect, Rectangle viewingRectangle, TileType tileType, bool showOtherLayers, bool showCollisionLayer)
        {
            Rectangle currentViewingRectangle = new Rectangle(viewingRectangle.X / map.TileSize, viewingRectangle.Y / map.TileSize, viewingRectangle.Width / map.TileSize + 3, viewingRectangle.Height / map.TileSize + 3); // Draw a couple more just in case

            bool isCustomTile = tileType.Identifier != 0;

            foreach (TileLayer layer in map.TileLayers)
            {
                bool isLayerActive = map.ActiveLayerIndex == map.TileLayers.IndexOf(layer);

                if (isLayerActive)
                {
                    if (!isCustomTile)
                    {
                        currentTool.DrawRegularTilePreview(spriteBatch, map.TilesetTexture, toolPreviewRect, selectorTileset.Rectangle);
                    }

                    layer.Draw(spriteBatch, toolPreviewRect, !isCustomTile, currentViewingRectangle); // Draws the layer and skips tiles covered by the tool preview
                }
                else
                {
                    if (showOtherLayers)
                    {
                        layer.Draw(spriteBatch, currentViewingRectangle);
                    }
                }
            }

            if (isCustomTile)
                currentTool.DrawCustomTilePreview(spriteBatch, toolPreviewRect, tileType);

            if (showCollisionLayer)
                map.CustomLayer.Draw(spriteBatch, toolPreviewRect, isCustomTile, currentViewingRectangle); // Draw the collision layer and skip tiles that are covered by the tool preview

            if (toolPreviewRect != Rectangle.Empty)
                Utility.DrawRectangle(spriteBatch, 3, toolPreviewRect, Color.Orange); // Draw border around selector
        }
        private void InitializeToolStripCollections()
        {
            tools.Add(tspBrush, new Brush(selectorTileset));
            tools.Add(tspFill, new Fill());
            tools.Add(tspMarquee, new Marquee(selectorMarquee));

            currentTool = tools[tspBrush];
        }
        private void tspTool_Click(object sender, EventArgs e)
        {
            Tool.PaintType = Tool.PaintingType.None;

            var menuItem = (ToolStripButton)sender;

            currentTool = tools[menuItem];

            foreach (ToolStripButton button in tools.Keys)
                button.Checked = false;

            menuItem.Checked = true;
        }