[ProtoAfterDeserialization]
private void PostProcess()
{
- if (this.HeightMap == null) this.HeightMap = new ushort[ChunkSize, ChunkSize];
+ ChunkSize = (ChunkSize == byte.MinValue) ? (byte)32 : ChunkSize;//Not good - if chunk wasn't 32 orignally!
+
+ if (this.HeightMap == null || this.HeightMap.Length != (ChunkSize * ChunkSize)) {
+ this.HeightMap = new ushort[ChunkSize, ChunkSize];
+ }
if (_flattened_HeightMap != null)
{
int col, row;
- _ = new BitVector32(0);
+ var bitMasker = new BitVector32(0);
var rowSection = BitVector32.CreateSection((short) (ChunkSize - 1));
var colSection = BitVector32.CreateSection((short) (ChunkSize - 1), rowSection);
for (uint rowcol = 0; rowcol < (ChunkSize * ChunkSize); rowcol++)
{
- BitVector32 bitMasker = new BitVector32(data: (int) rowcol);
+ bitMasker = new BitVector32(data: (int) rowcol);
row = bitMasker[rowSection];
col = bitMasker[colSection];
HeightMap[col, row] = _flattened_HeightMap[rowcol];
base.Add(newItem);
}
+ public void ClearMetadata( )
+ {
+ for (int i = 0, maxItemsCount = this.Items.Count; i < maxItemsCount; i++) {
+ ColumnMeta entry = this.Items[i];
+ entry.HeightMap = null;
+ entry.RockRatio = null;//Also regenerated when any chunk in a column is changed...
+ }
+ }
+
}
-}
\ No newline at end of file
+}
internal CommandType CurrentState { get; set; }
//Run status, Chunks processed, stats, center of map....
- private uint nullChunkCount, updatedChunksTotal;
+ private uint nullChunkCount, nullMapCount, updatedChunksTotal;
private Vec2i startChunkColumn;
private readonly int chunkSize;
if (mapChunk == null)
{
Logger.Warning("SKIP CHUNK: ({0}) - Map Chunk NULL!", mostActiveCol.Key);
- nullChunkCount++;
+ nullMapCount++;
columnCounter.TryRemove(mostActiveCol.Key, out ejectedItem);
continue;
}
columnCounter.TryRemove(mostActiveCol.Key, out ejectedItem);
Logger.VerboseDebug("Un-painted chunk: ({0}) ", mostActiveCol.Key);
}
-
}
+ //Cleanup persisted Metadata...
+ chunkTopMetadata.ClearMetadata( );
}
UpdateStatus(this.updatedChunksTotal, this.nullChunkCount, updatedChunks);
#if DEBUG
Logger.VerboseDebug("Chunk null or empty X{0} Y{1} Z{2}", key.X, targetChunkY, key.Y);
#endif
+ nullChunkCount++;
continue;
}
foreach (var blockEnt in chunkData.BlockEntities)
{
-
if (blockEnt != null && blockEnt.Block != null && BlockID_Designators.ContainsKey(blockEnt.Block.BlockId))
{
var designator = BlockID_Designators[blockEnt.Block.BlockId];
designator.SpecialAction(ClientAPI, POIs, blockEnt.Pos.Copy(), blockEnt.Block);
}
}
-
}
/********************* Chunk/Column BLOCKs scanning ****************/
//Heightmap, Stats, block tally
int X_index, Y_index, Z_index;
X_index = Y_index = Z_index = 0;
+ //Ensure ChunkData Metadata fields arn't null...due to being tossed out
+ if (chunkMeta.HeightMap == null) { chunkMeta.HeightMap = new ushort[chunkSize, chunkSize]; }
+ if (chunkMeta.RockRatio == null) { chunkMeta.RockRatio = new Dictionary<int, uint>(10); }
+
do
{
do