}
ColumnMeta chunkMeta;
- if (chunkTopMetadata.Contains(mostActiveCol.Key)) {
- chunkMeta = chunkTopMetadata[mostActiveCol.Key];
+ if (chunkTopMetadata.Contains(mostActiveCol.Key))
+ {
+ chunkMeta = chunkTopMetadata[mostActiveCol.Key];
}
- else {
- chunkMeta = CreateColumnMetadata(mostActiveCol, mapChunk);
+ else
+ {
+ chunkMeta = CreateColumnMetadata(mostActiveCol, mapChunk);
}
- 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);
{
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);
- // this is so that the tool tip doesnt need to be hard coded in the map
- jsonWriter.Write("ViewFrame.chunks.chunkMetaNames=[");
- // there are 10 (TEN) (ten) things
- jsonWriter.Write("'Loc.','Age','Temp.','Y Max','Fert.','Forest','Rain','Shrub','Air','Non-Air'");
- jsonWriter.Write("];");
+ 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("[");
- // 10 things but 0 indexed so NINE (9)
- jsonWriter.Write("'{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}'",
- shard.Location.PrettyCoords(ClientAPI),
- shard.ChunkAge.ToString("g"),//World age - relative? or last edit ??
- shard.Temperature.ToString("F1"),
- shard.YMax,
- shard.Fertility.ToString("F1"),
- shard.ForestDensity.ToString("F1"),
- shard.Rainfall.ToString("F1"),
- shard.ShrubDensity.ToString("F1"),
- shard.AirBlocks,
- shard.NonAirBlocks
- );
- //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) {
+ var rockBlock = ClientAPI.World.GetBlock(rockEntry.Key);
+ jsonWriter.WriteStartArray( );
+ jsonWriter.WriteValue(rockBlock.Code.Path);
+ 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}',", (float) poi.Location.X / chunkSize, (float) poi.Location.Z / chunkSize);
- 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("]);");
- foreach (var poi in EOIs)
+ jsonWriter.Write("ViewFrame.chunks.entitiesOfInterest=new Map([");
+ foreach (var eoi in EOIs)
{
- jsonWriter.Write("['{0}_{1}',", (float) eoi.Location.X / chunkSize, (float) eoi.Location.Z / chunkSize);
- jsonWriter.Write("{");
- jsonWriter.Write("prettyCoord:'{0}',", eoi.Location.PrettyCoords(ClientAPI));
- jsonWriter.Write("notes:{0},", JsonConvert.ToString(eoi.Notes, '\'', StringEscapeHandling.EscapeHtml));
- jsonWriter.Write("time:new Date('{0}'),", eoi.Timestamp.ToString("O"));
- jsonWriter.Write("chunkPos:'{0}_{1}',", (eoi.Location.X / chunkSize), (eoi.Location.Z / chunkSize));
- jsonWriter.Write("entityId:'{0}'", eoi.EntityId);
- 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("ViewFrame.chunks.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(block.Code.Path);
+
+ 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();
}