Exemplo n.º 1
0
    void ValidateOrGenerateSchema(string name, NetworkSchema.FieldType type, int bits = 0, bool delta = false, int precision = 0, int arraySize = 0)
    {
        // TOULF precision is amount of digits (10^-3)
        GameDebug.Assert(precision < 4);
        if (m_GenerateSchema == true)
        {
            // TOULF m_Scheme will contain scheme for ALL of the *entity* (not component)
            m_Schema.AddField(new NetworkSchema.FieldInfo()
            {
                name         = name,
                fieldType    = type,
                bits         = bits,
                delta        = delta,
                precision    = precision,
                arraySize    = arraySize,
                fieldMask    = m_FieldMask,
                startContext = m_Schema.fields.Count * NetworkConfig.maxContextsPerField + m_Schema.id * NetworkConfig.maxContextsPerSchema + NetworkConfig.firstSchemaContext
            });
        }
        else if (m_Schema != null)
        {
            m_CurrentField = m_Schema.fields[m_NextFieldIndex];
            GameDebug.Assert(m_CurrentField.name == name);
            GameDebug.Assert(m_CurrentField.fieldType == type);
            GameDebug.Assert(m_CurrentField.bits == bits);
            GameDebug.Assert(m_CurrentField.delta == delta);
            GameDebug.Assert(m_CurrentField.precision == precision);
            GameDebug.Assert(m_CurrentField.arraySize == arraySize);
            GameDebug.Assert(m_CurrentField.fieldMask == m_FieldMask);

            ++m_NextFieldIndex;
        }
        // TOULF when is it ok that m_Scheme being null?
    }
Exemplo n.º 2
0
    void ValidateSchema(NetworkSchema.FieldType type, int bits, bool delta, int arraySize = 0)
    {
        if (m_Schema == null)
        {
            return;
        }

        m_CurrentField = m_Schema.fields[m_NextFieldIndex];
        GameDebug.Assert(type == m_CurrentField.fieldType, "Property:{0} has unexpected field type:{1} Expected:{2}", m_CurrentField.name, type, m_CurrentField.fieldType);
        GameDebug.Assert(bits == m_CurrentField.bits);
        GameDebug.Assert(arraySize == m_CurrentField.arraySize);

        ++m_NextFieldIndex;
    }
Exemplo n.º 3
0
    void ValidateOrGenerateSchema(string name, NetworkSchema.FieldType type, int bits = 0, bool delta = false, int precision = 0, int arraySize = 0)
    {
        if (m_Position + arraySize >= m_BufferSize)
        {
            // This is a really hard error to recover from. So we just try to make sure everything stops...
            GameDebug.Assert(false, "Out of buffer space in NetworkWriter.");
        }
        // Precision is amount of digits (10^-3)
        GameDebug.Assert(precision < 4, "Precision has to be less than 4 digits. If you need more use unquantizised values");
        if (m_GenerateSchema == true)
        {
            if (type == NetworkSchema.FieldType.Bool || type == NetworkSchema.FieldType.ByteArray || type == NetworkSchema.FieldType.String)
            {
                GameDebug.Assert(delta == false, "Delta compression of fields of type bool, bytearray and string not supported");
            }
            // TOULF m_Scheme will contain scheme for ALL of the *entity* (not component)
            m_Schema.AddField(new NetworkSchema.FieldInfo()
            {
                name         = name,
                fieldType    = type,
                bits         = bits,
                delta        = delta,
                precision    = precision,
                arraySize    = arraySize,
                fieldMask    = m_FieldMask,
                startContext = m_Schema.numFields * NetworkConfig.maxContextsPerField + m_Schema.id * NetworkConfig.maxContextsPerSchema + NetworkConfig.firstSchemaContext
            });
        }
        else if (m_Schema != null)
        {
            m_CurrentField = m_Schema.fields[m_NextFieldIndex];
            GameDebug.Assert(m_CurrentField.name == name);
            GameDebug.Assert(m_CurrentField.fieldType == type);
            GameDebug.Assert(m_CurrentField.bits == bits);
            GameDebug.Assert(m_CurrentField.delta == delta);
            GameDebug.Assert(m_CurrentField.precision == precision);
            GameDebug.Assert(m_CurrentField.arraySize == arraySize);
            GameDebug.Assert(m_CurrentField.fieldMask == m_FieldMask);

            ++m_NextFieldIndex;
        }
        // TOULF when is it ok that m_Scheme being null?
    }
Exemplo n.º 4
0
 void ValidateSchema(NetworkSchema.FieldType type, int bits, bool delta, int arraySize = 0)
 {
     if (m_Schema == null)
         return; }
Exemplo n.º 5
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);
        }