public static void DrawRect(Tilemap tilemap, Vector2 locPosA, Vector2 locPosB, uint[,] tileData, bool isFilled, bool is9Sliced = false) { int w = tileData.GetLength(0); int h = tileData.GetLength(1); int x0 = TilemapUtils.GetGridX(tilemap, locPosA); int y0 = TilemapUtils.GetGridY(tilemap, locPosA); int x1 = TilemapUtils.GetGridX(tilemap, locPosB); int y1 = TilemapUtils.GetGridY(tilemap, locPosB); if (x0 > x1) { Swap <int>(ref x0, ref x1); } if (y0 > y1) { Swap <int>(ref y0, ref y1); } TilemapDrawingUtils.Rect(x0, y0, x1, y1, isFilled, (x, y) => { if (is9Sliced) { if (x == x0 && y == y0) { tilemap.SetTileData(x, y, tileData[0, 0]); } else if (x == x0 && y == y1) { tilemap.SetTileData(x, y, tileData[0, h - 1]); } else if (x == x1 && y == y0) { tilemap.SetTileData(x, y, tileData[w - 1, 0]); } else if (x == x1 && y == y1) { tilemap.SetTileData(x, y, tileData[w - 1, h - 1]); } else { int cw = w - 2; int ch = h - 2; int cx = cw >= 1 ? 1 + (x % cw + cw) % cw : (x % w + w) % w; int cy = ch >= 1 ? 1 + (y % ch + ch) % ch : (y % h + h) % h; if (x == x0) { tilemap.SetTileData(x, y, tileData[0, cy]); } else if (x == x1) { tilemap.SetTileData(x, y, tileData[w - 1, cy]); } else if (y == y0) { tilemap.SetTileData(x, y, tileData[cx, 0]); } else if (y == y1) { tilemap.SetTileData(x, y, tileData[cx, h - 1]); } else { tilemap.SetTileData(x, y, tileData[cx, cy]); } } } else { tilemap.SetTileData(x, y, tileData[(x % w + w) % w, (y % h + h) % h]); } return(true); } ); }
public static void DrawRect(STETilemap tilemap, int x0, int y0, int x1, int y1, uint[,] tileData, bool isFilled, bool is9Sliced = false, bool randomize = false) { int w = tileData.GetLength(0); int h = tileData.GetLength(1); if (x0 > x1) { Swap <int>(ref x0, ref x1); } if (y0 > y1) { Swap <int>(ref y0, ref y1); } TilemapDrawingUtils.Rect(x0, y0, x1, y1, isFilled, (x, y) => { if (is9Sliced) { if (x == x0 && y == y0) { tilemap.SetTileData(x, y, tileData[0, 0]); } else if (x == x0 && y == y1) { tilemap.SetTileData(x, y, tileData[0, h - 1]); } else if (x == x1 && y == y0) { tilemap.SetTileData(x, y, tileData[w - 1, 0]); } else if (x == x1 && y == y1) { tilemap.SetTileData(x, y, tileData[w - 1, h - 1]); } else { int cw = w - 2; int ch = h - 2; int cx = cw >= 1 ? 1 + (x % cw + cw) % cw : (x % w + w) % w; int cy = ch >= 1 ? 1 + (y % ch + ch) % ch : (y % h + h) % h; if (x == x0) { tilemap.SetTileData(x, y, tileData[0, cy]); } else if (x == x1) { tilemap.SetTileData(x, y, tileData[w - 1, cy]); } else if (y == y0) { tilemap.SetTileData(x, y, tileData[cx, 0]); } else if (y == y1) { tilemap.SetTileData(x, y, tileData[cx, h - 1]); } else { if (randomize) { tilemap.SetTileData(x, y, tileData[w > 2 ? Random.Range(1, w - 1) : cx, h > 2 ? Random.Range(1, h - 1) : cy]); } else { tilemap.SetTileData(x, y, tileData[cx, cy]); } } } } else { int dataIdx0 = randomize ? Random.Range(0, w) : (x % w + w) % w; int dataIdx1 = randomize ? Random.Range(0, h) : (y % h + h) % h; tilemap.SetTileData(x, y, tileData[dataIdx0, dataIdx1]); } return(true); } ); }