public void RemoveTilesAround(DoWorld world, DoRegion biggestRegion, int x, int y, int radius)
    {

        if (biggestRegion != null)
             biggestRegion.Remove(world.GetTileAt(x, y));

        for (int i = -radius; i <= radius; i++)
        {
            for (int j = -radius; j <= radius; j++)
            {
                int idX = x + i;
                int idY = y + j;

                if (idX >= borderWidth && idY >= borderWidth && idX < world.WorldWidth - borderWidth && idY < world.WorldHeight - borderWidth)
                {
                    int dist = world.GetDistance8Neigh(x, y, idX, idY);

                    if (dist <= radius && world.GetTileAt(idX, idY).TopObject != DoTile.ObjectOnTop.Player && world.GetTileAt(idX, idY).TopObject != DoTile.ObjectOnTop.BigPortal && world.GetTileAt(idX, idY).TopObject != DoTile.ObjectOnTop.SingleBlocker && world.GetTileAt(idX, idY).TopObject != DoTile.ObjectOnTop.SmallPortal)
                    {
                        world.GetTileAt(idX, idY).Type = DoTile.TileType.Empty;
                        world.GetTileAt(idX, idY).TopObject = DoTile.ObjectOnTop.None;

                        world.GetTileAt(idX, idY).SpawnEnemyHere = false;

                    
                    }
                }
            }
        }
    }
    private void PlaceAllTheStuff(DoRegion biggestRegion)
    {

        for (int i = 0; i < width; i++)
        {
            for (int j = 0; j < height; j++)
            {

                DoTile curTile = CurWorld.GetTileAt(i, j);

                //you are in the ground:
                if (curTile.Type == DoTile.TileType.Empty)
                {
                    //create grass
                    if (RandFloat() < grassOnGroundChance)
                        curTile.TopObject = DoTile.ObjectOnTop.Grass;

                    //create obstacle
                    else if (CurWorld.CountNeighbours(i, j, (x => (x.Type == DoTile.TileType.Obstacle || x.TopObject == DoTile.ObjectOnTop.SingleBlocker))) == 0)
                    {
                        if (RandFloat() < singleObstacleChanceOnGround)
                            curTile.TopObject = DoTile.ObjectOnTop.SingleBlocker;
                    }

                    //create pool:
                    else if (RandFloat() < poolSpawnChance)
                        curTile.TopObject = DoTile.ObjectOnTop.Pool;

                    if (curTile.TopObject == DoTile.ObjectOnTop.Grass || curTile.TopObject == DoTile.ObjectOnTop.None)
                    {
                        if (RandFloat() < enemyChance)
                        {
                            curTile.SpawnEnemyHere = true;
                        }
                    }
                }


                //you are on a obstacle:
                else if (curTile.Type == DoTile.TileType.Obstacle)
                {


                    if (CurWorld.HasLowerNeighbour(i, j, DoTile.TileType.Obstacle))
                    {
                        //create grass:
                        if (RandFloat() < grassOnObstacleChance)
                            curTile.TopObject = DoTile.ObjectOnTop.Grass;

                        //create obstacle
                        else if (RandFloat() < singleObstaclesChanceOnObstacles)
                            curTile.TopObject = DoTile.ObjectOnTop.SingleBlocker;
                    }



                }

            }
        }


       
        DoTile bigPortalTile = biggestRegion.GetTile( random.Next(biggestRegion.RegionSize()));
        RemoveTilesAround(CurWorld, biggestRegion, bigPortalTile.X, bigPortalTile.Y, 8);
        bigPortalTile.TopObject = DoTile.ObjectOnTop.BigPortal;

        for (int i = 0; i < PortalStoneTarget.NUM_COLORS; i++)
        {
            DoTile smallPortalTile = biggestRegion.GetTile(random.Next(biggestRegion.RegionSize()));
            RemoveTilesAround(CurWorld, biggestRegion, smallPortalTile.X, smallPortalTile.Y, 2);
            smallPortalTile.TopObject = DoTile.ObjectOnTop.SmallPortal;
        }


        DoTile playerStartTile = biggestRegion.GetTile(random.Next(biggestRegion.RegionSize()));
        RemoveTilesAround(CurWorld, biggestRegion, playerStartTile.X, playerStartTile.Y, 4);
        playerStartTile.TopObject = DoTile.ObjectOnTop.Player;

    }
    private void FillRegion(DoRegion region, DoWorld world, int[,] markedTiles, int x, int y)
    {

        //is inside the level:
        if (x >= 0 && y >= 0 && y < height && x < width)
        {
            //label is not 0 -> its marked by a region
            if (markedTiles[x, y] != 0 || world.GetTileAt(x, y).Type == DoTile.TileType.Obstacle)
                return;

            else
            {
                markedTiles[x, y] = region.RegionId;
                region.AddTile(world.GetTileAt(x, y));

                FillRegion(region, world, markedTiles, x - 1, y);
                FillRegion(region, world, markedTiles, x + 1, y);
                FillRegion(region, world, markedTiles, x, y - 1);
                FillRegion(region, world, markedTiles, x, y + 1);
            }


          
        }
    }