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 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); } } }