public static void DrawEllipse(Tilemap tilemap, Vector2 locPosA, Vector2 locPosB, uint[,] tileData, bool isFilled) { 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); int xf = 0; int yf = 0; //fix for cases where x1 x2 y1 or y2 are negative or x1 > x2 or y1 > y2 // NOTE: I tested this only for case x1 == y1 == 0 if (x0 > x1) { Swap <int>(ref x0, ref x1); } if (y0 > y1) { Swap <int>(ref y0, ref y1); } if (x0 < 0) { xf = x0; x0 = 0; x1 -= xf; } if (y0 < 0) { yf = y0; y0 = 0; y1 -= yf; } // TilemapDrawingUtils.Ellipse(x0, y0, x1, y1, isFilled, (x, y) => { tilemap.SetTileData(x + xf, y + yf, tileData[((x + xf) % w + w) % w, ((y + yf) % h + h) % h]); return(true); } ); }
public static void DrawEllipse(STETilemap tilemap, int x0, int y0, int x1, int y1, uint[,] tileData, bool isFilled, bool randomize = false) { int w = tileData.GetLength(0); int h = tileData.GetLength(1); int xf = 0; int yf = 0; //fix for cases where x1 x2 y1 or y2 are negative or x1 > x2 or y1 > y2 // NOTE: I tested this only for case x1 == y1 == 0 if (x0 > x1) { Swap <int>(ref x0, ref x1); } if (y0 > y1) { Swap <int>(ref y0, ref y1); } if (x0 < 0) { xf = x0; x0 = 0; x1 -= xf; } if (y0 < 0) { yf = y0; y0 = 0; y1 -= yf; } // TilemapDrawingUtils.Ellipse(x0, y0, x1, y1, isFilled, (x, y) => { int dataIdx0 = randomize ? Random.Range(0, w) : ((x + xf) % w + w) % w; int dataIdx1 = randomize ? Random.Range(0, h) : ((y + yf) % h + h) % h; tilemap.SetTileData(x + xf, y + yf, tileData[dataIdx0, dataIdx1]); return(true); } ); }