Пример #1
0
        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
            });

            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);
        }
Пример #2
0
        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
            });
            var values = new List <object>()
            {
                0.123f
            };

            TestDelta <TInputStream, TOutputStream>(schema, values, null);
        }
Пример #3
0
    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.ReadRawBits(4);
            field.delta        = input.ReadRawBits(1) != 0;
            field.bits         = (int)input.ReadRawBits(6);
            field.precision    = (int)input.ReadRawBits(2);
            field.arraySize    = (int)input.ReadRawBits(16);
            field.startContext = schema.fields.Count * NetworkConfig.maxContextsPerField + schema.id * NetworkConfig.maxContextsPerSchema + NetworkConfig.firstSchemaContext;
            field.fieldMask    = (byte)input.ReadRawBits(8);
            schema.AddField(field);
        }
        return(schema);
    }
Пример #4
0
    public static NetworkSchema ReadSchema(ref RawInputStream input)
    {
        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);
    }
Пример #5
0
        public void Delta_FloatCompressed <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.637160838f
            };
            var baseline = new List <object>()
            {
                0.538469732f
            };

            TestDelta <TInputStream, TOutputStream>(schema, values, baseline);
        }
Пример #6
0
        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
            });

            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];
            }
        }
Пример #7
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);
        }