// Writes Chunk c's state metadata into given buffer // and returns the amount of bytes written public static int CompressMetadataState(Chunk c, byte[] buffer, int targetPos = 0) { List <ushort> palleteList = Compression.GetPallete(Pallete.METADATA); int bytes; NativeArray <int> writtenBytes = new NativeArray <int>(new int[1] { 0 }, Allocator.TempJob); NativeArray <ushort> chunkData = NativeTools.CopyToNative(c.metadata.GetStateData()); NativeArray <byte> buff = NativeTools.CopyToNative(buffer); NativeArray <ushort> palleteArray = NativeTools.CopyToNative(palleteList.ToArray()); CompressionJob cmdJob = new CompressionJob { chunkData = chunkData, buffer = buff, palleteArray = palleteArray, writtenBytes = writtenBytes }; JobHandle handle = cmdJob.Schedule(); handle.Complete(); NativeArray <byte> .Copy(buff, 0, buffer, targetPos, writtenBytes[0]); bytes = writtenBytes[0]; chunkData.Dispose(); palleteArray.Dispose(); buff.Dispose(); writtenBytes.Dispose(); return(bytes); }
// Builds Chunk's State Metadata using Decompression algorithm public static void DecompressMetadataStateClient(Chunk c, byte[] buffer, int initialPos) { // Preparation Variables List <ushort> palleteList = Compression.GetPallete(Pallete.METADATA); NativeArray <ushort> data = new NativeArray <ushort>(Chunk.chunkWidth * Chunk.chunkWidth * Chunk.chunkDepth, Allocator.TempJob); NativeArray <byte> readData = NativeTools.CopyToNative(buffer); NativeArray <ushort> pallete = NativeTools.CopyToNative(palleteList.ToArray()); DecompressJob dbJob = new DecompressJob { data = data, readData = readData, pallete = pallete, initialPos = initialPos }; JobHandle job = dbJob.Schedule(); job.Complete(); c.metadata.SetStateData(data.ToArray()); data.Dispose(); readData.Dispose(); pallete.Dispose(); }
// Builds Chunk's VoxelData using Decompression algorithm public static void DecompressBlocks(Chunk c, byte[] buffer) { // Preparation Variables Pallete p = Compression.BiomeToPallete(c.biomeName); List <ushort> palleteList = Compression.GetPallete(p); NativeArray <ushort> data = new NativeArray <ushort>(Chunk.chunkWidth * Chunk.chunkWidth * Chunk.chunkDepth, Allocator.TempJob); NativeArray <byte> readData = NativeTools.CopyToNative(buffer); NativeArray <ushort> pallete = NativeTools.CopyToNative(palleteList.ToArray()); DecompressJob dbJob = new DecompressJob { data = data, readData = readData, pallete = pallete, initialPos = 0 }; JobHandle job = dbJob.Schedule(); job.Complete(); c.data.SetData(data.ToArray()); data.Dispose(); readData.Dispose(); pallete.Dispose(); }
// Writes Chunk c's data using a Pallete's compression into given buffer // and returns the amount of bytes written public static int CompressBlocks(Chunk c, byte[] buffer, int targetPos = 0) { int bytes; Pallete p = Compression.BiomeToPallete(c.biomeName); List <ushort> palleteList = Compression.GetPallete(p); NativeArray <int> writtenBytes = new NativeArray <int>(new int[1] { 0 }, Allocator.TempJob); NativeArray <ushort> chunkData = NativeTools.CopyToNative(c.data.GetData()); NativeArray <byte> buff = NativeTools.CopyToNative(buffer); NativeArray <ushort> palleteArray = NativeTools.CopyToNative(palleteList.ToArray()); CompressionJob cbJob = new CompressionJob { chunkData = chunkData, buffer = buff, palleteArray = palleteArray, writtenBytes = writtenBytes }; JobHandle handle = cbJob.Schedule(); handle.Complete(); NativeArray <byte> .Copy(buff, 0, buffer, targetPos, writtenBytes[0]); bytes = writtenBytes[0]; chunkData.Dispose(); palleteArray.Dispose(); buff.Dispose(); writtenBytes.Dispose(); return(bytes); }