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