Exemple #1
0
        int CalculateIndex(STETilemap tilemap, int gridX, int gridY, uint tileData)
        {
            int brushId = (int)((tileData & Tileset.k_TileDataMask_BrushId) >> 16);

            // upper row
            bool autotiling_NW = AutotileWith(tilemap, brushId, gridX - 1, gridY + 1);
            bool autotiling_N  = AutotileWith(tilemap, brushId, gridX, gridY + 1);
            bool autotiling_NE = AutotileWith(tilemap, brushId, gridX + 1, gridY + 1);

            // mid row
            bool autotiling_E = AutotileWith(tilemap, brushId, gridX + 1, gridY);
            bool autotiling_W = AutotileWith(tilemap, brushId, gridX - 1, gridY);

            // bottom row
            bool autotiling_SW = AutotileWith(tilemap, brushId, gridX - 1, gridY - 1);
            bool autotiling_S  = AutotileWith(tilemap, brushId, gridX, gridY - 1);
            bool autotiling_SE = AutotileWith(tilemap, brushId, gridX + 1, gridY - 1);

            int binIdx = 0;

            // clockwise
            if (autotiling_N)
            {
                binIdx = 1;
            }
            if (autotiling_N && autotiling_E && autotiling_NE)
            {
                binIdx |= 2;
            }
            if (autotiling_E)
            {
                binIdx |= 4;
            }
            if (autotiling_S && autotiling_E && autotiling_SE)
            {
                binIdx |= 8;
            }
            if (autotiling_S)
            {
                binIdx |= 16;
            }
            if (autotiling_S && autotiling_W && autotiling_SW)
            {
                binIdx |= 32;
            }
            if (autotiling_W)
            {
                binIdx |= 64;
            }
            if (autotiling_N && autotiling_W && autotiling_NW)
            {
                binIdx |= 128;
            }

            return(Array.IndexOf(binaryGrid, binIdx));
        }
Exemple #2
0
        public override uint[] GetSubtiles(STETilemap tilemap, int gridX, int gridY, uint tileData)
        {
            // Add animated tiles
            {
                int idx = CalculateIndex(tilemap, gridX, gridY, tileData);

                TilesetBrush brush = Tileset.FindBrush(Tileset.GetBrushIdFromTileData(TileIds[idx]));
                if (brush && brush.IsAnimated())
                {
                    TilemapChunk.RegisterAnimatedBrush(brush);
                }
            }
            return(null);
        }