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? }
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; }
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? }
void ValidateSchema(NetworkSchema.FieldType type, int bits, bool delta, int arraySize = 0) { if (m_Schema == null) return; }
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); }