int ComputeSurfaceCoverage( Block coverBlock ) {
int count = 0;
fixed( byte* blocks = map.Blocks ) {
int layerSize = map.Width * map.Length;
for( int x = 0; x < map.Width; x++ ) {
for( int y = 0; y < map.Length; y++ ) {
int index = map.Index( x, y, map.Height - 1 );
for( int z = (map.Height - 1); z >= 0; z-- ) {
Block block = (Block)blocks[index];
if( block == coverBlock ) {
count++;
break;
} else if( block != Block.Air ) {
break;
} else {
index -= layerSize;
}
}
}
}
return count;
}
}