Fusion.Engine.Server.SnapshotQueue.Decompress C# (CSharp) Method

Decompress() public method

public Decompress ( uint prevFrameId, byte snapshot ) : byte[]
prevFrameId uint
snapshot byte
return byte[]
		public byte[] Decompress ( uint prevFrameId, byte[] snapshot )
		{
			#if DONT_USE_DELTA
				return NetworkEngine.Decompress( snapshot );
			#endif
			

			if (prevFrameId==0) {
				return NetDeflate.Decompress( snapshot );
			}

			var prevSnapshot	=	queue.SingleOrDefault( s => s.Frame == prevFrameId );

			if (prevSnapshot==null) {
				Log.Warning("Missing snapshot #{0}. Waiting for full snapshot.", prevFrameId );
				return null;
			}


			var delta	=	NetDeflate.Decompress( snapshot );
			var minSize	=	Math.Min( delta.Length, prevSnapshot.Data.Length );

			var newSnapshot	=	new byte[ delta.Length ];

			for (int i=0; i<minSize; i++ ) {
				newSnapshot[i] = (byte)(delta[i] ^ prevSnapshot.Data[i]);
			}

			if (delta.Length > prevSnapshot.Data.Length) {
				for (int i=minSize; i<delta.Length; i++) {
					newSnapshot[i] = delta[i];
				}
			}

			return newSnapshot;
		}
	}