public TileData this[int x, int y, int z] { get { int i = extents.ToIndexAt(x, y, z); return(data[i]); } set { int i = extents.ToIndexAt(x, y, z); data[i] = value; } }
static private byte FindAdjacentDirections(int x, int y, int z, NativeArray <TileData> data, int filledValue, Extents extent) { int i = extent.ToIndexAt(x, y, z); byte res = 0; if (x > 0 && HasTop(i - 1, y, data, filledValue, extent)) { res |= AdjacentXMinus; } if (x < extent.X - 1 && HasTop(i + 1, y, data, filledValue, extent)) { res |= AdjacentXPlus; } if (z > 0 && HasTop(i - extent.X, y, data, filledValue, extent)) { res |= AdjacentZMinus; } if (z < extent.Z - 1 && HasTop(i + extent.X, y, data, filledValue, extent)) { res |= AdjacentZPlus; } if (x > 0 && z > 0 && HasTop(i - extent.X - 1, y, data, filledValue, extent)) { res |= AdjacentXMinusZMinus; } if (x > 0 && z < extent.Z - 1 && HasTop(i + extent.X - 1, y, data, filledValue, extent)) { res |= AdjacentXMinusZPlus; } if (x < extent.X - 1 && z > 0 && HasTop(i - extent.X + 1, y, data, filledValue, extent)) { res |= AdjacentXPlusZMinus; } if (x < extent.X - 1 && z < extent.Z - 1 && HasTop(i + extent.X + 1, y, data, filledValue, extent)) { res |= AdjacentXPlusZPlus; } return(res); }
static private bool HasTop(int x, int y, int z, NativeArray <TileData> data, int filledValue, Extents extent) { int i = extent.ToIndexAt(x, y, z); return(data[i].themeIndex == filledValue && (y == extent.Y - 1 || data[i + extent.XZ].themeIndex != filledValue)); }