private ConcurrentDictionary<Vec2i, ColumnCounter> columnCounters = new ConcurrentDictionary<Vec2i, ColumnCounter>(3, 150);
private ColumnsMetadata chunkTopMetadata;
- private PointsOfInterest POIs = new PointsOfInterest();
- private EntitiesOfInterest EOIs = new EntitiesOfInterest();
- private Dictionary<int, ulong> blockTally;//TODO: TOTAL Road Tally
+ internal PointsOfInterest POIs = new PointsOfInterest();
+ internal EntitiesOfInterest EOIs = new EntitiesOfInterest();
internal Dictionary<int, BlockDesignator> BlockID_Designators { get; private set; }
internal Dictionary<AssetLocation, EntityDesignator> Entity_Designators { get; private set; }
if (mapChunk == null)
{
//TODO: REVISIT THIS CHUNK!
+ #if DEBUG
Logger.Warning("SKIP CHUNK: ({0}) - Map Chunk NULL!", mostActiveCol.Key);
+ #endif
nullMapCount++;
columnCounters.TryRemove(mostActiveCol.Key, out ejectedItem);
continue;
private void Reload_POI_Designators()
{
- Logger.VerboseDebug("Connecting {0} Configured Block-Designators", configuration.BlockDesignators.Count);
+ uint poisSetup =0, eoiSetup = 0;
foreach (var designator in configuration.BlockDesignators)
{
+ if (designator.Enabled == false) continue;
var blockIDs = Helpers.ArbitrarytBlockIdHunter(ClientAPI, designator.Pattern, designator.Material);
if (blockIDs.Count > 0) { Logger.VerboseDebug("Designator {0} has {1} associated blockIDs", designator.ToString(), blockIDs.Count); }
foreach (var entry in blockIDs)
{
BlockID_Designators.Add(entry.Key, designator);
+ poisSetup++;
}
}
this.ChunkRenderer.BlockID_Designators = BlockID_Designators;
+ Logger.VerboseDebug("Connected {0} IDs from {1} Block-Designators", poisSetup, configuration.BlockDesignators.Count );
- Logger.VerboseDebug("Connecting {0} Configured Entity-Designators", configuration.EntityDesignators.Count);
foreach (var designator in configuration.EntityDesignators)
{
+ if (designator.Enabled == false) continue;
//Get Variants first, from EntityTypes...better be populated!
var matched = ClientAPI.World.EntityTypes.FindAll(entp => entp.Code.BeginsWith(designator.Pattern.Domain, designator.Pattern.Path));
foreach (var match in matched)
- {
+ {
Logger.VerboseDebug("Linked Entity: {0} Designator: {1}", match.Code, designator);
this.Entity_Designators.Add(match.Code, designator);
+ eoiSetup++;
}
-
- //EntityProperties props = ClientAPI.World.GetEntityType(designator.Pattern);
}
-
+ Logger.VerboseDebug("Connected {0} IDs from {1} Entity-Designators", eoiSetup, configuration.EntityDesignators.Count);
}
if (this.POIs.Count > 0)
{
- using (var poiFile = File.OpenWrite(poiPath))
+ using (var poiFile = File.Open(poiPath, FileMode.Create, FileAccess.Write, FileShare.None))
{
Serializer.Serialize<PointsOfInterest>(poiFile, this.POIs);
+ poiFile.Flush(true);
}
}
if (this.EOIs.Count > 0)
{
- using (var eoiFile = File.OpenWrite(eoiPath))
+ using (var eoiFile = File.Open(eoiPath, FileMode.Create, FileAccess.Write, FileShare.None))
{
Serializer.Serialize<EntitiesOfInterest>(eoiFile, this.EOIs);
+ eoiFile.Flush(true);
}
}
mdWriter.WriteLine("AMVersion '{0}'", ClientAPI.Self().Info.Version);
mdWriter.WriteLine("PlayTime {0:F1}", ClientAPI.InWorldEllapsedMilliseconds / 1000);
mdWriter.WriteLine("GameDate {0}", ClientAPI.World.Calendar.PrettyDate());
+ mdWriter.WriteLine("Chunks {0:D}", chunkTopMetadata.Count);
+ mdWriter.WriteLine("Chunks Updated {0:D}", updatedChunksTotal);
+ mdWriter.WriteLine("Null Chunks {0:D}", nullChunkCount);
mdWriter.Flush( );
}
}
if (worldChunk.IsPacked())
{
+ #if DEBUG
Logger.VerboseDebug("WORLD chunk: Compressed: X{0} Y{1} Z{2}", key.X, targetChunkY, key.Y);
+ #endif
worldChunk.Unpack( );//RESEARCH: Thread Unsafe?
}
foreach (var blockEnt in worldChunk.BlockEntities)
{
- if (blockEnt.Value != null && blockEnt.Value.Block != null && BlockID_Designators.ContainsKey(blockEnt.Value.Block.BlockId))
+ if (blockEnt.Key != null && blockEnt.Value != null && blockEnt.Value.Block != null && BlockID_Designators.ContainsKey(blockEnt.Value.Block.BlockId))
{
var designator = BlockID_Designators[blockEnt.Value.Block.BlockId];
- designator.SpecialAction(ClientAPI, POIs, blockEnt.Value.Pos.Copy(), blockEnt.Value.Block);
+ designator?.SpecialAction(ClientAPI, POIs, blockEnt.Value.Pos.Copy(), blockEnt.Value.Block);
}
}
}
//First Chance fail-safe;
if (worldChunk.Blocks == null || worldChunk.Blocks.Length <= 0) {
+ #if DEBUG
Logger.VerboseDebug("WORLD chunk; Missing block DATA⁈ X{0} Y{1} Z{2} ⁈", key.X, targetChunkY, key.Y);
+ #endif
nullChunkCount++;
continue;
}
//'Last' Chance fail-safe;
if (worldChunk.Blocks == null || worldChunk.Blocks.Length <= 0) {
+ #if DEBUG
Logger.VerboseDebug("Processing Block: Missing block DATA⁈ X{0} Y{1} Z{2} ⁈", X_index, Y_index, Z_index);
+ #endif
nullChunkCount++;
- goto loop_bustout; ;
+ goto loop_bustout;
}
int aBlockId = worldChunk.Blocks[indicie];
}
loop_bustout:;
}
+ #if DEBUG
Logger.VerboseDebug("COLUMN X{0} Z{1}: {2}, processed.", key.X , key.Y, chunkTally + 1);
+ #endif
}
private void UpdateEntityMetadata()
{
+ #if DEBUG
Logger.Debug("Presently {0} Entities", ClientAPI.World.LoadedEntities.Count);
+ #endif
//Mabey scan only for 'new' entities by tracking ID in set?
foreach (var loadedEntity in ClientAPI.World.LoadedEntities.ToArray())
{
AddNote(cmdData.Notation);
break;
}
- #if DEBUG
+
ClientAPI.TriggerChatMessage($"Automap commanded to: {cmdData.State} ");
- #endif
+
}
- #endregion
+#endregion
private AChunkRenderer InstantiateChosenRenderer(string rendererName )
{