Core - Add 'MapReader' & refactor 'MapData'

This commit is contained in:
miku-666
2025-11-11 21:42:49 +01:00
parent 2b7eac7e63
commit f9162d291c
3 changed files with 72 additions and 11 deletions

View File

@@ -0,0 +1,41 @@
using System.Collections.Generic;
using System.IO;
using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
using OMI;
namespace PckStudio.Core
{
public class MapReader
{
public static IDictionary<string, byte[]> OpenSave(Stream stream)
{
EndiannessAwareBinaryReader reader = new EndiannessAwareBinaryReader(stream, ByteOrder.BigEndian);
_ = reader.ReadInt32();
int bufferSize = reader.ReadInt32();
byte[] buffer = new byte[bufferSize];
using Stream decompStream = new InflaterInputStream(stream);
decompStream.Read(buffer, 0, bufferSize);
reader = new EndiannessAwareBinaryReader(new MemoryStream(buffer), System.Text.Encoding.BigEndianUnicode, ByteOrder.BigEndian);
int fileStartOffset = reader.ReadInt32();
int fileCount = reader.ReadInt32();
reader.BaseStream.Seek(fileStartOffset, SeekOrigin.Begin);
Dictionary<string, byte[]> res = new Dictionary<string, byte[]>();
for (int i = 0; i < fileCount; i++)
{
string path = reader.ReadString(64).Replace('\\', '/');
int size = reader.ReadInt32();
int offset = reader.ReadInt32();
long timestemp = reader.ReadInt64();
long origin = reader.BaseStream.Position;
reader.BaseStream.Seek(offset, SeekOrigin.Begin);
byte[] data = reader.ReadBytes(size);
reader.BaseStream.Seek(origin, SeekOrigin.Begin);
res.Add(path, data);
}
return res;
}
}
}