private void DrawTiles()
        {
            if (minX == maxX || minY == maxY)
            {
                return;
            }
            float tileRadius = tileDiameter / 2;

            for (int x = minX - 1; x < maxX; x++)
            {
                for (int y = minY - 1; y < maxY; y++)
                {
                    SAP_TileData tile = grid.GetTileDataAt(x * (int)ScaleLvl + (int)(ScaleLvl / 2), y * (int)ScaleLvl + (int)(ScaleLvl / 2));

                    if (tile == null)
                    {
                        continue;
                    }

                    //drawing unwakable tiles
                    if (tile.isWalkable == false)
                    {
                        Vector3 position = new Vector3(
                            leftButtom.x + tileDiameter * x + tileRadius,
                            leftButtom.y + tileDiameter * y + tileRadius,
                            leftButtom.z
                            );
                        Gizmos.color = SAP2DPathfinder.singleton.EditorSettings.obstacleColor;
                        Gizmos.DrawCube(position, new Vector2(tileDiameter, tileDiameter));
                    }
                }
            }
        }
        private void PencilToolHandler()
        {
            if (IsMouseAboveGrid(mouseWorlPosition) == false)
            {
                return;
            }

            bool rubberMode = false;

            if (toolIndex == 1)
            {
                rubberMode = true;
            }

            SAP_TileData tileUnderMouse = grid.GetTileDataAtWorldPosition(mouseWorlPosition);

            Event e = Event.current;

            if (e.type == EventType.MouseDown || e.type == EventType.MouseDrag)
            {
                if (e.button == 0)
                {
                    List <SAP_TileData> selectedTiles = grid.GetNeighborTiles(tileUnderMouse, true, brushSize - 1);
                    selectedTiles.Add(tileUnderMouse);

                    foreach (SAP_TileData tile in selectedTiles)
                    {
                        if (rubberMode == false)
                        {
                            tile.isWalkable   = false;
                            tile.walkableLock = true;
                            UserGridDataLoader.WriteData(grid, tile);
                        }
                        else
                        {
                            tile.isWalkable   = true;
                            tile.walkableLock = false;
                            UserGridDataLoader.DeleteData(grid, tile);
                        }
                    }
                }
            }
            //draw brush
            Vector2 point1 = new Vector2(tileUnderMouse.WorldPosition.x - grid.TileDiameter * (brushSize - 1), tileUnderMouse.WorldPosition.y - grid.TileDiameter * (brushSize - 1));
            Vector2 point2 = new Vector2(tileUnderMouse.WorldPosition.x + grid.TileDiameter * (brushSize - 1), tileUnderMouse.WorldPosition.y + grid.TileDiameter * (brushSize - 1));

            DrawSelectionRectangle(point1, point2, Color.clear, pathfinder.EditorSettings.selectingColor);
        }
        private void RectangleToolHandler()
        {
            if (mouseDrag == false && IsMouseAboveGrid(mouseWorlPosition) == false)
            {
                return;
            }

            Event e = Event.current;

            if (e.type == EventType.MouseDrag)
            {
                if (e.button == 0)
                {
                    mouseDrag = true;
                }
            }
            if (e.type == EventType.MouseUp)
            {
                if (e.button == 0)
                {
                    int startX = Mathf.Min(startDragTile.x, endDragTile.x);
                    int startY = Mathf.Min(startDragTile.y, endDragTile.y);
                    int endX   = Mathf.Max(startDragTile.x, endDragTile.x);
                    int endY   = Mathf.Max(startDragTile.y, endDragTile.y);

                    for (int x = startX; x <= endX; x++)
                    {
                        for (int y = startY; y <= endY; y++)
                        {
                            SAP_TileData tile = grid.GetTileDataAt(x, y);

                            tile.isWalkable   = false;
                            tile.walkableLock = true;
                            UserGridDataLoader.WriteData(grid, tile);
                        }
                    }
                }
                mouseDrag = false;
            }
            endDragTile = grid.GetTileDataAtWorldPosition(mouseWorlPosition);
            if (mouseDrag == false)
            {
                startDragTile = endDragTile;
            }

            DrawSelectionRectangle(startDragTile.WorldPosition, endDragTile.WorldPosition, pathfinder.EditorSettings.obstacleColor, pathfinder.EditorSettings.selectingColor);
        }