}
UpdateEntityMetadata();
- ProcessChunkBlocks(mostActiveCol.Key, mapChunk, chunkMeta);
+ ProcessChunkBlocks(mostActiveCol.Key, mapChunk, ref chunkMeta);
PngWriter pngWriter = SetupPngImage(mostActiveCol.Key, chunkMeta);
ChunkRenderer.GenerateChunkPngShard(mostActiveCol.Key, mapChunk, chunkMeta, pngWriter, out updatedPixels);
this.BlockID_Designators = new Dictionary<int, BlockDesignator>();
this.Entity_Designators = new Dictionary<AssetLocation, EntityDesignator>();
- this.RockIdCodes = Helpers.ArbitrarytBlockIdHunter(ClientAPI, new AssetLocation(GlobalConstants.DefaultDomain, "rock"), EnumBlockMaterial.Stone);
+ this.RockIdCodes = Helpers.ArbitrarytBlockIdHunter(ClientAPI, new AssetLocation(GlobalConstants.DefaultDomain, "rock-"), EnumBlockMaterial.Stone);
//Add special marker types for BlockID's of "Interest", overwrite colour, and method
}
+ //TODO: Rewrite as Newtonsoft JsonTextWriter !!!
/// <summary>
/// Generates the JSON Metadata. (in Map object format )
/// </summary>
{
string jsonFilename = Path.Combine(path, "Metadata.js");
- StreamWriter jsonWriter = new StreamWriter(jsonFilename, false, Encoding.UTF8);
+ StreamWriter stream = new StreamWriter(jsonFilename, false, Encoding.UTF8);
+
+ using (stream) {
+ JsonTextWriter jsonWriter = new JsonTextWriter(stream);
+
+ jsonWriter.Formatting = Formatting.None;
+ jsonWriter.StringEscapeHandling = StringEscapeHandling.EscapeHtml;
+ jsonWriter.Indentation = 0;
+ //jsonWriter.AutoCompleteOnClose = true;
+ jsonWriter.QuoteChar = '\'';
+ jsonWriter.DateFormatHandling = DateFormatHandling.IsoDateFormat;
+ jsonWriter.DateTimeZoneHandling = DateTimeZoneHandling.Utc;
+
using (jsonWriter)
{
- jsonWriter.Write("ViewFrame.chunks={};");
- jsonWriter.Write("ViewFrame.chunks.worldSeedNum={0};", ClientAPI.World.Seed);
- jsonWriter.Write("ViewFrame.chunks.genTime=new Date('{0}');", DateTimeOffset.UtcNow.ToString("O"));
- jsonWriter.Write("ViewFrame.chunks.startCoords=[{0},{1}];", startChunkColumn.X, startChunkColumn.Y);
- jsonWriter.Write("ViewFrame.chunks.chunkSize={0};", chunkSize);
- jsonWriter.Write("ViewFrame.chunks.northMostChunk={0};", chunkTopMetadata.North_mostChunk);
- jsonWriter.Write("ViewFrame.chunks.southMostChunk={0};", chunkTopMetadata.South_mostChunk);
- jsonWriter.Write("ViewFrame.chunks.eastMostChunk={0};", chunkTopMetadata.East_mostChunk);
- jsonWriter.Write("ViewFrame.chunks.westMostChunk={0};", chunkTopMetadata.West_mostChunk);
+ jsonWriter.WriteRaw("ViewFrame.chunks={};\n");
+ jsonWriter.WriteRaw("ViewFrame.chunks.worldSeedNum=" );
+ jsonWriter.WriteValue(ClientAPI.World.Seed);
+ jsonWriter.WriteRaw(";\n");
+
+ jsonWriter.WriteRaw("ViewFrame.chunks.genTime=");
+ jsonWriter.WriteValue(DateTimeOffset.UtcNow);
+ jsonWriter.WriteRaw(";\n");
+
+ jsonWriter.WriteRaw("ViewFrame.chunks.startCoords=");
+ jsonWriter.WriteStartArray( );
+ jsonWriter.WriteValue(startChunkColumn.X);
+ jsonWriter.WriteValue(startChunkColumn.Y);
+ jsonWriter.WriteEndArray( );
+ jsonWriter.WriteRaw(";\n");
+
+ jsonWriter.WriteRaw("ViewFrame.chunks.chunkSize=");
+ jsonWriter.WriteValue(chunkSize);
+ jsonWriter.WriteRaw(";\n");
+
+ jsonWriter.WriteRaw("ViewFrame.chunks.northMostChunk=");
+ jsonWriter.WriteValue(chunkTopMetadata.North_mostChunk);
+ jsonWriter.WriteRaw(";\n");
+
+ jsonWriter.WriteRaw("ViewFrame.chunks.southMostChunk=");
+ jsonWriter.WriteValue(chunkTopMetadata.South_mostChunk);
+ jsonWriter.WriteRaw(";\n");
+
+ jsonWriter.WriteRaw("ViewFrame.chunks.westMostChunk=");
+ jsonWriter.WriteValue(chunkTopMetadata.West_mostChunk);
+ jsonWriter.WriteRaw(";\n");
+
+ jsonWriter.WriteRaw("ViewFrame.chunks.eastMostChunk=");
+ jsonWriter.WriteValue(chunkTopMetadata.East_mostChunk);
+ jsonWriter.WriteRaw(";\n");
+
+
//MAP object format - [key, value]: key is "x_y"
- jsonWriter.Write("ViewFrame.chunks.chunkMetadata=new Map([");
+ jsonWriter.WriteRaw("ViewFrame.chunks.chunkMetadata=");
+ jsonWriter.WriteStartConstructor("Map");
+ jsonWriter.WriteStartArray( );//An array of... 2-component arrays
+
+
foreach (var shard in chunkTopMetadata)
{
- jsonWriter.Write("['{0}_{1}',", shard.Location.X, shard.Location.Y);
- jsonWriter.Write("{");
- jsonWriter.Write("prettyCoord:'{0}',", shard.Location.PrettyCoords(ClientAPI));
- jsonWriter.Write("chunkAge:'{0}',", shard.ChunkAge.ToString("g"));//World age - relative? or last edit ??
- jsonWriter.Write("temp:'{0}',", shard.Temperature.ToString("F1"));
- jsonWriter.Write("YMax:'{0}',", shard.YMax);
- jsonWriter.Write("fert:'{0}',", shard.Fertility.ToString("F1"));
- jsonWriter.Write("forestDens:'{0}',", shard.ForestDensity.ToString("F1"));
- jsonWriter.Write("rain:'{0}',", shard.Rainfall.ToString("F1"));
- jsonWriter.Write("shrubDens:'{0}',", shard.ShrubDensity.ToString("F1"));
- jsonWriter.Write("airBlocks:'{0}',", shard.AirBlocks);
- jsonWriter.Write("nonAirBlocks:'{0}',", shard.NonAirBlocks);
- //TODO: Heightmap
- //TODO: Rock-ratio, also requires a BlockID => Name lookup table....elsewhere
- jsonWriter.Write("}],");
+ jsonWriter.WriteStartArray( );//Start tuple
+ jsonWriter.WriteValue($"{shard.Location.X}_{shard.Location.Y}");//Key of Tuple
+
+ jsonWriter.WriteStartObject( );
+ jsonWriter.WritePropertyName("prettyCoord");
+ jsonWriter.WriteValue( shard.Location.PrettyCoords(ClientAPI));
+
+ jsonWriter.WritePropertyName("chunkAge");
+ jsonWriter.WriteValue(shard.ChunkAge);
+
+ jsonWriter.WritePropertyName("temp");
+ jsonWriter.WriteValue(shard.Temperature);
+
+ jsonWriter.WritePropertyName("YMax");
+ jsonWriter.WriteValue(shard.YMax);
+
+ jsonWriter.WritePropertyName("fert");
+ jsonWriter.WriteValue(shard.Fertility);
+
+ jsonWriter.WritePropertyName("forestDens");
+ jsonWriter.WriteValue( shard.ForestDensity);
+
+ jsonWriter.WritePropertyName("rain");
+ jsonWriter.WriteValue( shard.Rainfall);
+
+ jsonWriter.WritePropertyName("shrubDens");
+ jsonWriter.WriteValue( shard.ShrubDensity);
+
+ jsonWriter.WritePropertyName("airBlocks");
+ jsonWriter.WriteValue( shard.AirBlocks);
+
+ jsonWriter.WritePropertyName("nonAirBlocks");
+ jsonWriter.WriteValue( shard.NonAirBlocks);
+
+ //TODO: Heightmap ?
+ //Start rockMap ; FOR a Ratio....on tooltip GUI
+ jsonWriter.WritePropertyName("rockRatio");
+ jsonWriter.WriteStartConstructor("Map");
+ jsonWriter.WriteStartArray( );
+ foreach (var rockEntry in shard.RockRatio) {
+ jsonWriter.WriteStartArray( );
+ jsonWriter.WriteValue(rockEntry.Key);//BlockID
+ jsonWriter.WriteValue(rockEntry.Value);//Total per chunk-column
+ jsonWriter.WriteEndArray( );
+ }
+ jsonWriter.WriteEndArray( );
+ jsonWriter.WriteEndConstructor( );//end rock-map
+
+ jsonWriter.WriteEndObject( );//end Map value: {Object}
+ jsonWriter.WriteEndArray( );//end Tuple
}
- jsonWriter.Write("]);");
+ jsonWriter.WriteEndArray( );//Enclose tuples of chunkMetadata
+ jsonWriter.WriteEndConstructor( );//Close constructor of Map (chunkMetadata)
+ jsonWriter.WriteRaw(";\n");
+
+ jsonWriter.WriteRaw("ViewFrame.chunks.pointsOfInterest=");
+ jsonWriter.WriteStartConstructor("Map");
+ jsonWriter.WriteStartArray( );//An array of... 2-component arrays
- jsonWriter.Write("ViewFrame.chunks.pointsOfInterest = new Map([");
foreach (var poi in POIs)
{
- jsonWriter.Write("['{0}_{1}',", poi.Location.X, poi.Location.Z);
- jsonWriter.Write("{");
- jsonWriter.Write("prettyCoord:'{0}',", poi.Location.PrettyCoords(ClientAPI));
- jsonWriter.Write("notes:{0},", JsonConvert.ToString(poi.Notes, '\'', StringEscapeHandling.EscapeHtml));
- jsonWriter.Write("time:new Date('{0}'),", poi.Timestamp.ToString("O"));
- jsonWriter.Write("chunkPos:'{0}_{1}',", (poi.Location.X / chunkSize), (poi.Location.Z / chunkSize));
- jsonWriter.Write("}],");
+ jsonWriter.WriteStartArray( );
+ jsonWriter.WriteValue($"{poi.Location.X}_{poi.Location.Z}");
+
+ jsonWriter.WriteStartObject();
+ jsonWriter.WritePropertyName("prettyCoord");
+ jsonWriter.WriteValue(poi.Location.PrettyCoords(ClientAPI) );
+
+ jsonWriter.WritePropertyName("notes");
+ jsonWriter.WriteValue(poi.Notes);//Encoded to HTML Entities
+
+ jsonWriter.WritePropertyName("time");
+ jsonWriter.WriteValue(poi.Timestamp);
+
+ jsonWriter.WritePropertyName("chunkPos");
+ jsonWriter.WriteValue($"{(poi.Location.X / chunkSize)}_{(poi.Location.Z / chunkSize)}");
+
+ jsonWriter.WriteEndObject( );
+ jsonWriter.WriteEndArray( );
}
foreach (var poi in EOIs)
{
- jsonWriter.Write("['{0}_{1}',", poi.Location.X, poi.Location.Z);
- jsonWriter.Write("{");
- jsonWriter.Write("prettyCoord:'{0}',", poi.Location.PrettyCoords(ClientAPI));
- jsonWriter.Write("notes:{0},", JsonConvert.ToString(poi.Notes, '\'', StringEscapeHandling.EscapeHtml));
- jsonWriter.Write("time:new Date('{0}'),", poi.Timestamp.ToString("O"));
- jsonWriter.Write("chunkPos:'{0}_{1}',", (poi.Location.X / chunkSize), (poi.Location.Z / chunkSize));
- jsonWriter.Write("}],");
+ jsonWriter.WriteStartArray( );
+ jsonWriter.WriteValue($"{poi.Location.X}_{poi.Location.Z}");
+
+ jsonWriter.WriteStartObject( );
+ jsonWriter.WritePropertyName("prettyCoord");
+ jsonWriter.WriteValue(poi.Location.PrettyCoords(ClientAPI));
+
+ jsonWriter.WritePropertyName("notes");
+ jsonWriter.WriteValue(poi.Notes);//Encoded to HTML Entities
+
+ jsonWriter.WritePropertyName("time");
+ jsonWriter.WriteValue(poi.Timestamp);
+
+ jsonWriter.WritePropertyName("chunkPos");
+ jsonWriter.WriteValue($"{(poi.Location.X / chunkSize)}_{(poi.Location.Z / chunkSize)}");
+
+ jsonWriter.WriteEndObject( );
+ jsonWriter.WriteEndArray( );
}
- jsonWriter.Write("]);");
+
+ jsonWriter.WriteEndArray( );
+ jsonWriter.WriteEndConstructor( );
+ jsonWriter.WriteRaw(";\n");
+
+ jsonWriter.WriteWhitespace("\n");
+ jsonWriter.WriteComment("============= BlockID's for Rockmap / Rock-ratios ===============");
+ jsonWriter.WriteWhitespace("\n");
+
+ jsonWriter.WriteRaw("var rock_Lookup =");
+ jsonWriter.WriteStartConstructor("Map");
+ jsonWriter.WriteStartArray( );//An array of... 2-component arrays
+
+ foreach (var entry in RockIdCodes) {
+ var block = ClientAPI.World.GetBlock(entry.Key);
+
+ jsonWriter.WriteStartArray( );
+ jsonWriter.WriteValue(entry.Key);//BlockID
+
+ jsonWriter.WriteStartObject( );
+ jsonWriter.WritePropertyName("assetCode");
+ jsonWriter.WriteValue(entry.Value);
+
+ jsonWriter.WritePropertyName("name");
+ jsonWriter.WriteValue(Lang.GetUnformatted(block.Code.Path));
+ //Color?
+
+ jsonWriter.WriteEndObject( );
+ jsonWriter.WriteEndArray( );
+ }
+ jsonWriter.WriteEndArray( );
+ jsonWriter.WriteEndConstructor();
+
+ jsonWriter.WriteRaw(";\n");
jsonWriter.Flush();
}
+ }
}
/// <param name="key">Chunk Coordinate</param>
/// <param name="mapChunk">Map chunk.</param>
/// <param name="chunkMeta">Chunk metadata</param>
- private void ProcessChunkBlocks(Vec2i key, IMapChunk mapChunk, ColumnMeta chunkMeta)
+ private void ProcessChunkBlocks(Vec2i key, IMapChunk mapChunk, ref ColumnMeta chunkMeta)
{
int targetChunkY = mapChunk.YMax / chunkSize;//Surface ...