public void AddCell(Cell toAdd)
    {
        if (grid == null)
        {
            grid    = toAdd.getGameCell().Grid;
            xOffset = grid.gridPositionToWorldPosition(new GridPosition(0, 0)) - grid.gridPositionToWorldPosition(new GridPosition(1, 0));
            yOffset = grid.gridPositionToWorldPosition(new GridPosition(0, 0)) - grid.gridPositionToWorldPosition(new GridPosition(0, 1));

            int gridWidth  = toAdd.getGameCell().Grid.GameGrid.Length;
            int gridHeight = toAdd.getGameCell().Grid.GameGrid[0].Length;
            corners         = new GameObject[gridWidth + 1][];
            verticalEdges   = new GameObject[gridWidth + 1][];
            horizontalEdges = new GameObject[gridWidth + 1][];
            for (int x = 0; x < corners.Length; x++)
            {
                corners[x]         = new GameObject[gridHeight + 1];
                verticalEdges[x]   = new GameObject[gridHeight + 1];
                horizontalEdges[x] = new GameObject[gridHeight + 1];
                for (int y = 0; y < corners[x].Length; y++)
                {
                    verticalEdges[x][y] = new GameObject();
                    verticalEdges[x][y].AddComponent <SpriteRenderer>();
                    verticalEdges[x][y].transform.position   = placeVerticalEdge(x, y);
                    verticalEdges[x][y].transform.localScale = (toAdd.transform.localScale / BulletGridGenerator.CELL_SCALE) / 2;
                    verticalEdges[x][y].GetComponent <SpriteRenderer>().sortingOrder = 2;

                    horizontalEdges[x][y] = new GameObject();
                    horizontalEdges[x][y].AddComponent <SpriteRenderer>();
                    horizontalEdges[x][y].transform.position   = placeHorizontalEdge(x, y);
                    horizontalEdges[x][y].transform.localScale = (toAdd.transform.localScale / BulletGridGenerator.CELL_SCALE) / 2;
                    horizontalEdges[x][y].GetComponent <SpriteRenderer>().sortingOrder = 2;

                    corners[x][y] = new GameObject();
                    corners[x][y].AddComponent <SpriteRenderer>();
                    corners[x][y].transform.position   = placeCorner(x, y);
                    corners[x][y].transform.localScale = (toAdd.transform.localScale / BulletGridGenerator.CELL_SCALE) / 2;
                    corners[x][y].GetComponent <SpriteRenderer>().sortingOrder = 2;
                }
            }
        }
        OnVisibilityChanged(toAdd.getGameCell(), toAdd.getGameCell().isExplored);
        toAdd.getGameCell().NotifyVisibilityChanged += OnVisibilityChanged;
    }
 private Vector2 placeVerticalEdge(int x, int y)
 {
     return(grid.gridPositionToWorldPosition(new GridPosition(x - 1, y)) - xOffset / 2.0f);
 }