3 using System.Text.RegularExpressions;
8 using Hjg.Pngcs.Chunks;
12 namespace ShardProcessor
16 //private ILogger Logger { get; set; }
17 const string chunkFile_filter = @"*_*.png";
18 static Regex chunkShardRegex = new Regex(@"(?<X>[\d]+)_(?<Z>[\d]+)\.png", RegexOptions.Singleline);
19 static string mapPath;
20 internal const string _chunkPath = @"Chunks";
23 -Process existing PNGs: Report/Dump contents of Chunk Metadata, as per current version
24 -Grayscale Heightmap extraction from P.Buf heightmap from shards
25 -Extract contents of game's SQLLite map DB, INTO Automap type shards...
26 -Other stuff? chunk fixing / validation?
28 public static void Main(string[ ] args)
30 Console.WriteLine("AUTOMAP Offline Shard processor v0.1");
31 //Called once - thus it can only be in a static constructor.
32 PngChunk.FactoryRegister(PngMetadataChunk.ID, typeof(PngMetadataChunk));
38 private static void ArgsDecoder(string[ ] args)
40 //#1 Path to maps '~/ApplicationData/vintagestory/Map/World_1234567890
43 //#0 Command: Heightmaps (Generation from existing shard data)
44 string command = args[0];
46 if (command == "--heightmap") {
52 private static void Process_ShardData( )
54 var shardsDir = new DirectoryInfo( Path.Combine(mapPath , _chunkPath));
56 var shardFiles = shardsDir.GetFiles(chunkFile_filter);
58 if (shardFiles.Length > 0) {
60 //Logger.VerboseDebug("Metadata reloading from {0} shards", shardFiles.Length);
63 foreach (var shardFile in shardFiles) {
65 if (shardFile.Length < 1024) continue;
66 var result = chunkShardRegex.Match(shardFile.Name);
67 if (!result.Success) continue;
69 int X_chunk_pos = int.Parse(result.Groups["X"].Value);
70 int Z_chunk_pos = int.Parse(result.Groups["Z"].Value);
73 using (var fileStream = shardFile.OpenRead( )) {
75 PngReader pngRead = new PngReader(fileStream);
76 pngRead.ReadSkippingAllRows( );
78 //Parse PNG chunks for METADATA in shard
79 PngMetadataChunk metadataFromPng = pngRead.GetChunksList( ).GetById1(PngMetadataChunk.ID) as PngMetadataChunk;
80 ColumnMeta columnData = metadataFromPng.ChunkMetadata;
81 //columnData.HeightMap //Should be sane Heightmap...
87 } catch (PngjException someEx) {
88 //Logger.Error("PNG Corruption file '{0}' - Reason: {1}", shardFile.Name, someEx);
90 } catch (ProtoException protoEx) {
91 //Logger.Error("ProtoBuf invalid! file:'{0}' - Reason: {1}", shardFile.Name, protoEx);