Ejemplo n.º 1
0
        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);
            }
                                        );
        }
Ejemplo n.º 2
0
        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);
            }
                                        );
        }