OSDN Git Service

W.I.P. Map chunk tweaks to avoid crash...
authormelchior <melchior@users.osdn.me>
Sun, 25 Oct 2020 20:48:00 +0000 (16:48 -0400)
committermelchior <melchior@users.osdn.me>
Sun, 25 Oct 2020 20:48:00 +0000 (16:48 -0400)
Automap/Renderers/StandardRenderer.cs

index 3003546..6613555 100644 (file)
@@ -64,11 +64,15 @@ namespace Automap
                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;
@@ -100,7 +104,7 @@ namespace Automap
 
                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]);
@@ -112,7 +116,7 @@ namespace Automap
 
                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];