public void Delta_Vector3Compressed <TInputStream, TOutputStream>() where TInputStream : NetworkCompression.IInputStream, new() where TOutputStream : NetworkCompression.IOutputStream, new() { var schema = new NetworkSchema(0); schema.AddField(new NetworkSchema.FieldInfo() { name = "field_0", fieldType = NetworkSchema.FieldType.Vector3, bits = 32, delta = true, precision = 3 }); schema.Finalize(); var values = new List <object>() { new Vector3() { x = 0.07870922f, y = 0.0479902327f, z = 0.16897355f } }; var baseline = new List <object>() { new Vector3() { x = -122.123f, y = 112.32112f, z = 0.0235f } }; TestDelta <TInputStream, TOutputStream>(schema, values, baseline); }
public void Delta_FloatCompressedNoBaseline <TInputStream, TOutputStream>() where TInputStream : NetworkCompression.IInputStream, new() where TOutputStream : NetworkCompression.IOutputStream, new() { var schema = new NetworkSchema(0); schema.AddField(new NetworkSchema.FieldInfo() { name = "field_0", fieldType = NetworkSchema.FieldType.Float, bits = 32, delta = true, precision = 3 }); schema.Finalize(); var values = new List <object>() { 0.123f }; TestDelta <TInputStream, TOutputStream>(schema, values, null); }
public static NetworkSchema ReadSchema <TInputStream>(ref TInputStream input) where TInputStream : NetworkCompression.IInputStream { int count = (int)input.ReadPackedUInt(NetworkConfig.miscContext); int id = (int)input.ReadPackedUInt(NetworkConfig.miscContext); var schema = new NetworkSchema(id); for (int i = 0; i < count; ++i) { var field = new FieldInfo(); field.fieldType = (FieldType)input.ReadPackedNibble(NetworkConfig.miscContext); field.delta = input.ReadRawBits(1) != 0; field.bits = (int)input.ReadPackedUInt(NetworkConfig.miscContext); field.precision = (int)input.ReadPackedUInt(NetworkConfig.miscContext); field.arraySize = (int)input.ReadPackedUInt(NetworkConfig.miscContext); field.startContext = schema.fieldsInternal.Count * NetworkConfig.maxContextsPerField + schema.id * NetworkConfig.maxContextsPerSchema + NetworkConfig.firstSchemaContext; field.fieldMask = (byte)input.ReadPackedUInt(NetworkConfig.miscContext); schema.AddField(field); } schema.Finalize(); return(schema); }
public void Delta_FloatCompressedNoDrift <TInputStream, TOutputStream>() where TInputStream : NetworkCompression.IInputStream, new() where TOutputStream : NetworkCompression.IOutputStream, new() { var schema = new NetworkSchema(0); schema.AddField(new NetworkSchema.FieldInfo() { name = "field_0", fieldType = NetworkSchema.FieldType.Float, bits = 32, delta = true, precision = 3 }); schema.Finalize(); var values = new List <object>(1); var baseline = new List <object>(1); values.Add(0.0f); baseline.Add(0.0f); for (int i = 0; i < 1024; ++i) { values[0] = (float)Math.Sin(i / 1024.0f * Math.PI); TestDelta <TInputStream, TOutputStream>(schema, values, baseline); baseline[0] = values[0]; } }
public static NetworkSchema GenerateRandomSchema(int length, int seed) { var random = new System.Random(seed); var values = Enum.GetValues(typeof(NetworkSchema.FieldType)); var schema = new NetworkSchema(0); for (int i = 0; i < length; ++i) { string fieldName = "field_" + i; NetworkSchema.FieldType type = (NetworkSchema.FieldType)random.Next(0, values.Length); switch (type) { case NetworkSchema.FieldType.Bool: schema.AddField(new NetworkSchema.FieldInfo() { name = fieldName, fieldType = type, bits = 1, delta = false }); break; case NetworkSchema.FieldType.UInt: { var bits = 32; switch (random.Next(0, 3)) { case 0: bits = 8; break; case 1: bits = 16; break; case 2: bits = 32; break; default: Assert.Fail(); break; } schema.AddField(new NetworkSchema.FieldInfo() { name = fieldName, fieldType = type, bits = bits, delta = true }); break; } case NetworkSchema.FieldType.Int: { var bits = 32; switch (random.Next(0, 2)) { case 0: bits = 16; break; case 1: bits = 32; break; default: Assert.Fail(); break; } schema.AddField(new NetworkSchema.FieldInfo() { name = fieldName, fieldType = type, bits = bits, delta = true }); break; } case NetworkSchema.FieldType.Float: case NetworkSchema.FieldType.Vector2: case NetworkSchema.FieldType.Vector3: { var delta = random.Next(2) == 1; var field = new NetworkSchema.FieldInfo() { name = fieldName, fieldType = type, bits = 32, delta = delta, precision = delta ? random.Next(4) : 0 }; schema.AddField(field); break; } case NetworkSchema.FieldType.Quaternion: { var delta = random.Next(2) == 1; schema.AddField(new NetworkSchema.FieldInfo() { name = fieldName, fieldType = type, bits = 32, delta = delta, precision = delta ? random.Next(4) : 0 }); break; } case NetworkSchema.FieldType.String: case NetworkSchema.FieldType.ByteArray: schema.AddField(new NetworkSchema.FieldInfo() { name = fieldName, fieldType = type, arraySize = 1024 }); break; default: Assert.Fail(); break; } } schema.Finalize(); return(schema); }