MapUtil.PosInt2d(pixelIndex, chunkSize, localpos);
int localX = localpos.X;
int localZ = localpos.Y;
- ushort localY = metaData.HeightMap[localX, localZ];//mc.RainHeightMap[posIndex];//NOPE NOPE NOPE, RAINMAP IS CRAP. USE IT NOT!
+ ushort localY = metaData.HeightMap[localX, localZ];
int localChunkY = localY / chunkSize;
if (localChunkY >= (chunksColumn.Length)) continue;//Out of range!
if (chunksColumn[localChunkY] == null) continue;//BIG Gaps!
+ if (mapChunks.Any(chks => chks == null)) {
+ //Logger.Warning("MapChunk A.W.O.L. near : X{0} Y{1} Z{2} - ", localX, localY, localZ);
+ continue;
+ }
float slopeBoost = 1;
int leftTop, rightTop, leftBot;
topX = GameMath.Mod(topX, chunkSize);
leftZ = GameMath.Mod(leftZ, chunkSize);
-
+ //TODO: Replace with Metadata Heightmap?
leftTop = leftTopMapChunk == null ? 0 : Math.Sign(localY - leftTopMapChunk.RainHeightMap[leftZ * chunkSize + topX]);
rightTop = rightTopMapChunk == null ? 0 : Math.Sign(localY - rightTopMapChunk.RainHeightMap[rightZ * chunkSize + topX]);
leftBot = leftBotMapChunk == null ? 0 : Math.Sign(localY - leftBotMapChunk.RainHeightMap[leftZ * chunkSize + botX]);
slopeBoost -= 0.15f; //Slope boost value
- int blockId = chunksColumn[localChunkY].Blocks[MapUtil.Index3d(localX, (localY % chunkSize), localZ, chunkSize, chunkSize)];
+ int blockId = chunksColumn[localChunkY].MaybeBlocks[MapUtil.Index3d(localX, (localY % chunkSize), localZ, chunkSize, chunkSize)];
Block block = ClientAPI.World.Blocks[blockId];