public static byte[] GZip(byte[] mapSize, byte[] levelData)
{
var ms = new MemoryStream();
var gs = new GZipStream(ms, CompressionMode.Compress, true);
gs.Write(mapSize, 0, mapSize.Length);
//gs.Write(levelData, 0, levelData.Length);
int currentstart = 0;
for (int i = 0; i < levelData.Length; i++ )
{
byte block = levelData[i];
if(block>49)
{
if(i>0) gs.Write(levelData, currentstart, (i-currentstart));
currentstart = i + 1;
gs.WriteByte((Block.Blocks.ContainsKey(block) ? Block.Blocks[block].BaseType : (byte)0));
}
}
if (currentstart != levelData.Length)
{
gs.Write(levelData, currentstart, (levelData.Length - currentstart));
}
gs.Flush();
gs.Dispose();
ms.Position = 0;
var bytes = new byte[ms.Length];
ms.Read(bytes, 0, (int) ms.Length);
ms.Close();
ms.Dispose();
return bytes;
}