diff --git a/CHANGELOG.md b/CHANGELOG.md index 7f121cdadc..ef9a60d276 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ ### Added -- Added public toolkit for writing code generators. [#1240](https://github.com/spatialos/gdk-for-unity/pull/1240) +- Added public toolkit for writing code generators. [#1240](https://github.com/spatialos/gdk-for-unity/pull/1240) [#1243](https://github.com/spatialos/gdk-for-unity/pull/1243) [#1244](https://github.com/spatialos/gdk-for-unity/pull/1244) [#1245](https://github.com/spatialos/gdk-for-unity/pull/1245) [#1250](https://github.com/spatialos/gdk-for-unity/pull/1250) ### Internal @@ -14,6 +14,7 @@ - Ported test-project to new CodeWriter. [#1241](https://github.com/spatialos/gdk-for-unity/pull/1241) - Ported build system module to new CodeWriter. [#1242](https://github.com/spatialos/gdk-for-unity/pull/1242) - Ported gameobject creation module to new CodeWriter. [#1247](https://github.com/spatialos/gdk-for-unity/pull/1247) +- Ported core module to new CodeWriter. [#1247](https://github.com/spatialos/gdk-for-unity/pull/1247) [#1248](https://github.com/spatialos/gdk-for-unity/pull/1248) [#1249](https://github.com/spatialos/gdk-for-unity/pull/1249) [#1251](https://github.com/spatialos/gdk-for-unity/pull/1251) [#1252](https://github.com/spatialos/gdk-for-unity/pull/1252) [#1253](https://github.com/spatialos/gdk-for-unity/pull/1253) ## `0.3.2` - 2019-12-23 diff --git a/test-project/Assets/Generated/Source/improbable/dependentschema/DependentComponent.cs b/test-project/Assets/Generated/Source/improbable/dependentschema/DependentComponent.cs index 1293ad9b07..9bf20ff7de 100644 --- a/test-project/Assets/Generated/Source/improbable/dependentschema/DependentComponent.cs +++ b/test-project/Assets/Generated/Source/improbable/dependentschema/DependentComponent.cs @@ -25,7 +25,9 @@ public struct Component : IComponentData, ISpatialComponentData, ISnapshottable< public bool IsDataDirty() { var isDataDirty = false; + isDataDirty |= (dirtyBits0 != 0x0); + return isDataDirty; } @@ -41,6 +43,7 @@ component MyComponent In that case, val_a corresponds to propertyIndex 0 and val_b corresponds to propertyIndex 1 in this method. This method throws an InvalidOperationException in case your component doesn't contain properties. */ + public bool IsDataDirty(int propertyIndex) { if (propertyIndex < 0 || propertyIndex >= 5) @@ -226,15 +229,19 @@ public static class Serialization public static void SerializeComponent(global::Improbable.DependentSchema.DependentComponent.Component component, global::Improbable.Worker.CInterop.SchemaObject obj, global::Unity.Entities.World world) { global::Improbable.TestSchema.ExhaustiveRepeatedData.Serialization.Serialize(component.A, obj.AddObject(1)); + obj.AddEnum(2, (uint) component.B); + if (component.C.HasValue) { obj.AddEnum(3, (uint) component.C.Value); } + foreach (var value in component.D) { global::Improbable.TestSchema.SomeType.Serialization.Serialize(value, obj.AddObject(4)); } + foreach (var keyValuePair in component.E) { var mapObj = obj.AddObject(5); @@ -246,15 +253,18 @@ public static void SerializeComponent(global::Improbable.DependentSchema.Depende public static void SerializeUpdate(global::Improbable.DependentSchema.DependentComponent.Component component, global::Improbable.Worker.CInterop.SchemaComponentUpdate updateObj) { var obj = updateObj.GetFields(); + if (component.IsDataDirty(0)) { global::Improbable.TestSchema.ExhaustiveRepeatedData.Serialization.Serialize(component.A, obj.AddObject(1)); + } if (component.IsDataDirty(1)) { obj.AddEnum(2, (uint) component.B); + } @@ -264,6 +274,7 @@ public static void SerializeUpdate(global::Improbable.DependentSchema.DependentC { obj.AddEnum(3, (uint) component.C.Value); } + if (!component.C.HasValue) { updateObj.AddClearedField(3); @@ -276,6 +287,7 @@ public static void SerializeUpdate(global::Improbable.DependentSchema.DependentC { global::Improbable.TestSchema.SomeType.Serialization.Serialize(value, obj.AddObject(4)); } + if (component.D.Count == 0) { updateObj.AddClearedField(4); @@ -290,71 +302,86 @@ public static void SerializeUpdate(global::Improbable.DependentSchema.DependentC mapObj.AddEnum(1, (uint) keyValuePair.Key); global::Improbable.TestSchema.SomeType.Serialization.Serialize(keyValuePair.Value, mapObj.AddObject(2)); } + if (component.E.Count == 0) { updateObj.AddClearedField(5); } } - } public static void SerializeUpdate(global::Improbable.DependentSchema.DependentComponent.Update update, global::Improbable.Worker.CInterop.SchemaComponentUpdate updateObj) { var obj = updateObj.GetFields(); + { if (update.A.HasValue) { var field = update.A.Value; + global::Improbable.TestSchema.ExhaustiveRepeatedData.Serialization.Serialize(field, obj.AddObject(1)); + } } + { if (update.B.HasValue) { var field = update.B.Value; + obj.AddEnum(2, (uint) field); + } } + { if (update.C.HasValue) { var field = update.C.Value; + if (field.HasValue) { obj.AddEnum(3, (uint) field.Value); } + if (!field.HasValue) { updateObj.AddClearedField(3); } } } + { if (update.D.HasValue) { var field = update.D.Value; + foreach (var value in field) { global::Improbable.TestSchema.SomeType.Serialization.Serialize(value, obj.AddObject(4)); } + if (field.Count == 0) { updateObj.AddClearedField(4); } } } + { if (update.E.HasValue) { var field = update.E.Value; + foreach (var keyValuePair in field) { var mapObj = obj.AddObject(5); mapObj.AddEnum(1, (uint) keyValuePair.Key); global::Improbable.TestSchema.SomeType.Serialization.Serialize(keyValuePair.Value, mapObj.AddObject(2)); } + if (field.Count == 0) { updateObj.AddClearedField(5); @@ -385,7 +412,6 @@ public static void SerializeSnapshot(global::Improbable.DependentSchema.Dependen mapObj.AddEnum(1, (uint) keyValuePair.Key); global::Improbable.TestSchema.SomeType.Serialization.Serialize(keyValuePair.Value, mapObj.AddObject(2)); } - } public static global::Improbable.DependentSchema.DependentComponent.Component Deserialize(global::Improbable.Worker.CInterop.SchemaObject obj, global::Unity.Entities.World world) @@ -393,30 +419,38 @@ public static void SerializeSnapshot(global::Improbable.DependentSchema.Dependen var component = new global::Improbable.DependentSchema.DependentComponent.Component(); component.aHandle = global::Improbable.DependentSchema.DependentComponent.ReferenceTypeProviders.AProvider.Allocate(world); + component.A = global::Improbable.TestSchema.ExhaustiveRepeatedData.Serialization.Deserialize(obj.GetObject(1)); + component.B = (global::Improbable.TestSchema.SomeEnum) obj.GetEnum(2); + component.cHandle = global::Improbable.DependentSchema.DependentComponent.ReferenceTypeProviders.CProvider.Allocate(world); + if (obj.GetEnumCount(3) == 1) { component.C = new global::Improbable.TestSchema.SomeEnum?((global::Improbable.TestSchema.SomeEnum) obj.GetEnum(3)); } + component.dHandle = global::Improbable.DependentSchema.DependentComponent.ReferenceTypeProviders.DProvider.Allocate(world); + { component.D = new global::System.Collections.Generic.List(); var list = component.D; var listLength = obj.GetObjectCount(4); - + for (var i = 0; i < listLength; i++) { list.Add(global::Improbable.TestSchema.SomeType.Serialization.Deserialize(obj.IndexObject(4, (uint) i))); } } + component.eHandle = global::Improbable.DependentSchema.DependentComponent.ReferenceTypeProviders.EProvider.Allocate(world); + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(5); component.E = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(5, (uint) i); @@ -425,6 +459,7 @@ public static void SerializeSnapshot(global::Improbable.DependentSchema.Dependen map.Add(key, value); } } + return component; } @@ -437,13 +472,15 @@ public static void SerializeSnapshot(global::Improbable.DependentSchema.Dependen { update.A = global::Improbable.TestSchema.ExhaustiveRepeatedData.Serialization.Deserialize(obj.GetObject(1)); } + if (obj.GetEnumCount(2) == 1) { update.B = (global::Improbable.TestSchema.SomeEnum) obj.GetEnum(2); } + { var isCleared = updateObj.IsFieldCleared(3); - + if (isCleared) { update.C = new global::Improbable.Gdk.Core.Option(new global::Improbable.TestSchema.SomeEnum?()); @@ -453,32 +490,34 @@ public static void SerializeSnapshot(global::Improbable.DependentSchema.Dependen update.C = new global::Improbable.Gdk.Core.Option((global::Improbable.TestSchema.SomeEnum) obj.GetEnum(3)); } } + { var listSize = obj.GetObjectCount(4); - + var isCleared = updateObj.IsFieldCleared(4); - + if (listSize > 0 || isCleared) { update.D = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.List()); } - + for (var i = 0; i < listSize; i++) { var value = global::Improbable.TestSchema.SomeType.Serialization.Deserialize(obj.IndexObject(4, (uint) i)); update.D.Value.Add(value); } } + { var mapSize = obj.GetObjectCount(5); - + var isCleared = updateObj.IsFieldCleared(5); - + if (mapSize > 0 || isCleared) { update.E = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.Dictionary()); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(5, (uint) i); @@ -487,6 +526,7 @@ public static void SerializeSnapshot(global::Improbable.DependentSchema.Dependen update.E.Value.Add(key, value); } } + return update; } @@ -496,26 +536,30 @@ public static void SerializeSnapshot(global::Improbable.DependentSchema.Dependen var obj = data.GetFields(); update.A = global::Improbable.TestSchema.ExhaustiveRepeatedData.Serialization.Deserialize(obj.GetObject(1)); + update.B = (global::Improbable.TestSchema.SomeEnum) obj.GetEnum(2); + if (obj.GetEnumCount(3) == 1) { update.C = new global::Improbable.Gdk.Core.Option((global::Improbable.TestSchema.SomeEnum) obj.GetEnum(3)); } + { var listSize = obj.GetObjectCount(4); update.D = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.List()); - + for (var i = 0; i < listSize; i++) { var value = global::Improbable.TestSchema.SomeType.Serialization.Deserialize(obj.IndexObject(4, (uint) i)); update.D.Value.Add(value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(5); update.E = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(5, (uint) i); @@ -524,6 +568,7 @@ public static void SerializeSnapshot(global::Improbable.DependentSchema.Dependen map.Add(key, value); } } + return update; } @@ -532,26 +577,30 @@ public static void SerializeSnapshot(global::Improbable.DependentSchema.Dependen var component = new global::Improbable.DependentSchema.DependentComponent.Snapshot(); component.A = global::Improbable.TestSchema.ExhaustiveRepeatedData.Serialization.Deserialize(obj.GetObject(1)); + component.B = (global::Improbable.TestSchema.SomeEnum) obj.GetEnum(2); + if (obj.GetEnumCount(3) == 1) { component.C = new global::Improbable.TestSchema.SomeEnum?((global::Improbable.TestSchema.SomeEnum) obj.GetEnum(3)); } + { component.D = new global::System.Collections.Generic.List(); var list = component.D; var listLength = obj.GetObjectCount(4); - + for (var i = 0; i < listLength; i++) { list.Add(global::Improbable.TestSchema.SomeType.Serialization.Deserialize(obj.IndexObject(4, (uint) i))); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(5); component.E = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(5, (uint) i); @@ -560,6 +609,7 @@ public static void SerializeSnapshot(global::Improbable.DependentSchema.Dependen map.Add(key, value); } } + return component; } @@ -571,13 +621,15 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen { component.A = global::Improbable.TestSchema.ExhaustiveRepeatedData.Serialization.Deserialize(obj.GetObject(1)); } + if (obj.GetEnumCount(2) == 1) { component.B = (global::Improbable.TestSchema.SomeEnum) obj.GetEnum(2); } + { var isCleared = updateObj.IsFieldCleared(3); - + if (isCleared) { component.C = new global::Improbable.TestSchema.SomeEnum?(); @@ -588,32 +640,34 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.C = new global::Improbable.TestSchema.SomeEnum?(value); } } + { var listSize = obj.GetObjectCount(4); - + var isCleared = updateObj.IsFieldCleared(4); - + if (listSize > 0 || isCleared) { component.D.Clear(); } - + for (var i = 0; i < listSize; i++) { var value = global::Improbable.TestSchema.SomeType.Serialization.Deserialize(obj.IndexObject(4, (uint) i)); component.D.Add(value); } } + { var mapSize = obj.GetObjectCount(5); - + var isCleared = updateObj.IsFieldCleared(5); - + if (mapSize > 0 || isCleared) { component.E.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(5, (uint) i); @@ -632,13 +686,15 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen { snapshot.A = global::Improbable.TestSchema.ExhaustiveRepeatedData.Serialization.Deserialize(obj.GetObject(1)); } + if (obj.GetEnumCount(2) == 1) { snapshot.B = (global::Improbable.TestSchema.SomeEnum) obj.GetEnum(2); } + { var isCleared = updateObj.IsFieldCleared(3); - + if (isCleared) { snapshot.C = new global::Improbable.TestSchema.SomeEnum?(); @@ -649,32 +705,34 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.C = new global::Improbable.TestSchema.SomeEnum?(value); } } + { var listSize = obj.GetObjectCount(4); - + var isCleared = updateObj.IsFieldCleared(4); - + if (listSize > 0 || isCleared) { snapshot.D.Clear(); } - + for (var i = 0; i < listSize; i++) { var value = global::Improbable.TestSchema.SomeType.Serialization.Deserialize(obj.IndexObject(4, (uint) i)); snapshot.D.Add(value); } } + { var mapSize = obj.GetObjectCount(5); - + var isCleared = updateObj.IsFieldCleared(5); - + if (mapSize > 0 || isCleared) { snapshot.E.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(5, (uint) i); @@ -738,7 +796,7 @@ private static Update SnapshotToUpdate(in Snapshot snapshot) B = snapshot.B, C = snapshot.C, D = snapshot.D, - E = snapshot.E, + E = snapshot.E }; return update; diff --git a/test-project/Assets/Generated/Source/improbable/dependentschema/DependentComponentComponentReaderWriter.cs b/test-project/Assets/Generated/Source/improbable/dependentschema/DependentComponentComponentReaderWriter.cs index b5926a06e1..f77c5e6cc6 100644 --- a/test-project/Assets/Generated/Source/improbable/dependentschema/DependentComponentComponentReaderWriter.cs +++ b/test-project/Assets/Generated/Source/improbable/dependentschema/DependentComponentComponentReaderWriter.cs @@ -507,7 +507,6 @@ public event Action OnUpdate } } - internal DependentComponentReader(World world, Entity entity, EntityId entityId) { Entity = entity; @@ -542,7 +541,6 @@ public void RemoveAllCallbacks() updateCallbackToCallbackKey.Clear(); } - if (aUpdateCallbackToCallbackKey != null) { foreach (var callbackToKey in aUpdateCallbackToCallbackKey) @@ -634,7 +632,6 @@ public void SendUpdate(DependentComponent.Update update) EntityManager.SetComponentData(Entity, component); } - public void AcknowledgeAuthorityLoss() { ComponentUpdateSystem.AcknowledgeAuthorityLoss(EntityId, DependentComponent.ComponentId); diff --git a/test-project/Assets/Generated/Source/improbable/dependentschema/DependentComponentUpdateSender.cs b/test-project/Assets/Generated/Source/improbable/dependentschema/DependentComponentUpdateSender.cs index aed751cf83..6940bd5f76 100644 --- a/test-project/Assets/Generated/Source/improbable/dependentschema/DependentComponentUpdateSender.cs +++ b/test-project/Assets/Generated/Source/improbable/dependentschema/DependentComponentUpdateSender.cs @@ -40,14 +40,12 @@ public void SendUpdates( var spatialOSEntityType = system.GetArchetypeChunkComponentType(true); var componentType = system.GetArchetypeChunkComponentType(); - var authorityType = system.GetArchetypeChunkSharedComponentType(); foreach (var chunk in chunkArray) { var entityIdArray = chunk.GetNativeArray(spatialOSEntityType); var componentArray = chunk.GetNativeArray(componentType); - var authorityIndex = chunk.GetSharedComponentIndex(authorityType); if (!entityManager.GetSharedComponentData(authorityIndex).HasAuthority) @@ -58,6 +56,7 @@ public void SendUpdates( for (var i = 0; i < componentArray.Length; i++) { var data = componentArray[i]; + if (data.IsDataDirty()) { Update update = new Update(); diff --git a/test-project/Assets/Generated/Source/improbable/dependentschema/DependentDataComponent.cs b/test-project/Assets/Generated/Source/improbable/dependentschema/DependentDataComponent.cs index 4b524b8076..cfbcaa6557 100644 --- a/test-project/Assets/Generated/Source/improbable/dependentschema/DependentDataComponent.cs +++ b/test-project/Assets/Generated/Source/improbable/dependentschema/DependentDataComponent.cs @@ -27,9 +27,11 @@ public struct Component : IComponentData, ISpatialComponentData, ISnapshottable< public bool IsDataDirty() { var isDataDirty = false; + isDataDirty |= (dirtyBits0 != 0x0); isDataDirty |= (dirtyBits1 != 0x0); isDataDirty |= (dirtyBits2 != 0x0); + return isDataDirty; } @@ -45,6 +47,7 @@ component MyComponent In that case, val_a corresponds to propertyIndex 0 and val_b corresponds to propertyIndex 1 in this method. This method throws an InvalidOperationException in case your component doesn't contain properties. */ + public bool IsDataDirty(int propertyIndex) { if (propertyIndex < 0 || propertyIndex >= 18) @@ -60,8 +63,10 @@ public bool IsDataDirty(int propertyIndex) { case 0: return (dirtyBits0 & (0x1 << propertyIndex % 8)) != 0x0; + case 1: return (dirtyBits1 & (0x1 << propertyIndex % 8)) != 0x0; + case 2: return (dirtyBits2 & (0x1 << propertyIndex % 8)) != 0x0; } @@ -87,9 +92,11 @@ public void MarkDataDirty(int propertyIndex) case 0: dirtyBits0 |= (byte) (0x1 << propertyIndex % 8); break; + case 1: dirtyBits1 |= (byte) (0x1 << propertyIndex % 8); break; + case 2: dirtyBits2 |= (byte) (0x1 << propertyIndex % 8); break; @@ -427,70 +434,87 @@ public static void SerializeComponent(global::Improbable.DependentSchema.Depende { obj.AddBool(1, component.Field1.Value); } + if (component.Field2.HasValue) { obj.AddFloat(2, component.Field2.Value); } + if (component.Field3.HasValue) { obj.AddBytes(3, component.Field3.Value); } + if (component.Field4.HasValue) { obj.AddInt32(4, component.Field4.Value); } + if (component.Field5.HasValue) { obj.AddInt64(5, component.Field5.Value); } + if (component.Field6.HasValue) { obj.AddDouble(6, component.Field6.Value); } + if (component.Field7.HasValue) { obj.AddString(7, component.Field7.Value); } + if (component.Field8.HasValue) { obj.AddUint32(8, component.Field8.Value); } + if (component.Field9.HasValue) { obj.AddUint64(9, component.Field9.Value); } + if (component.Field10.HasValue) { obj.AddSint32(10, component.Field10.Value); } + if (component.Field11.HasValue) { obj.AddSint64(11, component.Field11.Value); } + if (component.Field12.HasValue) { obj.AddFixed32(12, component.Field12.Value); } + if (component.Field13.HasValue) { obj.AddFixed64(13, component.Field13.Value); } + if (component.Field14.HasValue) { obj.AddSfixed32(14, component.Field14.Value); } + if (component.Field15.HasValue) { obj.AddSfixed64(15, component.Field15.Value); } + if (component.Field16.HasValue) { obj.AddEntityId(16, component.Field16.Value); } + if (component.Field17.HasValue) { global::Improbable.TestSchema.SomeType.Serialization.Serialize(component.Field17.Value, obj.AddObject(17)); } + if (component.Field18.HasValue) { obj.AddEnum(18, (uint) component.Field18.Value); @@ -500,12 +524,14 @@ public static void SerializeComponent(global::Improbable.DependentSchema.Depende public static void SerializeUpdate(global::Improbable.DependentSchema.DependentDataComponent.Component component, global::Improbable.Worker.CInterop.SchemaComponentUpdate updateObj) { var obj = updateObj.GetFields(); + if (component.IsDataDirty(0)) { if (component.Field1.HasValue) { obj.AddBool(1, component.Field1.Value); } + if (!component.Field1.HasValue) { updateObj.AddClearedField(1); @@ -518,6 +544,7 @@ public static void SerializeUpdate(global::Improbable.DependentSchema.DependentD { obj.AddFloat(2, component.Field2.Value); } + if (!component.Field2.HasValue) { updateObj.AddClearedField(2); @@ -530,6 +557,7 @@ public static void SerializeUpdate(global::Improbable.DependentSchema.DependentD { obj.AddBytes(3, component.Field3.Value); } + if (!component.Field3.HasValue) { updateObj.AddClearedField(3); @@ -542,6 +570,7 @@ public static void SerializeUpdate(global::Improbable.DependentSchema.DependentD { obj.AddInt32(4, component.Field4.Value); } + if (!component.Field4.HasValue) { updateObj.AddClearedField(4); @@ -554,6 +583,7 @@ public static void SerializeUpdate(global::Improbable.DependentSchema.DependentD { obj.AddInt64(5, component.Field5.Value); } + if (!component.Field5.HasValue) { updateObj.AddClearedField(5); @@ -566,6 +596,7 @@ public static void SerializeUpdate(global::Improbable.DependentSchema.DependentD { obj.AddDouble(6, component.Field6.Value); } + if (!component.Field6.HasValue) { updateObj.AddClearedField(6); @@ -578,6 +609,7 @@ public static void SerializeUpdate(global::Improbable.DependentSchema.DependentD { obj.AddString(7, component.Field7.Value); } + if (!component.Field7.HasValue) { updateObj.AddClearedField(7); @@ -590,6 +622,7 @@ public static void SerializeUpdate(global::Improbable.DependentSchema.DependentD { obj.AddUint32(8, component.Field8.Value); } + if (!component.Field8.HasValue) { updateObj.AddClearedField(8); @@ -602,6 +635,7 @@ public static void SerializeUpdate(global::Improbable.DependentSchema.DependentD { obj.AddUint64(9, component.Field9.Value); } + if (!component.Field9.HasValue) { updateObj.AddClearedField(9); @@ -614,6 +648,7 @@ public static void SerializeUpdate(global::Improbable.DependentSchema.DependentD { obj.AddSint32(10, component.Field10.Value); } + if (!component.Field10.HasValue) { updateObj.AddClearedField(10); @@ -626,6 +661,7 @@ public static void SerializeUpdate(global::Improbable.DependentSchema.DependentD { obj.AddSint64(11, component.Field11.Value); } + if (!component.Field11.HasValue) { updateObj.AddClearedField(11); @@ -638,6 +674,7 @@ public static void SerializeUpdate(global::Improbable.DependentSchema.DependentD { obj.AddFixed32(12, component.Field12.Value); } + if (!component.Field12.HasValue) { updateObj.AddClearedField(12); @@ -650,6 +687,7 @@ public static void SerializeUpdate(global::Improbable.DependentSchema.DependentD { obj.AddFixed64(13, component.Field13.Value); } + if (!component.Field13.HasValue) { updateObj.AddClearedField(13); @@ -662,6 +700,7 @@ public static void SerializeUpdate(global::Improbable.DependentSchema.DependentD { obj.AddSfixed32(14, component.Field14.Value); } + if (!component.Field14.HasValue) { updateObj.AddClearedField(14); @@ -674,6 +713,7 @@ public static void SerializeUpdate(global::Improbable.DependentSchema.DependentD { obj.AddSfixed64(15, component.Field15.Value); } + if (!component.Field15.HasValue) { updateObj.AddClearedField(15); @@ -686,6 +726,7 @@ public static void SerializeUpdate(global::Improbable.DependentSchema.DependentD { obj.AddEntityId(16, component.Field16.Value); } + if (!component.Field16.HasValue) { updateObj.AddClearedField(16); @@ -698,6 +739,7 @@ public static void SerializeUpdate(global::Improbable.DependentSchema.DependentD { global::Improbable.TestSchema.SomeType.Serialization.Serialize(component.Field17.Value, obj.AddObject(17)); } + if (!component.Field17.HasValue) { updateObj.AddClearedField(17); @@ -710,263 +752,317 @@ public static void SerializeUpdate(global::Improbable.DependentSchema.DependentD { obj.AddEnum(18, (uint) component.Field18.Value); } + if (!component.Field18.HasValue) { updateObj.AddClearedField(18); } } - } public static void SerializeUpdate(global::Improbable.DependentSchema.DependentDataComponent.Update update, global::Improbable.Worker.CInterop.SchemaComponentUpdate updateObj) { var obj = updateObj.GetFields(); + { if (update.Field1.HasValue) { var field = update.Field1.Value; + if (field.HasValue) { obj.AddBool(1, field.Value); } + if (!field.HasValue) { updateObj.AddClearedField(1); } } } + { if (update.Field2.HasValue) { var field = update.Field2.Value; + if (field.HasValue) { obj.AddFloat(2, field.Value); } + if (!field.HasValue) { updateObj.AddClearedField(2); } } } + { if (update.Field3.HasValue) { var field = update.Field3.Value; + if (field.HasValue) { obj.AddBytes(3, field.Value); } + if (!field.HasValue) { updateObj.AddClearedField(3); } } } + { if (update.Field4.HasValue) { var field = update.Field4.Value; + if (field.HasValue) { obj.AddInt32(4, field.Value); } + if (!field.HasValue) { updateObj.AddClearedField(4); } } } + { if (update.Field5.HasValue) { var field = update.Field5.Value; + if (field.HasValue) { obj.AddInt64(5, field.Value); } + if (!field.HasValue) { updateObj.AddClearedField(5); } } } + { if (update.Field6.HasValue) { var field = update.Field6.Value; + if (field.HasValue) { obj.AddDouble(6, field.Value); } + if (!field.HasValue) { updateObj.AddClearedField(6); } } } + { if (update.Field7.HasValue) { var field = update.Field7.Value; + if (field.HasValue) { obj.AddString(7, field.Value); } + if (!field.HasValue) { updateObj.AddClearedField(7); } } } + { if (update.Field8.HasValue) { var field = update.Field8.Value; + if (field.HasValue) { obj.AddUint32(8, field.Value); } + if (!field.HasValue) { updateObj.AddClearedField(8); } } } + { if (update.Field9.HasValue) { var field = update.Field9.Value; + if (field.HasValue) { obj.AddUint64(9, field.Value); } + if (!field.HasValue) { updateObj.AddClearedField(9); } } } + { if (update.Field10.HasValue) { var field = update.Field10.Value; + if (field.HasValue) { obj.AddSint32(10, field.Value); } + if (!field.HasValue) { updateObj.AddClearedField(10); } } } + { if (update.Field11.HasValue) { var field = update.Field11.Value; + if (field.HasValue) { obj.AddSint64(11, field.Value); } + if (!field.HasValue) { updateObj.AddClearedField(11); } } } + { if (update.Field12.HasValue) { var field = update.Field12.Value; + if (field.HasValue) { obj.AddFixed32(12, field.Value); } + if (!field.HasValue) { updateObj.AddClearedField(12); } } } + { if (update.Field13.HasValue) { var field = update.Field13.Value; + if (field.HasValue) { obj.AddFixed64(13, field.Value); } + if (!field.HasValue) { updateObj.AddClearedField(13); } } } + { if (update.Field14.HasValue) { var field = update.Field14.Value; + if (field.HasValue) { obj.AddSfixed32(14, field.Value); } + if (!field.HasValue) { updateObj.AddClearedField(14); } } } + { if (update.Field15.HasValue) { var field = update.Field15.Value; + if (field.HasValue) { obj.AddSfixed64(15, field.Value); } + if (!field.HasValue) { updateObj.AddClearedField(15); } } } + { if (update.Field16.HasValue) { var field = update.Field16.Value; + if (field.HasValue) { obj.AddEntityId(16, field.Value); } + if (!field.HasValue) { updateObj.AddClearedField(16); } } } + { if (update.Field17.HasValue) { var field = update.Field17.Value; + if (field.HasValue) { global::Improbable.TestSchema.SomeType.Serialization.Serialize(field.Value, obj.AddObject(17)); } + if (!field.HasValue) { updateObj.AddClearedField(17); } } } + { if (update.Field18.HasValue) { var field = update.Field18.Value; + if (field.HasValue) { obj.AddEnum(18, (uint) field.Value); } + if (!field.HasValue) { updateObj.AddClearedField(18); @@ -1066,7 +1162,6 @@ public static void SerializeSnapshot(global::Improbable.DependentSchema.Dependen { obj.AddEnum(18, (uint) snapshot.Field18.Value); } - } public static global::Improbable.DependentSchema.DependentDataComponent.Component Deserialize(global::Improbable.Worker.CInterop.SchemaObject obj, global::Unity.Entities.World world) @@ -1074,95 +1169,131 @@ public static void SerializeSnapshot(global::Improbable.DependentSchema.Dependen var component = new global::Improbable.DependentSchema.DependentDataComponent.Component(); component.field1Handle = global::Improbable.DependentSchema.DependentDataComponent.ReferenceTypeProviders.Field1Provider.Allocate(world); + if (obj.GetBoolCount(1) == 1) { component.Field1 = new bool?(obj.GetBool(1)); } + component.field2Handle = global::Improbable.DependentSchema.DependentDataComponent.ReferenceTypeProviders.Field2Provider.Allocate(world); + if (obj.GetFloatCount(2) == 1) { component.Field2 = new float?(obj.GetFloat(2)); } + component.field3Handle = global::Improbable.DependentSchema.DependentDataComponent.ReferenceTypeProviders.Field3Provider.Allocate(world); + if (obj.GetBytesCount(3) == 1) { component.Field3 = new global::Improbable.Gdk.Core.Option(obj.GetBytes(3)); } + component.field4Handle = global::Improbable.DependentSchema.DependentDataComponent.ReferenceTypeProviders.Field4Provider.Allocate(world); + if (obj.GetInt32Count(4) == 1) { component.Field4 = new int?(obj.GetInt32(4)); } + component.field5Handle = global::Improbable.DependentSchema.DependentDataComponent.ReferenceTypeProviders.Field5Provider.Allocate(world); + if (obj.GetInt64Count(5) == 1) { component.Field5 = new long?(obj.GetInt64(5)); } + component.field6Handle = global::Improbable.DependentSchema.DependentDataComponent.ReferenceTypeProviders.Field6Provider.Allocate(world); + if (obj.GetDoubleCount(6) == 1) { component.Field6 = new double?(obj.GetDouble(6)); } + component.field7Handle = global::Improbable.DependentSchema.DependentDataComponent.ReferenceTypeProviders.Field7Provider.Allocate(world); + if (obj.GetStringCount(7) == 1) { component.Field7 = new global::Improbable.Gdk.Core.Option(obj.GetString(7)); } + component.field8Handle = global::Improbable.DependentSchema.DependentDataComponent.ReferenceTypeProviders.Field8Provider.Allocate(world); + if (obj.GetUint32Count(8) == 1) { component.Field8 = new uint?(obj.GetUint32(8)); } + component.field9Handle = global::Improbable.DependentSchema.DependentDataComponent.ReferenceTypeProviders.Field9Provider.Allocate(world); + if (obj.GetUint64Count(9) == 1) { component.Field9 = new ulong?(obj.GetUint64(9)); } + component.field10Handle = global::Improbable.DependentSchema.DependentDataComponent.ReferenceTypeProviders.Field10Provider.Allocate(world); + if (obj.GetSint32Count(10) == 1) { component.Field10 = new int?(obj.GetSint32(10)); } + component.field11Handle = global::Improbable.DependentSchema.DependentDataComponent.ReferenceTypeProviders.Field11Provider.Allocate(world); + if (obj.GetSint64Count(11) == 1) { component.Field11 = new long?(obj.GetSint64(11)); } + component.field12Handle = global::Improbable.DependentSchema.DependentDataComponent.ReferenceTypeProviders.Field12Provider.Allocate(world); + if (obj.GetFixed32Count(12) == 1) { component.Field12 = new uint?(obj.GetFixed32(12)); } + component.field13Handle = global::Improbable.DependentSchema.DependentDataComponent.ReferenceTypeProviders.Field13Provider.Allocate(world); + if (obj.GetFixed64Count(13) == 1) { component.Field13 = new ulong?(obj.GetFixed64(13)); } + component.field14Handle = global::Improbable.DependentSchema.DependentDataComponent.ReferenceTypeProviders.Field14Provider.Allocate(world); + if (obj.GetSfixed32Count(14) == 1) { component.Field14 = new int?(obj.GetSfixed32(14)); } + component.field15Handle = global::Improbable.DependentSchema.DependentDataComponent.ReferenceTypeProviders.Field15Provider.Allocate(world); + if (obj.GetSfixed64Count(15) == 1) { component.Field15 = new long?(obj.GetSfixed64(15)); } + component.field16Handle = global::Improbable.DependentSchema.DependentDataComponent.ReferenceTypeProviders.Field16Provider.Allocate(world); + if (obj.GetEntityIdCount(16) == 1) { component.Field16 = new global::Improbable.Gdk.Core.EntityId?(obj.GetEntityIdStruct(16)); } + component.field17Handle = global::Improbable.DependentSchema.DependentDataComponent.ReferenceTypeProviders.Field17Provider.Allocate(world); + if (obj.GetObjectCount(17) == 1) { component.Field17 = new global::Improbable.TestSchema.SomeType?(global::Improbable.TestSchema.SomeType.Serialization.Deserialize(obj.GetObject(17))); } + component.field18Handle = global::Improbable.DependentSchema.DependentDataComponent.ReferenceTypeProviders.Field18Provider.Allocate(world); + if (obj.GetEnumCount(18) == 1) { component.Field18 = new global::Improbable.TestSchema.SomeEnum?((global::Improbable.TestSchema.SomeEnum) obj.GetEnum(18)); } + return component; } @@ -1173,7 +1304,7 @@ public static void SerializeSnapshot(global::Improbable.DependentSchema.Dependen { var isCleared = updateObj.IsFieldCleared(1); - + if (isCleared) { update.Field1 = new global::Improbable.Gdk.Core.Option(new bool?()); @@ -1183,9 +1314,10 @@ public static void SerializeSnapshot(global::Improbable.DependentSchema.Dependen update.Field1 = new global::Improbable.Gdk.Core.Option(obj.GetBool(1)); } } + { var isCleared = updateObj.IsFieldCleared(2); - + if (isCleared) { update.Field2 = new global::Improbable.Gdk.Core.Option(new float?()); @@ -1195,9 +1327,10 @@ public static void SerializeSnapshot(global::Improbable.DependentSchema.Dependen update.Field2 = new global::Improbable.Gdk.Core.Option(obj.GetFloat(2)); } } + { var isCleared = updateObj.IsFieldCleared(3); - + if (isCleared) { update.Field3 = new global::Improbable.Gdk.Core.Option>(new global::Improbable.Gdk.Core.Option()); @@ -1207,9 +1340,10 @@ public static void SerializeSnapshot(global::Improbable.DependentSchema.Dependen update.Field3 = new global::Improbable.Gdk.Core.Option>(obj.GetBytes(3)); } } + { var isCleared = updateObj.IsFieldCleared(4); - + if (isCleared) { update.Field4 = new global::Improbable.Gdk.Core.Option(new int?()); @@ -1219,9 +1353,10 @@ public static void SerializeSnapshot(global::Improbable.DependentSchema.Dependen update.Field4 = new global::Improbable.Gdk.Core.Option(obj.GetInt32(4)); } } + { var isCleared = updateObj.IsFieldCleared(5); - + if (isCleared) { update.Field5 = new global::Improbable.Gdk.Core.Option(new long?()); @@ -1231,9 +1366,10 @@ public static void SerializeSnapshot(global::Improbable.DependentSchema.Dependen update.Field5 = new global::Improbable.Gdk.Core.Option(obj.GetInt64(5)); } } + { var isCleared = updateObj.IsFieldCleared(6); - + if (isCleared) { update.Field6 = new global::Improbable.Gdk.Core.Option(new double?()); @@ -1243,9 +1379,10 @@ public static void SerializeSnapshot(global::Improbable.DependentSchema.Dependen update.Field6 = new global::Improbable.Gdk.Core.Option(obj.GetDouble(6)); } } + { var isCleared = updateObj.IsFieldCleared(7); - + if (isCleared) { update.Field7 = new global::Improbable.Gdk.Core.Option>(new global::Improbable.Gdk.Core.Option()); @@ -1255,9 +1392,10 @@ public static void SerializeSnapshot(global::Improbable.DependentSchema.Dependen update.Field7 = new global::Improbable.Gdk.Core.Option>(obj.GetString(7)); } } + { var isCleared = updateObj.IsFieldCleared(8); - + if (isCleared) { update.Field8 = new global::Improbable.Gdk.Core.Option(new uint?()); @@ -1267,9 +1405,10 @@ public static void SerializeSnapshot(global::Improbable.DependentSchema.Dependen update.Field8 = new global::Improbable.Gdk.Core.Option(obj.GetUint32(8)); } } + { var isCleared = updateObj.IsFieldCleared(9); - + if (isCleared) { update.Field9 = new global::Improbable.Gdk.Core.Option(new ulong?()); @@ -1279,9 +1418,10 @@ public static void SerializeSnapshot(global::Improbable.DependentSchema.Dependen update.Field9 = new global::Improbable.Gdk.Core.Option(obj.GetUint64(9)); } } + { var isCleared = updateObj.IsFieldCleared(10); - + if (isCleared) { update.Field10 = new global::Improbable.Gdk.Core.Option(new int?()); @@ -1291,9 +1431,10 @@ public static void SerializeSnapshot(global::Improbable.DependentSchema.Dependen update.Field10 = new global::Improbable.Gdk.Core.Option(obj.GetSint32(10)); } } + { var isCleared = updateObj.IsFieldCleared(11); - + if (isCleared) { update.Field11 = new global::Improbable.Gdk.Core.Option(new long?()); @@ -1303,9 +1444,10 @@ public static void SerializeSnapshot(global::Improbable.DependentSchema.Dependen update.Field11 = new global::Improbable.Gdk.Core.Option(obj.GetSint64(11)); } } + { var isCleared = updateObj.IsFieldCleared(12); - + if (isCleared) { update.Field12 = new global::Improbable.Gdk.Core.Option(new uint?()); @@ -1315,9 +1457,10 @@ public static void SerializeSnapshot(global::Improbable.DependentSchema.Dependen update.Field12 = new global::Improbable.Gdk.Core.Option(obj.GetFixed32(12)); } } + { var isCleared = updateObj.IsFieldCleared(13); - + if (isCleared) { update.Field13 = new global::Improbable.Gdk.Core.Option(new ulong?()); @@ -1327,9 +1470,10 @@ public static void SerializeSnapshot(global::Improbable.DependentSchema.Dependen update.Field13 = new global::Improbable.Gdk.Core.Option(obj.GetFixed64(13)); } } + { var isCleared = updateObj.IsFieldCleared(14); - + if (isCleared) { update.Field14 = new global::Improbable.Gdk.Core.Option(new int?()); @@ -1339,9 +1483,10 @@ public static void SerializeSnapshot(global::Improbable.DependentSchema.Dependen update.Field14 = new global::Improbable.Gdk.Core.Option(obj.GetSfixed32(14)); } } + { var isCleared = updateObj.IsFieldCleared(15); - + if (isCleared) { update.Field15 = new global::Improbable.Gdk.Core.Option(new long?()); @@ -1351,9 +1496,10 @@ public static void SerializeSnapshot(global::Improbable.DependentSchema.Dependen update.Field15 = new global::Improbable.Gdk.Core.Option(obj.GetSfixed64(15)); } } + { var isCleared = updateObj.IsFieldCleared(16); - + if (isCleared) { update.Field16 = new global::Improbable.Gdk.Core.Option(new global::Improbable.Gdk.Core.EntityId?()); @@ -1363,9 +1509,10 @@ public static void SerializeSnapshot(global::Improbable.DependentSchema.Dependen update.Field16 = new global::Improbable.Gdk.Core.Option(obj.GetEntityIdStruct(16)); } } + { var isCleared = updateObj.IsFieldCleared(17); - + if (isCleared) { update.Field17 = new global::Improbable.Gdk.Core.Option(new global::Improbable.TestSchema.SomeType?()); @@ -1375,9 +1522,10 @@ public static void SerializeSnapshot(global::Improbable.DependentSchema.Dependen update.Field17 = new global::Improbable.Gdk.Core.Option(global::Improbable.TestSchema.SomeType.Serialization.Deserialize(obj.GetObject(17))); } } + { var isCleared = updateObj.IsFieldCleared(18); - + if (isCleared) { update.Field18 = new global::Improbable.Gdk.Core.Option(new global::Improbable.TestSchema.SomeEnum?()); @@ -1387,6 +1535,7 @@ public static void SerializeSnapshot(global::Improbable.DependentSchema.Dependen update.Field18 = new global::Improbable.Gdk.Core.Option((global::Improbable.TestSchema.SomeEnum) obj.GetEnum(18)); } } + return update; } @@ -1399,74 +1548,92 @@ public static void SerializeSnapshot(global::Improbable.DependentSchema.Dependen { update.Field1 = new global::Improbable.Gdk.Core.Option(obj.GetBool(1)); } + if (obj.GetFloatCount(2) == 1) { update.Field2 = new global::Improbable.Gdk.Core.Option(obj.GetFloat(2)); } + if (obj.GetBytesCount(3) == 1) { update.Field3 = new global::Improbable.Gdk.Core.Option>(obj.GetBytes(3)); } + if (obj.GetInt32Count(4) == 1) { update.Field4 = new global::Improbable.Gdk.Core.Option(obj.GetInt32(4)); } + if (obj.GetInt64Count(5) == 1) { update.Field5 = new global::Improbable.Gdk.Core.Option(obj.GetInt64(5)); } + if (obj.GetDoubleCount(6) == 1) { update.Field6 = new global::Improbable.Gdk.Core.Option(obj.GetDouble(6)); } + if (obj.GetStringCount(7) == 1) { update.Field7 = new global::Improbable.Gdk.Core.Option>(obj.GetString(7)); } + if (obj.GetUint32Count(8) == 1) { update.Field8 = new global::Improbable.Gdk.Core.Option(obj.GetUint32(8)); } + if (obj.GetUint64Count(9) == 1) { update.Field9 = new global::Improbable.Gdk.Core.Option(obj.GetUint64(9)); } + if (obj.GetSint32Count(10) == 1) { update.Field10 = new global::Improbable.Gdk.Core.Option(obj.GetSint32(10)); } + if (obj.GetSint64Count(11) == 1) { update.Field11 = new global::Improbable.Gdk.Core.Option(obj.GetSint64(11)); } + if (obj.GetFixed32Count(12) == 1) { update.Field12 = new global::Improbable.Gdk.Core.Option(obj.GetFixed32(12)); } + if (obj.GetFixed64Count(13) == 1) { update.Field13 = new global::Improbable.Gdk.Core.Option(obj.GetFixed64(13)); } + if (obj.GetSfixed32Count(14) == 1) { update.Field14 = new global::Improbable.Gdk.Core.Option(obj.GetSfixed32(14)); } + if (obj.GetSfixed64Count(15) == 1) { update.Field15 = new global::Improbable.Gdk.Core.Option(obj.GetSfixed64(15)); } + if (obj.GetEntityIdCount(16) == 1) { update.Field16 = new global::Improbable.Gdk.Core.Option(obj.GetEntityIdStruct(16)); } + if (obj.GetObjectCount(17) == 1) { update.Field17 = new global::Improbable.Gdk.Core.Option(global::Improbable.TestSchema.SomeType.Serialization.Deserialize(obj.GetObject(17))); } + if (obj.GetEnumCount(18) == 1) { update.Field18 = new global::Improbable.Gdk.Core.Option((global::Improbable.TestSchema.SomeEnum) obj.GetEnum(18)); } + return update; } @@ -1478,74 +1645,92 @@ public static void SerializeSnapshot(global::Improbable.DependentSchema.Dependen { component.Field1 = new bool?(obj.GetBool(1)); } + if (obj.GetFloatCount(2) == 1) { component.Field2 = new float?(obj.GetFloat(2)); } + if (obj.GetBytesCount(3) == 1) { component.Field3 = new global::Improbable.Gdk.Core.Option(obj.GetBytes(3)); } + if (obj.GetInt32Count(4) == 1) { component.Field4 = new int?(obj.GetInt32(4)); } + if (obj.GetInt64Count(5) == 1) { component.Field5 = new long?(obj.GetInt64(5)); } + if (obj.GetDoubleCount(6) == 1) { component.Field6 = new double?(obj.GetDouble(6)); } + if (obj.GetStringCount(7) == 1) { component.Field7 = new global::Improbable.Gdk.Core.Option(obj.GetString(7)); } + if (obj.GetUint32Count(8) == 1) { component.Field8 = new uint?(obj.GetUint32(8)); } + if (obj.GetUint64Count(9) == 1) { component.Field9 = new ulong?(obj.GetUint64(9)); } + if (obj.GetSint32Count(10) == 1) { component.Field10 = new int?(obj.GetSint32(10)); } + if (obj.GetSint64Count(11) == 1) { component.Field11 = new long?(obj.GetSint64(11)); } + if (obj.GetFixed32Count(12) == 1) { component.Field12 = new uint?(obj.GetFixed32(12)); } + if (obj.GetFixed64Count(13) == 1) { component.Field13 = new ulong?(obj.GetFixed64(13)); } + if (obj.GetSfixed32Count(14) == 1) { component.Field14 = new int?(obj.GetSfixed32(14)); } + if (obj.GetSfixed64Count(15) == 1) { component.Field15 = new long?(obj.GetSfixed64(15)); } + if (obj.GetEntityIdCount(16) == 1) { component.Field16 = new global::Improbable.Gdk.Core.EntityId?(obj.GetEntityIdStruct(16)); } + if (obj.GetObjectCount(17) == 1) { component.Field17 = new global::Improbable.TestSchema.SomeType?(global::Improbable.TestSchema.SomeType.Serialization.Deserialize(obj.GetObject(17))); } + if (obj.GetEnumCount(18) == 1) { component.Field18 = new global::Improbable.TestSchema.SomeEnum?((global::Improbable.TestSchema.SomeEnum) obj.GetEnum(18)); } + return component; } @@ -1555,7 +1740,7 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen { var isCleared = updateObj.IsFieldCleared(1); - + if (isCleared) { component.Field1 = new bool?(); @@ -1566,9 +1751,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field1 = new bool?(value); } } + { var isCleared = updateObj.IsFieldCleared(2); - + if (isCleared) { component.Field2 = new float?(); @@ -1579,9 +1765,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field2 = new float?(value); } } + { var isCleared = updateObj.IsFieldCleared(3); - + if (isCleared) { component.Field3 = new global::Improbable.Gdk.Core.Option(); @@ -1592,9 +1779,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field3 = new global::Improbable.Gdk.Core.Option(value); } } + { var isCleared = updateObj.IsFieldCleared(4); - + if (isCleared) { component.Field4 = new int?(); @@ -1605,9 +1793,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field4 = new int?(value); } } + { var isCleared = updateObj.IsFieldCleared(5); - + if (isCleared) { component.Field5 = new long?(); @@ -1618,9 +1807,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field5 = new long?(value); } } + { var isCleared = updateObj.IsFieldCleared(6); - + if (isCleared) { component.Field6 = new double?(); @@ -1631,9 +1821,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field6 = new double?(value); } } + { var isCleared = updateObj.IsFieldCleared(7); - + if (isCleared) { component.Field7 = new global::Improbable.Gdk.Core.Option(); @@ -1644,9 +1835,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field7 = new global::Improbable.Gdk.Core.Option(value); } } + { var isCleared = updateObj.IsFieldCleared(8); - + if (isCleared) { component.Field8 = new uint?(); @@ -1657,9 +1849,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field8 = new uint?(value); } } + { var isCleared = updateObj.IsFieldCleared(9); - + if (isCleared) { component.Field9 = new ulong?(); @@ -1670,9 +1863,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field9 = new ulong?(value); } } + { var isCleared = updateObj.IsFieldCleared(10); - + if (isCleared) { component.Field10 = new int?(); @@ -1683,9 +1877,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field10 = new int?(value); } } + { var isCleared = updateObj.IsFieldCleared(11); - + if (isCleared) { component.Field11 = new long?(); @@ -1696,9 +1891,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field11 = new long?(value); } } + { var isCleared = updateObj.IsFieldCleared(12); - + if (isCleared) { component.Field12 = new uint?(); @@ -1709,9 +1905,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field12 = new uint?(value); } } + { var isCleared = updateObj.IsFieldCleared(13); - + if (isCleared) { component.Field13 = new ulong?(); @@ -1722,9 +1919,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field13 = new ulong?(value); } } + { var isCleared = updateObj.IsFieldCleared(14); - + if (isCleared) { component.Field14 = new int?(); @@ -1735,9 +1933,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field14 = new int?(value); } } + { var isCleared = updateObj.IsFieldCleared(15); - + if (isCleared) { component.Field15 = new long?(); @@ -1748,9 +1947,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field15 = new long?(value); } } + { var isCleared = updateObj.IsFieldCleared(16); - + if (isCleared) { component.Field16 = new global::Improbable.Gdk.Core.EntityId?(); @@ -1761,9 +1961,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field16 = new global::Improbable.Gdk.Core.EntityId?(value); } } + { var isCleared = updateObj.IsFieldCleared(17); - + if (isCleared) { component.Field17 = new global::Improbable.TestSchema.SomeType?(); @@ -1774,9 +1975,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field17 = new global::Improbable.TestSchema.SomeType?(value); } } + { var isCleared = updateObj.IsFieldCleared(18); - + if (isCleared) { component.Field18 = new global::Improbable.TestSchema.SomeEnum?(); @@ -1795,7 +1997,7 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen { var isCleared = updateObj.IsFieldCleared(1); - + if (isCleared) { snapshot.Field1 = new bool?(); @@ -1806,9 +2008,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field1 = new bool?(value); } } + { var isCleared = updateObj.IsFieldCleared(2); - + if (isCleared) { snapshot.Field2 = new float?(); @@ -1819,9 +2022,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field2 = new float?(value); } } + { var isCleared = updateObj.IsFieldCleared(3); - + if (isCleared) { snapshot.Field3 = new global::Improbable.Gdk.Core.Option(); @@ -1832,9 +2036,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field3 = new global::Improbable.Gdk.Core.Option(value); } } + { var isCleared = updateObj.IsFieldCleared(4); - + if (isCleared) { snapshot.Field4 = new int?(); @@ -1845,9 +2050,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field4 = new int?(value); } } + { var isCleared = updateObj.IsFieldCleared(5); - + if (isCleared) { snapshot.Field5 = new long?(); @@ -1858,9 +2064,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field5 = new long?(value); } } + { var isCleared = updateObj.IsFieldCleared(6); - + if (isCleared) { snapshot.Field6 = new double?(); @@ -1871,9 +2078,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field6 = new double?(value); } } + { var isCleared = updateObj.IsFieldCleared(7); - + if (isCleared) { snapshot.Field7 = new global::Improbable.Gdk.Core.Option(); @@ -1884,9 +2092,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field7 = new global::Improbable.Gdk.Core.Option(value); } } + { var isCleared = updateObj.IsFieldCleared(8); - + if (isCleared) { snapshot.Field8 = new uint?(); @@ -1897,9 +2106,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field8 = new uint?(value); } } + { var isCleared = updateObj.IsFieldCleared(9); - + if (isCleared) { snapshot.Field9 = new ulong?(); @@ -1910,9 +2120,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field9 = new ulong?(value); } } + { var isCleared = updateObj.IsFieldCleared(10); - + if (isCleared) { snapshot.Field10 = new int?(); @@ -1923,9 +2134,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field10 = new int?(value); } } + { var isCleared = updateObj.IsFieldCleared(11); - + if (isCleared) { snapshot.Field11 = new long?(); @@ -1936,9 +2148,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field11 = new long?(value); } } + { var isCleared = updateObj.IsFieldCleared(12); - + if (isCleared) { snapshot.Field12 = new uint?(); @@ -1949,9 +2162,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field12 = new uint?(value); } } + { var isCleared = updateObj.IsFieldCleared(13); - + if (isCleared) { snapshot.Field13 = new ulong?(); @@ -1962,9 +2176,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field13 = new ulong?(value); } } + { var isCleared = updateObj.IsFieldCleared(14); - + if (isCleared) { snapshot.Field14 = new int?(); @@ -1975,9 +2190,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field14 = new int?(value); } } + { var isCleared = updateObj.IsFieldCleared(15); - + if (isCleared) { snapshot.Field15 = new long?(); @@ -1988,9 +2204,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field15 = new long?(value); } } + { var isCleared = updateObj.IsFieldCleared(16); - + if (isCleared) { snapshot.Field16 = new global::Improbable.Gdk.Core.EntityId?(); @@ -2001,9 +2218,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field16 = new global::Improbable.Gdk.Core.EntityId?(value); } } + { var isCleared = updateObj.IsFieldCleared(17); - + if (isCleared) { snapshot.Field17 = new global::Improbable.TestSchema.SomeType?(); @@ -2014,9 +2232,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field17 = new global::Improbable.TestSchema.SomeType?(value); } } + { var isCleared = updateObj.IsFieldCleared(18); - + if (isCleared) { snapshot.Field18 = new global::Improbable.TestSchema.SomeEnum?(); @@ -2108,7 +2327,7 @@ private static Update SnapshotToUpdate(in Snapshot snapshot) Field15 = snapshot.Field15, Field16 = snapshot.Field16, Field17 = snapshot.Field17, - Field18 = snapshot.Field18, + Field18 = snapshot.Field18 }; return update; diff --git a/test-project/Assets/Generated/Source/improbable/dependentschema/DependentDataComponentCommandSenderReceiver.cs b/test-project/Assets/Generated/Source/improbable/dependentschema/DependentDataComponentCommandSenderReceiver.cs index 109806bc1b..814328d2de 100644 --- a/test-project/Assets/Generated/Source/improbable/dependentschema/DependentDataComponentCommandSenderReceiver.cs +++ b/test-project/Assets/Generated/Source/improbable/dependentschema/DependentDataComponentCommandSenderReceiver.cs @@ -371,7 +371,6 @@ public void RemoveAllCallbacks() barCommandCallbackToCallbackKey.Clear(); } - } } } diff --git a/test-project/Assets/Generated/Source/improbable/dependentschema/DependentDataComponentComponentReaderWriter.cs b/test-project/Assets/Generated/Source/improbable/dependentschema/DependentDataComponentComponentReaderWriter.cs index 35a90a5116..6fc38d1ab6 100644 --- a/test-project/Assets/Generated/Source/improbable/dependentschema/DependentDataComponentComponentReaderWriter.cs +++ b/test-project/Assets/Generated/Source/improbable/dependentschema/DependentDataComponentComponentReaderWriter.cs @@ -910,7 +910,6 @@ public event Action OnField15Update } } - private Dictionary, ulong> fooEventEventCallbackToCallbackKey; public event Action OnFooEventEvent { @@ -970,7 +969,6 @@ public void RemoveAllCallbacks() updateCallbackToCallbackKey.Clear(); } - if (field1UpdateCallbackToCallbackKey != null) { foreach (var callbackToKey in field1UpdateCallbackToCallbackKey) diff --git a/test-project/Assets/Generated/Source/improbable/dependentschema/DependentDataComponentUpdateSender.cs b/test-project/Assets/Generated/Source/improbable/dependentschema/DependentDataComponentUpdateSender.cs index 800ddbd0a4..ab088ba2f3 100644 --- a/test-project/Assets/Generated/Source/improbable/dependentschema/DependentDataComponentUpdateSender.cs +++ b/test-project/Assets/Generated/Source/improbable/dependentschema/DependentDataComponentUpdateSender.cs @@ -40,14 +40,12 @@ public void SendUpdates( var spatialOSEntityType = system.GetArchetypeChunkComponentType(true); var componentType = system.GetArchetypeChunkComponentType(); - var authorityType = system.GetArchetypeChunkSharedComponentType(); foreach (var chunk in chunkArray) { var entityIdArray = chunk.GetNativeArray(spatialOSEntityType); var componentArray = chunk.GetNativeArray(componentType); - var authorityIndex = chunk.GetSharedComponentIndex(authorityType); if (!entityManager.GetSharedComponentData(authorityIndex).HasAuthority) @@ -58,6 +56,7 @@ public void SendUpdates( for (var i = 0; i < componentArray.Length; i++) { var data = componentArray[i]; + if (data.IsDataDirty()) { Update update = new Update(); diff --git a/test-project/Assets/Generated/Source/improbable/tests/DependencyTest.cs b/test-project/Assets/Generated/Source/improbable/tests/DependencyTest.cs index 940d992970..dca053bd4d 100644 --- a/test-project/Assets/Generated/Source/improbable/tests/DependencyTest.cs +++ b/test-project/Assets/Generated/Source/improbable/tests/DependencyTest.cs @@ -25,7 +25,9 @@ public struct Component : IComponentData, ISpatialComponentData, ISnapshottable< public bool IsDataDirty() { var isDataDirty = false; + isDataDirty |= (dirtyBits0 != 0x0); + return isDataDirty; } @@ -41,6 +43,7 @@ component MyComponent In that case, val_a corresponds to propertyIndex 0 and val_b corresponds to propertyIndex 1 in this method. This method throws an InvalidOperationException in case your component doesn't contain properties. */ + public bool IsDataDirty(int propertyIndex) { if (propertyIndex < 0 || propertyIndex >= 1) @@ -175,20 +178,22 @@ public static void SerializeComponent(global::Improbable.Tests.DependencyTest.Co public static void SerializeUpdate(global::Improbable.Tests.DependencyTest.Component component, global::Improbable.Worker.CInterop.SchemaComponentUpdate updateObj) { var obj = updateObj.GetFields(); + if (component.IsDataDirty(0)) { obj.AddUint32(1, component.Root); } - } public static void SerializeUpdate(global::Improbable.Tests.DependencyTest.Update update, global::Improbable.Worker.CInterop.SchemaComponentUpdate updateObj) { var obj = updateObj.GetFields(); + { if (update.Root.HasValue) { var field = update.Root.Value; + obj.AddUint32(1, field); } } @@ -197,7 +202,6 @@ public static void SerializeUpdate(global::Improbable.Tests.DependencyTest.Updat public static void SerializeSnapshot(global::Improbable.Tests.DependencyTest.Snapshot snapshot, global::Improbable.Worker.CInterop.SchemaObject obj) { obj.AddUint32(1, snapshot.Root); - } public static global::Improbable.Tests.DependencyTest.Component Deserialize(global::Improbable.Worker.CInterop.SchemaObject obj, global::Unity.Entities.World world) @@ -205,6 +209,7 @@ public static void SerializeSnapshot(global::Improbable.Tests.DependencyTest.Sna var component = new global::Improbable.Tests.DependencyTest.Component(); component.Root = obj.GetUint32(1); + return component; } @@ -217,6 +222,7 @@ public static void SerializeSnapshot(global::Improbable.Tests.DependencyTest.Sna { update.Root = obj.GetUint32(1); } + return update; } @@ -226,6 +232,7 @@ public static void SerializeSnapshot(global::Improbable.Tests.DependencyTest.Sna var obj = data.GetFields(); update.Root = obj.GetUint32(1); + return update; } @@ -234,6 +241,7 @@ public static void SerializeSnapshot(global::Improbable.Tests.DependencyTest.Sna var component = new global::Improbable.Tests.DependencyTest.Snapshot(); component.Root = obj.GetUint32(1); + return component; } @@ -302,7 +310,7 @@ private static Update SnapshotToUpdate(in Snapshot snapshot) { var update = new Update { - Root = snapshot.Root, + Root = snapshot.Root }; return update; diff --git a/test-project/Assets/Generated/Source/improbable/tests/DependencyTestChild.cs b/test-project/Assets/Generated/Source/improbable/tests/DependencyTestChild.cs index 4a8b5cc3eb..5ed0d92db5 100644 --- a/test-project/Assets/Generated/Source/improbable/tests/DependencyTestChild.cs +++ b/test-project/Assets/Generated/Source/improbable/tests/DependencyTestChild.cs @@ -25,7 +25,9 @@ public struct Component : IComponentData, ISpatialComponentData, ISnapshottable< public bool IsDataDirty() { var isDataDirty = false; + isDataDirty |= (dirtyBits0 != 0x0); + return isDataDirty; } @@ -41,6 +43,7 @@ component MyComponent In that case, val_a corresponds to propertyIndex 0 and val_b corresponds to propertyIndex 1 in this method. This method throws an InvalidOperationException in case your component doesn't contain properties. */ + public bool IsDataDirty(int propertyIndex) { if (propertyIndex < 0 || propertyIndex >= 1) @@ -175,20 +178,22 @@ public static void SerializeComponent(global::Improbable.Tests.DependencyTestChi public static void SerializeUpdate(global::Improbable.Tests.DependencyTestChild.Component component, global::Improbable.Worker.CInterop.SchemaComponentUpdate updateObj) { var obj = updateObj.GetFields(); + if (component.IsDataDirty(0)) { obj.AddUint32(1, component.Child); } - } public static void SerializeUpdate(global::Improbable.Tests.DependencyTestChild.Update update, global::Improbable.Worker.CInterop.SchemaComponentUpdate updateObj) { var obj = updateObj.GetFields(); + { if (update.Child.HasValue) { var field = update.Child.Value; + obj.AddUint32(1, field); } } @@ -197,7 +202,6 @@ public static void SerializeUpdate(global::Improbable.Tests.DependencyTestChild. public static void SerializeSnapshot(global::Improbable.Tests.DependencyTestChild.Snapshot snapshot, global::Improbable.Worker.CInterop.SchemaObject obj) { obj.AddUint32(1, snapshot.Child); - } public static global::Improbable.Tests.DependencyTestChild.Component Deserialize(global::Improbable.Worker.CInterop.SchemaObject obj, global::Unity.Entities.World world) @@ -205,6 +209,7 @@ public static void SerializeSnapshot(global::Improbable.Tests.DependencyTestChil var component = new global::Improbable.Tests.DependencyTestChild.Component(); component.Child = obj.GetUint32(1); + return component; } @@ -217,6 +222,7 @@ public static void SerializeSnapshot(global::Improbable.Tests.DependencyTestChil { update.Child = obj.GetUint32(1); } + return update; } @@ -226,6 +232,7 @@ public static void SerializeSnapshot(global::Improbable.Tests.DependencyTestChil var obj = data.GetFields(); update.Child = obj.GetUint32(1); + return update; } @@ -234,6 +241,7 @@ public static void SerializeSnapshot(global::Improbable.Tests.DependencyTestChil var component = new global::Improbable.Tests.DependencyTestChild.Snapshot(); component.Child = obj.GetUint32(1); + return component; } @@ -302,7 +310,7 @@ private static Update SnapshotToUpdate(in Snapshot snapshot) { var update = new Update { - Child = snapshot.Child, + Child = snapshot.Child }; return update; diff --git a/test-project/Assets/Generated/Source/improbable/tests/DependencyTestChildComponentReaderWriter.cs b/test-project/Assets/Generated/Source/improbable/tests/DependencyTestChildComponentReaderWriter.cs index 75e285aea2..688ab06d11 100644 --- a/test-project/Assets/Generated/Source/improbable/tests/DependencyTestChildComponentReaderWriter.cs +++ b/test-project/Assets/Generated/Source/improbable/tests/DependencyTestChildComponentReaderWriter.cs @@ -383,7 +383,6 @@ public event Action OnChildUpdate } } - internal DependencyTestChildReader(World world, Entity entity, EntityId entityId) { Entity = entity; @@ -418,7 +417,6 @@ public void RemoveAllCallbacks() updateCallbackToCallbackKey.Clear(); } - if (childUpdateCallbackToCallbackKey != null) { foreach (var callbackToKey in childUpdateCallbackToCallbackKey) @@ -450,7 +448,6 @@ public void SendUpdate(DependencyTestChild.Update update) EntityManager.SetComponentData(Entity, component); } - public void AcknowledgeAuthorityLoss() { ComponentUpdateSystem.AcknowledgeAuthorityLoss(EntityId, DependencyTestChild.ComponentId); diff --git a/test-project/Assets/Generated/Source/improbable/tests/DependencyTestChildUpdateSender.cs b/test-project/Assets/Generated/Source/improbable/tests/DependencyTestChildUpdateSender.cs index 116421183c..9895f98f34 100644 --- a/test-project/Assets/Generated/Source/improbable/tests/DependencyTestChildUpdateSender.cs +++ b/test-project/Assets/Generated/Source/improbable/tests/DependencyTestChildUpdateSender.cs @@ -40,14 +40,12 @@ public void SendUpdates( var spatialOSEntityType = system.GetArchetypeChunkComponentType(true); var componentType = system.GetArchetypeChunkComponentType(); - var authorityType = system.GetArchetypeChunkSharedComponentType(); foreach (var chunk in chunkArray) { var entityIdArray = chunk.GetNativeArray(spatialOSEntityType); var componentArray = chunk.GetNativeArray(componentType); - var authorityIndex = chunk.GetSharedComponentIndex(authorityType); if (!entityManager.GetSharedComponentData(authorityIndex).HasAuthority) @@ -58,6 +56,7 @@ public void SendUpdates( for (var i = 0; i < componentArray.Length; i++) { var data = componentArray[i]; + if (data.IsDataDirty()) { Update update = new Update(); diff --git a/test-project/Assets/Generated/Source/improbable/tests/DependencyTestComponentReaderWriter.cs b/test-project/Assets/Generated/Source/improbable/tests/DependencyTestComponentReaderWriter.cs index bf20a2ef73..0c03aef080 100644 --- a/test-project/Assets/Generated/Source/improbable/tests/DependencyTestComponentReaderWriter.cs +++ b/test-project/Assets/Generated/Source/improbable/tests/DependencyTestComponentReaderWriter.cs @@ -383,7 +383,6 @@ public event Action OnRootUpdate } } - internal DependencyTestReader(World world, Entity entity, EntityId entityId) { Entity = entity; @@ -418,7 +417,6 @@ public void RemoveAllCallbacks() updateCallbackToCallbackKey.Clear(); } - if (rootUpdateCallbackToCallbackKey != null) { foreach (var callbackToKey in rootUpdateCallbackToCallbackKey) @@ -450,7 +448,6 @@ public void SendUpdate(DependencyTest.Update update) EntityManager.SetComponentData(Entity, component); } - public void AcknowledgeAuthorityLoss() { ComponentUpdateSystem.AcknowledgeAuthorityLoss(EntityId, DependencyTest.ComponentId); diff --git a/test-project/Assets/Generated/Source/improbable/tests/DependencyTestGrandchild.cs b/test-project/Assets/Generated/Source/improbable/tests/DependencyTestGrandchild.cs index 19d66e86c1..2182e322d4 100644 --- a/test-project/Assets/Generated/Source/improbable/tests/DependencyTestGrandchild.cs +++ b/test-project/Assets/Generated/Source/improbable/tests/DependencyTestGrandchild.cs @@ -25,7 +25,9 @@ public struct Component : IComponentData, ISpatialComponentData, ISnapshottable< public bool IsDataDirty() { var isDataDirty = false; + isDataDirty |= (dirtyBits0 != 0x0); + return isDataDirty; } @@ -41,6 +43,7 @@ component MyComponent In that case, val_a corresponds to propertyIndex 0 and val_b corresponds to propertyIndex 1 in this method. This method throws an InvalidOperationException in case your component doesn't contain properties. */ + public bool IsDataDirty(int propertyIndex) { if (propertyIndex < 0 || propertyIndex >= 1) @@ -175,20 +178,22 @@ public static void SerializeComponent(global::Improbable.Tests.DependencyTestGra public static void SerializeUpdate(global::Improbable.Tests.DependencyTestGrandchild.Component component, global::Improbable.Worker.CInterop.SchemaComponentUpdate updateObj) { var obj = updateObj.GetFields(); + if (component.IsDataDirty(0)) { obj.AddUint32(1, component.Grandchild); } - } public static void SerializeUpdate(global::Improbable.Tests.DependencyTestGrandchild.Update update, global::Improbable.Worker.CInterop.SchemaComponentUpdate updateObj) { var obj = updateObj.GetFields(); + { if (update.Grandchild.HasValue) { var field = update.Grandchild.Value; + obj.AddUint32(1, field); } } @@ -197,7 +202,6 @@ public static void SerializeUpdate(global::Improbable.Tests.DependencyTestGrandc public static void SerializeSnapshot(global::Improbable.Tests.DependencyTestGrandchild.Snapshot snapshot, global::Improbable.Worker.CInterop.SchemaObject obj) { obj.AddUint32(1, snapshot.Grandchild); - } public static global::Improbable.Tests.DependencyTestGrandchild.Component Deserialize(global::Improbable.Worker.CInterop.SchemaObject obj, global::Unity.Entities.World world) @@ -205,6 +209,7 @@ public static void SerializeSnapshot(global::Improbable.Tests.DependencyTestGran var component = new global::Improbable.Tests.DependencyTestGrandchild.Component(); component.Grandchild = obj.GetUint32(1); + return component; } @@ -217,6 +222,7 @@ public static void SerializeSnapshot(global::Improbable.Tests.DependencyTestGran { update.Grandchild = obj.GetUint32(1); } + return update; } @@ -226,6 +232,7 @@ public static void SerializeSnapshot(global::Improbable.Tests.DependencyTestGran var obj = data.GetFields(); update.Grandchild = obj.GetUint32(1); + return update; } @@ -234,6 +241,7 @@ public static void SerializeSnapshot(global::Improbable.Tests.DependencyTestGran var component = new global::Improbable.Tests.DependencyTestGrandchild.Snapshot(); component.Grandchild = obj.GetUint32(1); + return component; } @@ -302,7 +310,7 @@ private static Update SnapshotToUpdate(in Snapshot snapshot) { var update = new Update { - Grandchild = snapshot.Grandchild, + Grandchild = snapshot.Grandchild }; return update; diff --git a/test-project/Assets/Generated/Source/improbable/tests/DependencyTestGrandchildComponentReaderWriter.cs b/test-project/Assets/Generated/Source/improbable/tests/DependencyTestGrandchildComponentReaderWriter.cs index 4d682e3364..03b2b7424d 100644 --- a/test-project/Assets/Generated/Source/improbable/tests/DependencyTestGrandchildComponentReaderWriter.cs +++ b/test-project/Assets/Generated/Source/improbable/tests/DependencyTestGrandchildComponentReaderWriter.cs @@ -383,7 +383,6 @@ public event Action OnGrandchildUpdate } } - internal DependencyTestGrandchildReader(World world, Entity entity, EntityId entityId) { Entity = entity; @@ -418,7 +417,6 @@ public void RemoveAllCallbacks() updateCallbackToCallbackKey.Clear(); } - if (grandchildUpdateCallbackToCallbackKey != null) { foreach (var callbackToKey in grandchildUpdateCallbackToCallbackKey) @@ -450,7 +448,6 @@ public void SendUpdate(DependencyTestGrandchild.Update update) EntityManager.SetComponentData(Entity, component); } - public void AcknowledgeAuthorityLoss() { ComponentUpdateSystem.AcknowledgeAuthorityLoss(EntityId, DependencyTestGrandchild.ComponentId); diff --git a/test-project/Assets/Generated/Source/improbable/tests/DependencyTestGrandchildUpdateSender.cs b/test-project/Assets/Generated/Source/improbable/tests/DependencyTestGrandchildUpdateSender.cs index 0643f1889a..003e3cd358 100644 --- a/test-project/Assets/Generated/Source/improbable/tests/DependencyTestGrandchildUpdateSender.cs +++ b/test-project/Assets/Generated/Source/improbable/tests/DependencyTestGrandchildUpdateSender.cs @@ -40,14 +40,12 @@ public void SendUpdates( var spatialOSEntityType = system.GetArchetypeChunkComponentType(true); var componentType = system.GetArchetypeChunkComponentType(); - var authorityType = system.GetArchetypeChunkSharedComponentType(); foreach (var chunk in chunkArray) { var entityIdArray = chunk.GetNativeArray(spatialOSEntityType); var componentArray = chunk.GetNativeArray(componentType); - var authorityIndex = chunk.GetSharedComponentIndex(authorityType); if (!entityManager.GetSharedComponentData(authorityIndex).HasAuthority) @@ -58,6 +56,7 @@ public void SendUpdates( for (var i = 0; i < componentArray.Length; i++) { var data = componentArray[i]; + if (data.IsDataDirty()) { Update update = new Update(); diff --git a/test-project/Assets/Generated/Source/improbable/tests/DependencyTestUpdateSender.cs b/test-project/Assets/Generated/Source/improbable/tests/DependencyTestUpdateSender.cs index 281aa9d42b..3dd0e7f4d3 100644 --- a/test-project/Assets/Generated/Source/improbable/tests/DependencyTestUpdateSender.cs +++ b/test-project/Assets/Generated/Source/improbable/tests/DependencyTestUpdateSender.cs @@ -40,14 +40,12 @@ public void SendUpdates( var spatialOSEntityType = system.GetArchetypeChunkComponentType(true); var componentType = system.GetArchetypeChunkComponentType(); - var authorityType = system.GetArchetypeChunkSharedComponentType(); foreach (var chunk in chunkArray) { var entityIdArray = chunk.GetNativeArray(spatialOSEntityType); var componentArray = chunk.GetNativeArray(componentType); - var authorityIndex = chunk.GetSharedComponentIndex(authorityType); if (!entityManager.GetSharedComponentData(authorityIndex).HasAuthority) @@ -58,6 +56,7 @@ public void SendUpdates( for (var i = 0; i < componentArray.Length; i++) { var data = componentArray[i]; + if (data.IsDataDirty()) { Update update = new Update(); diff --git a/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveEntity.cs b/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveEntity.cs index fb5e7fc7e5..4c8ca02b9f 100644 --- a/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveEntity.cs +++ b/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveEntity.cs @@ -25,7 +25,9 @@ public struct Component : IComponentData, ISpatialComponentData, ISnapshottable< public bool IsDataDirty() { var isDataDirty = false; + isDataDirty |= (dirtyBits0 != 0x0); + return isDataDirty; } @@ -41,6 +43,7 @@ component MyComponent In that case, val_a corresponds to propertyIndex 0 and val_b corresponds to propertyIndex 1 in this method. This method throws an InvalidOperationException in case your component doesn't contain properties. */ + public bool IsDataDirty(int propertyIndex) { if (propertyIndex < 0 || propertyIndex >= 5) @@ -226,20 +229,24 @@ public static class Serialization public static void SerializeComponent(global::Improbable.TestSchema.ExhaustiveEntity.Component component, global::Improbable.Worker.CInterop.SchemaObject obj, global::Unity.Entities.World world) { obj.AddEntity(1, component.Field1); + if (component.Field2.HasValue) { obj.AddEntity(2, component.Field2.Value); } + foreach (var value in component.Field3) { obj.AddEntity(3, value); } + foreach (var keyValuePair in component.Field4) { var mapObj = obj.AddObject(4); mapObj.AddEntity(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + foreach (var keyValuePair in component.Field5) { var mapObj = obj.AddObject(5); @@ -251,9 +258,11 @@ public static void SerializeComponent(global::Improbable.TestSchema.ExhaustiveEn public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveEntity.Component component, global::Improbable.Worker.CInterop.SchemaComponentUpdate updateObj) { var obj = updateObj.GetFields(); + if (component.IsDataDirty(0)) { obj.AddEntity(1, component.Field1); + } @@ -263,6 +272,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveEntit { obj.AddEntity(2, component.Field2.Value); } + if (!component.Field2.HasValue) { updateObj.AddClearedField(2); @@ -275,6 +285,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveEntit { obj.AddEntity(3, value); } + if (component.Field3.Count == 0) { updateObj.AddClearedField(3); @@ -289,6 +300,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveEntit mapObj.AddEntity(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + if (component.Field4.Count == 0) { updateObj.AddClearedField(4); @@ -303,79 +315,94 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveEntit mapObj.AddString(1, keyValuePair.Key); mapObj.AddEntity(2, keyValuePair.Value); } + if (component.Field5.Count == 0) { updateObj.AddClearedField(5); } } - } public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveEntity.Update update, global::Improbable.Worker.CInterop.SchemaComponentUpdate updateObj) { var obj = updateObj.GetFields(); + { if (update.Field1.HasValue) { var field = update.Field1.Value; + obj.AddEntity(1, field); + } } + { if (update.Field2.HasValue) { var field = update.Field2.Value; + if (field.HasValue) { obj.AddEntity(2, field.Value); } + if (!field.HasValue) { updateObj.AddClearedField(2); } } } + { if (update.Field3.HasValue) { var field = update.Field3.Value; + foreach (var value in field) { obj.AddEntity(3, value); } + if (field.Count == 0) { updateObj.AddClearedField(3); } } } + { if (update.Field4.HasValue) { var field = update.Field4.Value; + foreach (var keyValuePair in field) { var mapObj = obj.AddObject(4); mapObj.AddEntity(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + if (field.Count == 0) { updateObj.AddClearedField(4); } } } + { if (update.Field5.HasValue) { var field = update.Field5.Value; + foreach (var keyValuePair in field) { var mapObj = obj.AddObject(5); mapObj.AddString(1, keyValuePair.Key); mapObj.AddEntity(2, keyValuePair.Value); } + if (field.Count == 0) { updateObj.AddClearedField(5); @@ -411,7 +438,6 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveEnt mapObj.AddString(1, keyValuePair.Key); mapObj.AddEntity(2, keyValuePair.Value); } - } public static global::Improbable.TestSchema.ExhaustiveEntity.Component Deserialize(global::Improbable.Worker.CInterop.SchemaObject obj, global::Unity.Entities.World world) @@ -419,29 +445,36 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveEnt var component = new global::Improbable.TestSchema.ExhaustiveEntity.Component(); component.field1Handle = global::Improbable.TestSchema.ExhaustiveEntity.ReferenceTypeProviders.Field1Provider.Allocate(world); + component.Field1 = obj.GetEntity(1); + component.field2Handle = global::Improbable.TestSchema.ExhaustiveEntity.ReferenceTypeProviders.Field2Provider.Allocate(world); + if (obj.GetEntityCount(2) == 1) { component.Field2 = new global::Improbable.Gdk.Core.EntitySnapshot?(obj.GetEntity(2)); } + component.field3Handle = global::Improbable.TestSchema.ExhaustiveEntity.ReferenceTypeProviders.Field3Provider.Allocate(world); + { component.Field3 = new global::System.Collections.Generic.List(); var list = component.Field3; var listLength = obj.GetEntityCount(3); - + for (var i = 0; i < listLength; i++) { list.Add(obj.IndexEntity(3, (uint) i)); } } + component.field4Handle = global::Improbable.TestSchema.ExhaustiveEntity.ReferenceTypeProviders.Field4Provider.Allocate(world); + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(4); component.Field4 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(4, (uint) i); @@ -450,12 +483,14 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveEnt map.Add(key, value); } } + component.field5Handle = global::Improbable.TestSchema.ExhaustiveEntity.ReferenceTypeProviders.Field5Provider.Allocate(world); + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(5); component.Field5 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(5, (uint) i); @@ -464,6 +499,7 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveEnt map.Add(key, value); } } + return component; } @@ -476,9 +512,10 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveEnt { update.Field1 = obj.GetEntity(1); } + { var isCleared = updateObj.IsFieldCleared(2); - + if (isCleared) { update.Field2 = new global::Improbable.Gdk.Core.Option(new global::Improbable.Gdk.Core.EntitySnapshot?()); @@ -488,32 +525,34 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveEnt update.Field2 = new global::Improbable.Gdk.Core.Option(obj.GetEntity(2)); } } + { var listSize = obj.GetEntityCount(3); - + var isCleared = updateObj.IsFieldCleared(3); - + if (listSize > 0 || isCleared) { update.Field3 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.List()); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexEntity(3, (uint) i); update.Field3.Value.Add(value); } } + { var mapSize = obj.GetObjectCount(4); - + var isCleared = updateObj.IsFieldCleared(4); - + if (mapSize > 0 || isCleared) { update.Field4 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.Dictionary()); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(4, (uint) i); @@ -522,16 +561,17 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveEnt update.Field4.Value.Add(key, value); } } + { var mapSize = obj.GetObjectCount(5); - + var isCleared = updateObj.IsFieldCleared(5); - + if (mapSize > 0 || isCleared) { update.Field5 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.Dictionary()); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(5, (uint) i); @@ -540,6 +580,7 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveEnt update.Field5.Value.Add(key, value); } } + return update; } @@ -549,25 +590,28 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveEnt var obj = data.GetFields(); update.Field1 = obj.GetEntity(1); + if (obj.GetEntityCount(2) == 1) { update.Field2 = new global::Improbable.Gdk.Core.Option(obj.GetEntity(2)); } + { var listSize = obj.GetEntityCount(3); update.Field3 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.List()); - + for (var i = 0; i < listSize; i++) { var value = obj.IndexEntity(3, (uint) i); update.Field3.Value.Add(value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(4); update.Field4 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(4, (uint) i); @@ -576,11 +620,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveEnt map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(5); update.Field5 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(5, (uint) i); @@ -589,6 +634,7 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveEnt map.Add(key, value); } } + return update; } @@ -597,25 +643,28 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveEnt var component = new global::Improbable.TestSchema.ExhaustiveEntity.Snapshot(); component.Field1 = obj.GetEntity(1); + if (obj.GetEntityCount(2) == 1) { component.Field2 = new global::Improbable.Gdk.Core.EntitySnapshot?(obj.GetEntity(2)); } + { component.Field3 = new global::System.Collections.Generic.List(); var list = component.Field3; var listLength = obj.GetEntityCount(3); - + for (var i = 0; i < listLength; i++) { list.Add(obj.IndexEntity(3, (uint) i)); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(4); component.Field4 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(4, (uint) i); @@ -624,11 +673,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveEnt map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(5); component.Field5 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(5, (uint) i); @@ -637,6 +687,7 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveEnt map.Add(key, value); } } + return component; } @@ -648,9 +699,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen { component.Field1 = obj.GetEntity(1); } + { var isCleared = updateObj.IsFieldCleared(2); - + if (isCleared) { component.Field2 = new global::Improbable.Gdk.Core.EntitySnapshot?(); @@ -661,32 +713,34 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field2 = new global::Improbable.Gdk.Core.EntitySnapshot?(value); } } + { var listSize = obj.GetEntityCount(3); - + var isCleared = updateObj.IsFieldCleared(3); - + if (listSize > 0 || isCleared) { component.Field3.Clear(); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexEntity(3, (uint) i); component.Field3.Add(value); } } + { var mapSize = obj.GetObjectCount(4); - + var isCleared = updateObj.IsFieldCleared(4); - + if (mapSize > 0 || isCleared) { component.Field4.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(4, (uint) i); @@ -695,16 +749,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field4.Add(key, value); } } + { var mapSize = obj.GetObjectCount(5); - + var isCleared = updateObj.IsFieldCleared(5); - + if (mapSize > 0 || isCleared) { component.Field5.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(5, (uint) i); @@ -723,9 +778,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen { snapshot.Field1 = obj.GetEntity(1); } + { var isCleared = updateObj.IsFieldCleared(2); - + if (isCleared) { snapshot.Field2 = new global::Improbable.Gdk.Core.EntitySnapshot?(); @@ -736,32 +792,34 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field2 = new global::Improbable.Gdk.Core.EntitySnapshot?(value); } } + { var listSize = obj.GetEntityCount(3); - + var isCleared = updateObj.IsFieldCleared(3); - + if (listSize > 0 || isCleared) { snapshot.Field3.Clear(); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexEntity(3, (uint) i); snapshot.Field3.Add(value); } } + { var mapSize = obj.GetObjectCount(4); - + var isCleared = updateObj.IsFieldCleared(4); - + if (mapSize > 0 || isCleared) { snapshot.Field4.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(4, (uint) i); @@ -770,16 +828,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field4.Add(key, value); } } + { var mapSize = obj.GetObjectCount(5); - + var isCleared = updateObj.IsFieldCleared(5); - + if (mapSize > 0 || isCleared) { snapshot.Field5.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(5, (uint) i); @@ -843,7 +902,7 @@ private static Update SnapshotToUpdate(in Snapshot snapshot) Field2 = snapshot.Field2, Field3 = snapshot.Field3, Field4 = snapshot.Field4, - Field5 = snapshot.Field5, + Field5 = snapshot.Field5 }; return update; diff --git a/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveEntityComponentReaderWriter.cs b/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveEntityComponentReaderWriter.cs index 76b5a634da..55700ceb00 100644 --- a/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveEntityComponentReaderWriter.cs +++ b/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveEntityComponentReaderWriter.cs @@ -507,7 +507,6 @@ public event Action OnUpdate } } - internal ExhaustiveEntityReader(World world, Entity entity, EntityId entityId) { Entity = entity; @@ -542,7 +541,6 @@ public void RemoveAllCallbacks() updateCallbackToCallbackKey.Clear(); } - if (field1UpdateCallbackToCallbackKey != null) { foreach (var callbackToKey in field1UpdateCallbackToCallbackKey) @@ -634,7 +632,6 @@ public void SendUpdate(ExhaustiveEntity.Update update) EntityManager.SetComponentData(Entity, component); } - public void AcknowledgeAuthorityLoss() { ComponentUpdateSystem.AcknowledgeAuthorityLoss(EntityId, ExhaustiveEntity.ComponentId); diff --git a/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveEntityUpdateSender.cs b/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveEntityUpdateSender.cs index 894c90d6c7..15ad265a94 100644 --- a/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveEntityUpdateSender.cs +++ b/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveEntityUpdateSender.cs @@ -40,14 +40,12 @@ public void SendUpdates( var spatialOSEntityType = system.GetArchetypeChunkComponentType(true); var componentType = system.GetArchetypeChunkComponentType(); - var authorityType = system.GetArchetypeChunkSharedComponentType(); foreach (var chunk in chunkArray) { var entityIdArray = chunk.GetNativeArray(spatialOSEntityType); var componentArray = chunk.GetNativeArray(componentType); - var authorityIndex = chunk.GetSharedComponentIndex(authorityType); if (!entityManager.GetSharedComponentData(authorityIndex).HasAuthority) @@ -58,6 +56,7 @@ public void SendUpdates( for (var i = 0; i < componentArray.Length; i++) { var data = componentArray[i]; + if (data.IsDataDirty()) { Update update = new Update(); diff --git a/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveMapKey.cs b/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveMapKey.cs index 3d35109735..2d7a48af53 100644 --- a/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveMapKey.cs +++ b/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveMapKey.cs @@ -27,9 +27,11 @@ public struct Component : IComponentData, ISpatialComponentData, ISnapshottable< public bool IsDataDirty() { var isDataDirty = false; + isDataDirty |= (dirtyBits0 != 0x0); isDataDirty |= (dirtyBits1 != 0x0); isDataDirty |= (dirtyBits2 != 0x0); + return isDataDirty; } @@ -45,6 +47,7 @@ component MyComponent In that case, val_a corresponds to propertyIndex 0 and val_b corresponds to propertyIndex 1 in this method. This method throws an InvalidOperationException in case your component doesn't contain properties. */ + public bool IsDataDirty(int propertyIndex) { if (propertyIndex < 0 || propertyIndex >= 18) @@ -60,8 +63,10 @@ public bool IsDataDirty(int propertyIndex) { case 0: return (dirtyBits0 & (0x1 << propertyIndex % 8)) != 0x0; + case 1: return (dirtyBits1 & (0x1 << propertyIndex % 8)) != 0x0; + case 2: return (dirtyBits2 & (0x1 << propertyIndex % 8)) != 0x0; } @@ -87,9 +92,11 @@ public void MarkDataDirty(int propertyIndex) case 0: dirtyBits0 |= (byte) (0x1 << propertyIndex % 8); break; + case 1: dirtyBits1 |= (byte) (0x1 << propertyIndex % 8); break; + case 2: dirtyBits2 |= (byte) (0x1 << propertyIndex % 8); break; @@ -429,102 +436,119 @@ public static void SerializeComponent(global::Improbable.TestSchema.ExhaustiveMa mapObj.AddBool(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + foreach (var keyValuePair in component.Field2) { var mapObj = obj.AddObject(2); mapObj.AddFloat(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + foreach (var keyValuePair in component.Field3) { var mapObj = obj.AddObject(3); mapObj.AddBytes(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + foreach (var keyValuePair in component.Field4) { var mapObj = obj.AddObject(4); mapObj.AddInt32(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + foreach (var keyValuePair in component.Field5) { var mapObj = obj.AddObject(5); mapObj.AddInt64(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + foreach (var keyValuePair in component.Field6) { var mapObj = obj.AddObject(6); mapObj.AddDouble(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + foreach (var keyValuePair in component.Field7) { var mapObj = obj.AddObject(7); mapObj.AddString(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + foreach (var keyValuePair in component.Field8) { var mapObj = obj.AddObject(8); mapObj.AddUint32(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + foreach (var keyValuePair in component.Field9) { var mapObj = obj.AddObject(9); mapObj.AddUint64(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + foreach (var keyValuePair in component.Field10) { var mapObj = obj.AddObject(10); mapObj.AddSint32(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + foreach (var keyValuePair in component.Field11) { var mapObj = obj.AddObject(11); mapObj.AddSint64(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + foreach (var keyValuePair in component.Field12) { var mapObj = obj.AddObject(12); mapObj.AddFixed32(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + foreach (var keyValuePair in component.Field13) { var mapObj = obj.AddObject(13); mapObj.AddFixed64(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + foreach (var keyValuePair in component.Field14) { var mapObj = obj.AddObject(14); mapObj.AddSfixed32(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + foreach (var keyValuePair in component.Field15) { var mapObj = obj.AddObject(15); mapObj.AddSfixed64(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + foreach (var keyValuePair in component.Field16) { var mapObj = obj.AddObject(16); mapObj.AddEntityId(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + foreach (var keyValuePair in component.Field17) { var mapObj = obj.AddObject(17); global::Improbable.TestSchema.SomeType.Serialization.Serialize(keyValuePair.Key, mapObj.AddObject(1)); mapObj.AddString(2, keyValuePair.Value); } + foreach (var keyValuePair in component.Field18) { var mapObj = obj.AddObject(18); @@ -536,6 +560,7 @@ public static void SerializeComponent(global::Improbable.TestSchema.ExhaustiveMa public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveMapKey.Component component, global::Improbable.Worker.CInterop.SchemaComponentUpdate updateObj) { var obj = updateObj.GetFields(); + if (component.IsDataDirty(0)) { foreach (var keyValuePair in component.Field1) @@ -544,6 +569,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveMapKe mapObj.AddBool(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + if (component.Field1.Count == 0) { updateObj.AddClearedField(1); @@ -558,6 +584,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveMapKe mapObj.AddFloat(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + if (component.Field2.Count == 0) { updateObj.AddClearedField(2); @@ -572,6 +599,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveMapKe mapObj.AddBytes(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + if (component.Field3.Count == 0) { updateObj.AddClearedField(3); @@ -586,6 +614,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveMapKe mapObj.AddInt32(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + if (component.Field4.Count == 0) { updateObj.AddClearedField(4); @@ -600,6 +629,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveMapKe mapObj.AddInt64(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + if (component.Field5.Count == 0) { updateObj.AddClearedField(5); @@ -614,6 +644,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveMapKe mapObj.AddDouble(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + if (component.Field6.Count == 0) { updateObj.AddClearedField(6); @@ -628,6 +659,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveMapKe mapObj.AddString(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + if (component.Field7.Count == 0) { updateObj.AddClearedField(7); @@ -642,6 +674,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveMapKe mapObj.AddUint32(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + if (component.Field8.Count == 0) { updateObj.AddClearedField(8); @@ -656,6 +689,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveMapKe mapObj.AddUint64(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + if (component.Field9.Count == 0) { updateObj.AddClearedField(9); @@ -670,6 +704,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveMapKe mapObj.AddSint32(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + if (component.Field10.Count == 0) { updateObj.AddClearedField(10); @@ -684,6 +719,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveMapKe mapObj.AddSint64(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + if (component.Field11.Count == 0) { updateObj.AddClearedField(11); @@ -698,6 +734,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveMapKe mapObj.AddFixed32(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + if (component.Field12.Count == 0) { updateObj.AddClearedField(12); @@ -712,6 +749,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveMapKe mapObj.AddFixed64(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + if (component.Field13.Count == 0) { updateObj.AddClearedField(13); @@ -726,6 +764,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveMapKe mapObj.AddSfixed32(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + if (component.Field14.Count == 0) { updateObj.AddClearedField(14); @@ -740,6 +779,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveMapKe mapObj.AddSfixed64(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + if (component.Field15.Count == 0) { updateObj.AddClearedField(15); @@ -754,6 +794,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveMapKe mapObj.AddEntityId(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + if (component.Field16.Count == 0) { updateObj.AddClearedField(16); @@ -768,6 +809,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveMapKe global::Improbable.TestSchema.SomeType.Serialization.Serialize(keyValuePair.Key, mapObj.AddObject(1)); mapObj.AddString(2, keyValuePair.Value); } + if (component.Field17.Count == 0) { updateObj.AddClearedField(17); @@ -782,299 +824,353 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveMapKe mapObj.AddEnum(1, (uint) keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + if (component.Field18.Count == 0) { updateObj.AddClearedField(18); } } - } public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveMapKey.Update update, global::Improbable.Worker.CInterop.SchemaComponentUpdate updateObj) { var obj = updateObj.GetFields(); + { if (update.Field1.HasValue) { var field = update.Field1.Value; + foreach (var keyValuePair in field) { var mapObj = obj.AddObject(1); mapObj.AddBool(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + if (field.Count == 0) { updateObj.AddClearedField(1); } } } + { if (update.Field2.HasValue) { var field = update.Field2.Value; + foreach (var keyValuePair in field) { var mapObj = obj.AddObject(2); mapObj.AddFloat(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + if (field.Count == 0) { updateObj.AddClearedField(2); } } } + { if (update.Field3.HasValue) { var field = update.Field3.Value; + foreach (var keyValuePair in field) { var mapObj = obj.AddObject(3); mapObj.AddBytes(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + if (field.Count == 0) { updateObj.AddClearedField(3); } } } + { if (update.Field4.HasValue) { var field = update.Field4.Value; + foreach (var keyValuePair in field) { var mapObj = obj.AddObject(4); mapObj.AddInt32(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + if (field.Count == 0) { updateObj.AddClearedField(4); } } } + { if (update.Field5.HasValue) { var field = update.Field5.Value; + foreach (var keyValuePair in field) { var mapObj = obj.AddObject(5); mapObj.AddInt64(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + if (field.Count == 0) { updateObj.AddClearedField(5); } } } + { if (update.Field6.HasValue) { var field = update.Field6.Value; + foreach (var keyValuePair in field) { var mapObj = obj.AddObject(6); mapObj.AddDouble(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + if (field.Count == 0) { updateObj.AddClearedField(6); } } } + { if (update.Field7.HasValue) { var field = update.Field7.Value; + foreach (var keyValuePair in field) { var mapObj = obj.AddObject(7); mapObj.AddString(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + if (field.Count == 0) { updateObj.AddClearedField(7); } } } + { if (update.Field8.HasValue) { var field = update.Field8.Value; + foreach (var keyValuePair in field) { var mapObj = obj.AddObject(8); mapObj.AddUint32(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + if (field.Count == 0) { updateObj.AddClearedField(8); } } } + { if (update.Field9.HasValue) { var field = update.Field9.Value; + foreach (var keyValuePair in field) { var mapObj = obj.AddObject(9); mapObj.AddUint64(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + if (field.Count == 0) { updateObj.AddClearedField(9); } } } + { if (update.Field10.HasValue) { var field = update.Field10.Value; + foreach (var keyValuePair in field) { var mapObj = obj.AddObject(10); mapObj.AddSint32(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + if (field.Count == 0) { updateObj.AddClearedField(10); } } } + { if (update.Field11.HasValue) { var field = update.Field11.Value; + foreach (var keyValuePair in field) { var mapObj = obj.AddObject(11); mapObj.AddSint64(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + if (field.Count == 0) { updateObj.AddClearedField(11); } } } + { if (update.Field12.HasValue) { var field = update.Field12.Value; + foreach (var keyValuePair in field) { var mapObj = obj.AddObject(12); mapObj.AddFixed32(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + if (field.Count == 0) { updateObj.AddClearedField(12); } } } + { if (update.Field13.HasValue) { var field = update.Field13.Value; + foreach (var keyValuePair in field) { var mapObj = obj.AddObject(13); mapObj.AddFixed64(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + if (field.Count == 0) { updateObj.AddClearedField(13); } } } + { if (update.Field14.HasValue) { var field = update.Field14.Value; + foreach (var keyValuePair in field) { var mapObj = obj.AddObject(14); mapObj.AddSfixed32(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + if (field.Count == 0) { updateObj.AddClearedField(14); } } } + { if (update.Field15.HasValue) { var field = update.Field15.Value; + foreach (var keyValuePair in field) { var mapObj = obj.AddObject(15); mapObj.AddSfixed64(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + if (field.Count == 0) { updateObj.AddClearedField(15); } } } + { if (update.Field16.HasValue) { var field = update.Field16.Value; + foreach (var keyValuePair in field) { var mapObj = obj.AddObject(16); mapObj.AddEntityId(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + if (field.Count == 0) { updateObj.AddClearedField(16); } } } + { if (update.Field17.HasValue) { var field = update.Field17.Value; + foreach (var keyValuePair in field) { var mapObj = obj.AddObject(17); global::Improbable.TestSchema.SomeType.Serialization.Serialize(keyValuePair.Key, mapObj.AddObject(1)); mapObj.AddString(2, keyValuePair.Value); } + if (field.Count == 0) { updateObj.AddClearedField(17); } } } + { if (update.Field18.HasValue) { var field = update.Field18.Value; + foreach (var keyValuePair in field) { var mapObj = obj.AddObject(18); mapObj.AddEnum(1, (uint) keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + if (field.Count == 0) { updateObj.AddClearedField(18); @@ -1210,7 +1306,6 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap mapObj.AddEnum(1, (uint) keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } - } public static global::Improbable.TestSchema.ExhaustiveMapKey.Component Deserialize(global::Improbable.Worker.CInterop.SchemaObject obj, global::Unity.Entities.World world) @@ -1218,11 +1313,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap var component = new global::Improbable.TestSchema.ExhaustiveMapKey.Component(); component.field1Handle = global::Improbable.TestSchema.ExhaustiveMapKey.ReferenceTypeProviders.Field1Provider.Allocate(world); + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(1); component.Field1 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(1, (uint) i); @@ -1231,12 +1327,14 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + component.field2Handle = global::Improbable.TestSchema.ExhaustiveMapKey.ReferenceTypeProviders.Field2Provider.Allocate(world); + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(2); component.Field2 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(2, (uint) i); @@ -1245,12 +1343,14 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + component.field3Handle = global::Improbable.TestSchema.ExhaustiveMapKey.ReferenceTypeProviders.Field3Provider.Allocate(world); + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(3); component.Field3 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(3, (uint) i); @@ -1259,12 +1359,14 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + component.field4Handle = global::Improbable.TestSchema.ExhaustiveMapKey.ReferenceTypeProviders.Field4Provider.Allocate(world); + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(4); component.Field4 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(4, (uint) i); @@ -1273,12 +1375,14 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + component.field5Handle = global::Improbable.TestSchema.ExhaustiveMapKey.ReferenceTypeProviders.Field5Provider.Allocate(world); + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(5); component.Field5 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(5, (uint) i); @@ -1287,12 +1391,14 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + component.field6Handle = global::Improbable.TestSchema.ExhaustiveMapKey.ReferenceTypeProviders.Field6Provider.Allocate(world); + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(6); component.Field6 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(6, (uint) i); @@ -1301,12 +1407,14 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + component.field7Handle = global::Improbable.TestSchema.ExhaustiveMapKey.ReferenceTypeProviders.Field7Provider.Allocate(world); + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(7); component.Field7 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(7, (uint) i); @@ -1315,12 +1423,14 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + component.field8Handle = global::Improbable.TestSchema.ExhaustiveMapKey.ReferenceTypeProviders.Field8Provider.Allocate(world); + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(8); component.Field8 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(8, (uint) i); @@ -1329,12 +1439,14 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + component.field9Handle = global::Improbable.TestSchema.ExhaustiveMapKey.ReferenceTypeProviders.Field9Provider.Allocate(world); + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(9); component.Field9 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(9, (uint) i); @@ -1343,12 +1455,14 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + component.field10Handle = global::Improbable.TestSchema.ExhaustiveMapKey.ReferenceTypeProviders.Field10Provider.Allocate(world); + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(10); component.Field10 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(10, (uint) i); @@ -1357,12 +1471,14 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + component.field11Handle = global::Improbable.TestSchema.ExhaustiveMapKey.ReferenceTypeProviders.Field11Provider.Allocate(world); + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(11); component.Field11 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(11, (uint) i); @@ -1371,12 +1487,14 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + component.field12Handle = global::Improbable.TestSchema.ExhaustiveMapKey.ReferenceTypeProviders.Field12Provider.Allocate(world); + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(12); component.Field12 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(12, (uint) i); @@ -1385,12 +1503,14 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + component.field13Handle = global::Improbable.TestSchema.ExhaustiveMapKey.ReferenceTypeProviders.Field13Provider.Allocate(world); + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(13); component.Field13 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(13, (uint) i); @@ -1399,12 +1519,14 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + component.field14Handle = global::Improbable.TestSchema.ExhaustiveMapKey.ReferenceTypeProviders.Field14Provider.Allocate(world); + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(14); component.Field14 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(14, (uint) i); @@ -1413,12 +1535,14 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + component.field15Handle = global::Improbable.TestSchema.ExhaustiveMapKey.ReferenceTypeProviders.Field15Provider.Allocate(world); + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(15); component.Field15 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(15, (uint) i); @@ -1427,12 +1551,14 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + component.field16Handle = global::Improbable.TestSchema.ExhaustiveMapKey.ReferenceTypeProviders.Field16Provider.Allocate(world); + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(16); component.Field16 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(16, (uint) i); @@ -1441,12 +1567,14 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + component.field17Handle = global::Improbable.TestSchema.ExhaustiveMapKey.ReferenceTypeProviders.Field17Provider.Allocate(world); + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(17); component.Field17 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(17, (uint) i); @@ -1455,12 +1583,14 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + component.field18Handle = global::Improbable.TestSchema.ExhaustiveMapKey.ReferenceTypeProviders.Field18Provider.Allocate(world); + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(18); component.Field18 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(18, (uint) i); @@ -1469,6 +1599,7 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + return component; } @@ -1479,14 +1610,14 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap { var mapSize = obj.GetObjectCount(1); - + var isCleared = updateObj.IsFieldCleared(1); - + if (mapSize > 0 || isCleared) { update.Field1 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.Dictionary()); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(1, (uint) i); @@ -1495,16 +1626,17 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap update.Field1.Value.Add(key, value); } } + { var mapSize = obj.GetObjectCount(2); - + var isCleared = updateObj.IsFieldCleared(2); - + if (mapSize > 0 || isCleared) { update.Field2 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.Dictionary()); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(2, (uint) i); @@ -1513,16 +1645,17 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap update.Field2.Value.Add(key, value); } } + { var mapSize = obj.GetObjectCount(3); - + var isCleared = updateObj.IsFieldCleared(3); - + if (mapSize > 0 || isCleared) { update.Field3 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.Dictionary()); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(3, (uint) i); @@ -1531,16 +1664,17 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap update.Field3.Value.Add(key, value); } } + { var mapSize = obj.GetObjectCount(4); - + var isCleared = updateObj.IsFieldCleared(4); - + if (mapSize > 0 || isCleared) { update.Field4 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.Dictionary()); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(4, (uint) i); @@ -1549,16 +1683,17 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap update.Field4.Value.Add(key, value); } } + { var mapSize = obj.GetObjectCount(5); - + var isCleared = updateObj.IsFieldCleared(5); - + if (mapSize > 0 || isCleared) { update.Field5 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.Dictionary()); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(5, (uint) i); @@ -1567,16 +1702,17 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap update.Field5.Value.Add(key, value); } } + { var mapSize = obj.GetObjectCount(6); - + var isCleared = updateObj.IsFieldCleared(6); - + if (mapSize > 0 || isCleared) { update.Field6 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.Dictionary()); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(6, (uint) i); @@ -1585,16 +1721,17 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap update.Field6.Value.Add(key, value); } } + { var mapSize = obj.GetObjectCount(7); - + var isCleared = updateObj.IsFieldCleared(7); - + if (mapSize > 0 || isCleared) { update.Field7 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.Dictionary()); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(7, (uint) i); @@ -1603,16 +1740,17 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap update.Field7.Value.Add(key, value); } } + { var mapSize = obj.GetObjectCount(8); - + var isCleared = updateObj.IsFieldCleared(8); - + if (mapSize > 0 || isCleared) { update.Field8 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.Dictionary()); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(8, (uint) i); @@ -1621,16 +1759,17 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap update.Field8.Value.Add(key, value); } } + { var mapSize = obj.GetObjectCount(9); - + var isCleared = updateObj.IsFieldCleared(9); - + if (mapSize > 0 || isCleared) { update.Field9 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.Dictionary()); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(9, (uint) i); @@ -1639,16 +1778,17 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap update.Field9.Value.Add(key, value); } } + { var mapSize = obj.GetObjectCount(10); - + var isCleared = updateObj.IsFieldCleared(10); - + if (mapSize > 0 || isCleared) { update.Field10 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.Dictionary()); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(10, (uint) i); @@ -1657,16 +1797,17 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap update.Field10.Value.Add(key, value); } } + { var mapSize = obj.GetObjectCount(11); - + var isCleared = updateObj.IsFieldCleared(11); - + if (mapSize > 0 || isCleared) { update.Field11 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.Dictionary()); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(11, (uint) i); @@ -1675,16 +1816,17 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap update.Field11.Value.Add(key, value); } } + { var mapSize = obj.GetObjectCount(12); - + var isCleared = updateObj.IsFieldCleared(12); - + if (mapSize > 0 || isCleared) { update.Field12 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.Dictionary()); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(12, (uint) i); @@ -1693,16 +1835,17 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap update.Field12.Value.Add(key, value); } } + { var mapSize = obj.GetObjectCount(13); - + var isCleared = updateObj.IsFieldCleared(13); - + if (mapSize > 0 || isCleared) { update.Field13 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.Dictionary()); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(13, (uint) i); @@ -1711,16 +1854,17 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap update.Field13.Value.Add(key, value); } } + { var mapSize = obj.GetObjectCount(14); - + var isCleared = updateObj.IsFieldCleared(14); - + if (mapSize > 0 || isCleared) { update.Field14 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.Dictionary()); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(14, (uint) i); @@ -1729,16 +1873,17 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap update.Field14.Value.Add(key, value); } } + { var mapSize = obj.GetObjectCount(15); - + var isCleared = updateObj.IsFieldCleared(15); - + if (mapSize > 0 || isCleared) { update.Field15 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.Dictionary()); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(15, (uint) i); @@ -1747,16 +1892,17 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap update.Field15.Value.Add(key, value); } } + { var mapSize = obj.GetObjectCount(16); - + var isCleared = updateObj.IsFieldCleared(16); - + if (mapSize > 0 || isCleared) { update.Field16 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.Dictionary()); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(16, (uint) i); @@ -1765,16 +1911,17 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap update.Field16.Value.Add(key, value); } } + { var mapSize = obj.GetObjectCount(17); - + var isCleared = updateObj.IsFieldCleared(17); - + if (mapSize > 0 || isCleared) { update.Field17 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.Dictionary()); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(17, (uint) i); @@ -1783,16 +1930,17 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap update.Field17.Value.Add(key, value); } } + { var mapSize = obj.GetObjectCount(18); - + var isCleared = updateObj.IsFieldCleared(18); - + if (mapSize > 0 || isCleared) { update.Field18 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.Dictionary()); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(18, (uint) i); @@ -1801,6 +1949,7 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap update.Field18.Value.Add(key, value); } } + return update; } @@ -1813,7 +1962,7 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(1); update.Field1 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(1, (uint) i); @@ -1822,11 +1971,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(2); update.Field2 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(2, (uint) i); @@ -1835,11 +1985,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(3); update.Field3 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(3, (uint) i); @@ -1848,11 +1999,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(4); update.Field4 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(4, (uint) i); @@ -1861,11 +2013,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(5); update.Field5 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(5, (uint) i); @@ -1874,11 +2027,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(6); update.Field6 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(6, (uint) i); @@ -1887,11 +2041,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(7); update.Field7 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(7, (uint) i); @@ -1900,11 +2055,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(8); update.Field8 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(8, (uint) i); @@ -1913,11 +2069,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(9); update.Field9 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(9, (uint) i); @@ -1926,11 +2083,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(10); update.Field10 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(10, (uint) i); @@ -1939,11 +2097,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(11); update.Field11 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(11, (uint) i); @@ -1952,11 +2111,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(12); update.Field12 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(12, (uint) i); @@ -1965,11 +2125,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(13); update.Field13 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(13, (uint) i); @@ -1978,11 +2139,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(14); update.Field14 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(14, (uint) i); @@ -1991,11 +2153,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(15); update.Field15 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(15, (uint) i); @@ -2004,11 +2167,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(16); update.Field16 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(16, (uint) i); @@ -2017,11 +2181,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(17); update.Field17 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(17, (uint) i); @@ -2030,11 +2195,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(18); update.Field18 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(18, (uint) i); @@ -2043,6 +2209,7 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + return update; } @@ -2054,7 +2221,7 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(1); component.Field1 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(1, (uint) i); @@ -2063,11 +2230,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(2); component.Field2 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(2, (uint) i); @@ -2076,11 +2244,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(3); component.Field3 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(3, (uint) i); @@ -2089,11 +2258,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(4); component.Field4 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(4, (uint) i); @@ -2102,11 +2272,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(5); component.Field5 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(5, (uint) i); @@ -2115,11 +2286,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(6); component.Field6 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(6, (uint) i); @@ -2128,11 +2300,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(7); component.Field7 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(7, (uint) i); @@ -2141,11 +2314,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(8); component.Field8 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(8, (uint) i); @@ -2154,11 +2328,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(9); component.Field9 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(9, (uint) i); @@ -2167,11 +2342,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(10); component.Field10 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(10, (uint) i); @@ -2180,11 +2356,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(11); component.Field11 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(11, (uint) i); @@ -2193,11 +2370,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(12); component.Field12 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(12, (uint) i); @@ -2206,11 +2384,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(13); component.Field13 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(13, (uint) i); @@ -2219,11 +2398,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(14); component.Field14 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(14, (uint) i); @@ -2232,11 +2412,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(15); component.Field15 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(15, (uint) i); @@ -2245,11 +2426,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(16); component.Field16 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(16, (uint) i); @@ -2258,11 +2440,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(17); component.Field17 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(17, (uint) i); @@ -2271,11 +2454,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(18); component.Field18 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(18, (uint) i); @@ -2284,6 +2468,7 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + return component; } @@ -2293,14 +2478,14 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen { var mapSize = obj.GetObjectCount(1); - + var isCleared = updateObj.IsFieldCleared(1); - + if (mapSize > 0 || isCleared) { component.Field1.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(1, (uint) i); @@ -2309,16 +2494,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field1.Add(key, value); } } + { var mapSize = obj.GetObjectCount(2); - + var isCleared = updateObj.IsFieldCleared(2); - + if (mapSize > 0 || isCleared) { component.Field2.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(2, (uint) i); @@ -2327,16 +2513,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field2.Add(key, value); } } + { var mapSize = obj.GetObjectCount(3); - + var isCleared = updateObj.IsFieldCleared(3); - + if (mapSize > 0 || isCleared) { component.Field3.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(3, (uint) i); @@ -2345,16 +2532,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field3.Add(key, value); } } + { var mapSize = obj.GetObjectCount(4); - + var isCleared = updateObj.IsFieldCleared(4); - + if (mapSize > 0 || isCleared) { component.Field4.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(4, (uint) i); @@ -2363,16 +2551,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field4.Add(key, value); } } + { var mapSize = obj.GetObjectCount(5); - + var isCleared = updateObj.IsFieldCleared(5); - + if (mapSize > 0 || isCleared) { component.Field5.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(5, (uint) i); @@ -2381,16 +2570,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field5.Add(key, value); } } + { var mapSize = obj.GetObjectCount(6); - + var isCleared = updateObj.IsFieldCleared(6); - + if (mapSize > 0 || isCleared) { component.Field6.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(6, (uint) i); @@ -2399,16 +2589,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field6.Add(key, value); } } + { var mapSize = obj.GetObjectCount(7); - + var isCleared = updateObj.IsFieldCleared(7); - + if (mapSize > 0 || isCleared) { component.Field7.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(7, (uint) i); @@ -2417,16 +2608,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field7.Add(key, value); } } + { var mapSize = obj.GetObjectCount(8); - + var isCleared = updateObj.IsFieldCleared(8); - + if (mapSize > 0 || isCleared) { component.Field8.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(8, (uint) i); @@ -2435,16 +2627,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field8.Add(key, value); } } + { var mapSize = obj.GetObjectCount(9); - + var isCleared = updateObj.IsFieldCleared(9); - + if (mapSize > 0 || isCleared) { component.Field9.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(9, (uint) i); @@ -2453,16 +2646,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field9.Add(key, value); } } + { var mapSize = obj.GetObjectCount(10); - + var isCleared = updateObj.IsFieldCleared(10); - + if (mapSize > 0 || isCleared) { component.Field10.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(10, (uint) i); @@ -2471,16 +2665,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field10.Add(key, value); } } + { var mapSize = obj.GetObjectCount(11); - + var isCleared = updateObj.IsFieldCleared(11); - + if (mapSize > 0 || isCleared) { component.Field11.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(11, (uint) i); @@ -2489,16 +2684,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field11.Add(key, value); } } + { var mapSize = obj.GetObjectCount(12); - + var isCleared = updateObj.IsFieldCleared(12); - + if (mapSize > 0 || isCleared) { component.Field12.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(12, (uint) i); @@ -2507,16 +2703,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field12.Add(key, value); } } + { var mapSize = obj.GetObjectCount(13); - + var isCleared = updateObj.IsFieldCleared(13); - + if (mapSize > 0 || isCleared) { component.Field13.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(13, (uint) i); @@ -2525,16 +2722,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field13.Add(key, value); } } + { var mapSize = obj.GetObjectCount(14); - + var isCleared = updateObj.IsFieldCleared(14); - + if (mapSize > 0 || isCleared) { component.Field14.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(14, (uint) i); @@ -2543,16 +2741,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field14.Add(key, value); } } + { var mapSize = obj.GetObjectCount(15); - + var isCleared = updateObj.IsFieldCleared(15); - + if (mapSize > 0 || isCleared) { component.Field15.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(15, (uint) i); @@ -2561,16 +2760,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field15.Add(key, value); } } + { var mapSize = obj.GetObjectCount(16); - + var isCleared = updateObj.IsFieldCleared(16); - + if (mapSize > 0 || isCleared) { component.Field16.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(16, (uint) i); @@ -2579,16 +2779,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field16.Add(key, value); } } + { var mapSize = obj.GetObjectCount(17); - + var isCleared = updateObj.IsFieldCleared(17); - + if (mapSize > 0 || isCleared) { component.Field17.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(17, (uint) i); @@ -2597,16 +2798,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field17.Add(key, value); } } + { var mapSize = obj.GetObjectCount(18); - + var isCleared = updateObj.IsFieldCleared(18); - + if (mapSize > 0 || isCleared) { component.Field18.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(18, (uint) i); @@ -2623,14 +2825,14 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen { var mapSize = obj.GetObjectCount(1); - + var isCleared = updateObj.IsFieldCleared(1); - + if (mapSize > 0 || isCleared) { snapshot.Field1.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(1, (uint) i); @@ -2639,16 +2841,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field1.Add(key, value); } } + { var mapSize = obj.GetObjectCount(2); - + var isCleared = updateObj.IsFieldCleared(2); - + if (mapSize > 0 || isCleared) { snapshot.Field2.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(2, (uint) i); @@ -2657,16 +2860,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field2.Add(key, value); } } + { var mapSize = obj.GetObjectCount(3); - + var isCleared = updateObj.IsFieldCleared(3); - + if (mapSize > 0 || isCleared) { snapshot.Field3.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(3, (uint) i); @@ -2675,16 +2879,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field3.Add(key, value); } } + { var mapSize = obj.GetObjectCount(4); - + var isCleared = updateObj.IsFieldCleared(4); - + if (mapSize > 0 || isCleared) { snapshot.Field4.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(4, (uint) i); @@ -2693,16 +2898,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field4.Add(key, value); } } + { var mapSize = obj.GetObjectCount(5); - + var isCleared = updateObj.IsFieldCleared(5); - + if (mapSize > 0 || isCleared) { snapshot.Field5.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(5, (uint) i); @@ -2711,16 +2917,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field5.Add(key, value); } } + { var mapSize = obj.GetObjectCount(6); - + var isCleared = updateObj.IsFieldCleared(6); - + if (mapSize > 0 || isCleared) { snapshot.Field6.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(6, (uint) i); @@ -2729,16 +2936,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field6.Add(key, value); } } + { var mapSize = obj.GetObjectCount(7); - + var isCleared = updateObj.IsFieldCleared(7); - + if (mapSize > 0 || isCleared) { snapshot.Field7.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(7, (uint) i); @@ -2747,16 +2955,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field7.Add(key, value); } } + { var mapSize = obj.GetObjectCount(8); - + var isCleared = updateObj.IsFieldCleared(8); - + if (mapSize > 0 || isCleared) { snapshot.Field8.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(8, (uint) i); @@ -2765,16 +2974,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field8.Add(key, value); } } + { var mapSize = obj.GetObjectCount(9); - + var isCleared = updateObj.IsFieldCleared(9); - + if (mapSize > 0 || isCleared) { snapshot.Field9.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(9, (uint) i); @@ -2783,16 +2993,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field9.Add(key, value); } } + { var mapSize = obj.GetObjectCount(10); - + var isCleared = updateObj.IsFieldCleared(10); - + if (mapSize > 0 || isCleared) { snapshot.Field10.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(10, (uint) i); @@ -2801,16 +3012,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field10.Add(key, value); } } + { var mapSize = obj.GetObjectCount(11); - + var isCleared = updateObj.IsFieldCleared(11); - + if (mapSize > 0 || isCleared) { snapshot.Field11.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(11, (uint) i); @@ -2819,16 +3031,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field11.Add(key, value); } } + { var mapSize = obj.GetObjectCount(12); - + var isCleared = updateObj.IsFieldCleared(12); - + if (mapSize > 0 || isCleared) { snapshot.Field12.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(12, (uint) i); @@ -2837,16 +3050,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field12.Add(key, value); } } + { var mapSize = obj.GetObjectCount(13); - + var isCleared = updateObj.IsFieldCleared(13); - + if (mapSize > 0 || isCleared) { snapshot.Field13.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(13, (uint) i); @@ -2855,16 +3069,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field13.Add(key, value); } } + { var mapSize = obj.GetObjectCount(14); - + var isCleared = updateObj.IsFieldCleared(14); - + if (mapSize > 0 || isCleared) { snapshot.Field14.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(14, (uint) i); @@ -2873,16 +3088,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field14.Add(key, value); } } + { var mapSize = obj.GetObjectCount(15); - + var isCleared = updateObj.IsFieldCleared(15); - + if (mapSize > 0 || isCleared) { snapshot.Field15.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(15, (uint) i); @@ -2891,16 +3107,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field15.Add(key, value); } } + { var mapSize = obj.GetObjectCount(16); - + var isCleared = updateObj.IsFieldCleared(16); - + if (mapSize > 0 || isCleared) { snapshot.Field16.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(16, (uint) i); @@ -2909,16 +3126,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field16.Add(key, value); } } + { var mapSize = obj.GetObjectCount(17); - + var isCleared = updateObj.IsFieldCleared(17); - + if (mapSize > 0 || isCleared) { snapshot.Field17.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(17, (uint) i); @@ -2927,16 +3145,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field17.Add(key, value); } } + { var mapSize = obj.GetObjectCount(18); - + var isCleared = updateObj.IsFieldCleared(18); - + if (mapSize > 0 || isCleared) { snapshot.Field18.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(18, (uint) i); @@ -3026,7 +3245,7 @@ private static Update SnapshotToUpdate(in Snapshot snapshot) Field15 = snapshot.Field15, Field16 = snapshot.Field16, Field17 = snapshot.Field17, - Field18 = snapshot.Field18, + Field18 = snapshot.Field18 }; return update; diff --git a/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveMapKeyComponentReaderWriter.cs b/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveMapKeyComponentReaderWriter.cs index 084d6643db..453dca7111 100644 --- a/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveMapKeyComponentReaderWriter.cs +++ b/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveMapKeyComponentReaderWriter.cs @@ -910,7 +910,6 @@ public event Action OnUpdate } } - internal ExhaustiveMapKeyReader(World world, Entity entity, EntityId entityId) { Entity = entity; @@ -945,7 +944,6 @@ public void RemoveAllCallbacks() updateCallbackToCallbackKey.Clear(); } - if (field1UpdateCallbackToCallbackKey != null) { foreach (var callbackToKey in field1UpdateCallbackToCallbackKey) @@ -1232,7 +1230,6 @@ public void SendUpdate(ExhaustiveMapKey.Update update) EntityManager.SetComponentData(Entity, component); } - public void AcknowledgeAuthorityLoss() { ComponentUpdateSystem.AcknowledgeAuthorityLoss(EntityId, ExhaustiveMapKey.ComponentId); diff --git a/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveMapKeyUpdateSender.cs b/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveMapKeyUpdateSender.cs index 5f44e5dce9..553d9494c8 100644 --- a/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveMapKeyUpdateSender.cs +++ b/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveMapKeyUpdateSender.cs @@ -40,14 +40,12 @@ public void SendUpdates( var spatialOSEntityType = system.GetArchetypeChunkComponentType(true); var componentType = system.GetArchetypeChunkComponentType(); - var authorityType = system.GetArchetypeChunkSharedComponentType(); foreach (var chunk in chunkArray) { var entityIdArray = chunk.GetNativeArray(spatialOSEntityType); var componentArray = chunk.GetNativeArray(componentType); - var authorityIndex = chunk.GetSharedComponentIndex(authorityType); if (!entityManager.GetSharedComponentData(authorityIndex).HasAuthority) @@ -58,6 +56,7 @@ public void SendUpdates( for (var i = 0; i < componentArray.Length; i++) { var data = componentArray[i]; + if (data.IsDataDirty()) { Update update = new Update(); diff --git a/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveMapValue.cs b/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveMapValue.cs index 48847f532a..0adb47e656 100644 --- a/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveMapValue.cs +++ b/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveMapValue.cs @@ -27,9 +27,11 @@ public struct Component : IComponentData, ISpatialComponentData, ISnapshottable< public bool IsDataDirty() { var isDataDirty = false; + isDataDirty |= (dirtyBits0 != 0x0); isDataDirty |= (dirtyBits1 != 0x0); isDataDirty |= (dirtyBits2 != 0x0); + return isDataDirty; } @@ -45,6 +47,7 @@ component MyComponent In that case, val_a corresponds to propertyIndex 0 and val_b corresponds to propertyIndex 1 in this method. This method throws an InvalidOperationException in case your component doesn't contain properties. */ + public bool IsDataDirty(int propertyIndex) { if (propertyIndex < 0 || propertyIndex >= 18) @@ -60,8 +63,10 @@ public bool IsDataDirty(int propertyIndex) { case 0: return (dirtyBits0 & (0x1 << propertyIndex % 8)) != 0x0; + case 1: return (dirtyBits1 & (0x1 << propertyIndex % 8)) != 0x0; + case 2: return (dirtyBits2 & (0x1 << propertyIndex % 8)) != 0x0; } @@ -87,9 +92,11 @@ public void MarkDataDirty(int propertyIndex) case 0: dirtyBits0 |= (byte) (0x1 << propertyIndex % 8); break; + case 1: dirtyBits1 |= (byte) (0x1 << propertyIndex % 8); break; + case 2: dirtyBits2 |= (byte) (0x1 << propertyIndex % 8); break; @@ -429,102 +436,119 @@ public static void SerializeComponent(global::Improbable.TestSchema.ExhaustiveMa mapObj.AddString(1, keyValuePair.Key); mapObj.AddBool(2, keyValuePair.Value); } + foreach (var keyValuePair in component.Field2) { var mapObj = obj.AddObject(2); mapObj.AddString(1, keyValuePair.Key); mapObj.AddFloat(2, keyValuePair.Value); } + foreach (var keyValuePair in component.Field3) { var mapObj = obj.AddObject(3); mapObj.AddString(1, keyValuePair.Key); mapObj.AddBytes(2, keyValuePair.Value); } + foreach (var keyValuePair in component.Field4) { var mapObj = obj.AddObject(4); mapObj.AddString(1, keyValuePair.Key); mapObj.AddInt32(2, keyValuePair.Value); } + foreach (var keyValuePair in component.Field5) { var mapObj = obj.AddObject(5); mapObj.AddString(1, keyValuePair.Key); mapObj.AddInt64(2, keyValuePair.Value); } + foreach (var keyValuePair in component.Field6) { var mapObj = obj.AddObject(6); mapObj.AddString(1, keyValuePair.Key); mapObj.AddDouble(2, keyValuePair.Value); } + foreach (var keyValuePair in component.Field7) { var mapObj = obj.AddObject(7); mapObj.AddString(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + foreach (var keyValuePair in component.Field8) { var mapObj = obj.AddObject(8); mapObj.AddString(1, keyValuePair.Key); mapObj.AddUint32(2, keyValuePair.Value); } + foreach (var keyValuePair in component.Field9) { var mapObj = obj.AddObject(9); mapObj.AddString(1, keyValuePair.Key); mapObj.AddUint64(2, keyValuePair.Value); } + foreach (var keyValuePair in component.Field10) { var mapObj = obj.AddObject(10); mapObj.AddString(1, keyValuePair.Key); mapObj.AddSint32(2, keyValuePair.Value); } + foreach (var keyValuePair in component.Field11) { var mapObj = obj.AddObject(11); mapObj.AddString(1, keyValuePair.Key); mapObj.AddSint64(2, keyValuePair.Value); } + foreach (var keyValuePair in component.Field12) { var mapObj = obj.AddObject(12); mapObj.AddString(1, keyValuePair.Key); mapObj.AddFixed32(2, keyValuePair.Value); } + foreach (var keyValuePair in component.Field13) { var mapObj = obj.AddObject(13); mapObj.AddString(1, keyValuePair.Key); mapObj.AddFixed64(2, keyValuePair.Value); } + foreach (var keyValuePair in component.Field14) { var mapObj = obj.AddObject(14); mapObj.AddString(1, keyValuePair.Key); mapObj.AddSfixed32(2, keyValuePair.Value); } + foreach (var keyValuePair in component.Field15) { var mapObj = obj.AddObject(15); mapObj.AddString(1, keyValuePair.Key); mapObj.AddSfixed64(2, keyValuePair.Value); } + foreach (var keyValuePair in component.Field16) { var mapObj = obj.AddObject(16); mapObj.AddString(1, keyValuePair.Key); mapObj.AddEntityId(2, keyValuePair.Value); } + foreach (var keyValuePair in component.Field17) { var mapObj = obj.AddObject(17); mapObj.AddString(1, keyValuePair.Key); global::Improbable.TestSchema.SomeType.Serialization.Serialize(keyValuePair.Value, mapObj.AddObject(2)); } + foreach (var keyValuePair in component.Field18) { var mapObj = obj.AddObject(18); @@ -536,6 +560,7 @@ public static void SerializeComponent(global::Improbable.TestSchema.ExhaustiveMa public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveMapValue.Component component, global::Improbable.Worker.CInterop.SchemaComponentUpdate updateObj) { var obj = updateObj.GetFields(); + if (component.IsDataDirty(0)) { foreach (var keyValuePair in component.Field1) @@ -544,6 +569,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveMapVa mapObj.AddString(1, keyValuePair.Key); mapObj.AddBool(2, keyValuePair.Value); } + if (component.Field1.Count == 0) { updateObj.AddClearedField(1); @@ -558,6 +584,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveMapVa mapObj.AddString(1, keyValuePair.Key); mapObj.AddFloat(2, keyValuePair.Value); } + if (component.Field2.Count == 0) { updateObj.AddClearedField(2); @@ -572,6 +599,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveMapVa mapObj.AddString(1, keyValuePair.Key); mapObj.AddBytes(2, keyValuePair.Value); } + if (component.Field3.Count == 0) { updateObj.AddClearedField(3); @@ -586,6 +614,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveMapVa mapObj.AddString(1, keyValuePair.Key); mapObj.AddInt32(2, keyValuePair.Value); } + if (component.Field4.Count == 0) { updateObj.AddClearedField(4); @@ -600,6 +629,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveMapVa mapObj.AddString(1, keyValuePair.Key); mapObj.AddInt64(2, keyValuePair.Value); } + if (component.Field5.Count == 0) { updateObj.AddClearedField(5); @@ -614,6 +644,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveMapVa mapObj.AddString(1, keyValuePair.Key); mapObj.AddDouble(2, keyValuePair.Value); } + if (component.Field6.Count == 0) { updateObj.AddClearedField(6); @@ -628,6 +659,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveMapVa mapObj.AddString(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + if (component.Field7.Count == 0) { updateObj.AddClearedField(7); @@ -642,6 +674,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveMapVa mapObj.AddString(1, keyValuePair.Key); mapObj.AddUint32(2, keyValuePair.Value); } + if (component.Field8.Count == 0) { updateObj.AddClearedField(8); @@ -656,6 +689,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveMapVa mapObj.AddString(1, keyValuePair.Key); mapObj.AddUint64(2, keyValuePair.Value); } + if (component.Field9.Count == 0) { updateObj.AddClearedField(9); @@ -670,6 +704,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveMapVa mapObj.AddString(1, keyValuePair.Key); mapObj.AddSint32(2, keyValuePair.Value); } + if (component.Field10.Count == 0) { updateObj.AddClearedField(10); @@ -684,6 +719,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveMapVa mapObj.AddString(1, keyValuePair.Key); mapObj.AddSint64(2, keyValuePair.Value); } + if (component.Field11.Count == 0) { updateObj.AddClearedField(11); @@ -698,6 +734,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveMapVa mapObj.AddString(1, keyValuePair.Key); mapObj.AddFixed32(2, keyValuePair.Value); } + if (component.Field12.Count == 0) { updateObj.AddClearedField(12); @@ -712,6 +749,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveMapVa mapObj.AddString(1, keyValuePair.Key); mapObj.AddFixed64(2, keyValuePair.Value); } + if (component.Field13.Count == 0) { updateObj.AddClearedField(13); @@ -726,6 +764,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveMapVa mapObj.AddString(1, keyValuePair.Key); mapObj.AddSfixed32(2, keyValuePair.Value); } + if (component.Field14.Count == 0) { updateObj.AddClearedField(14); @@ -740,6 +779,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveMapVa mapObj.AddString(1, keyValuePair.Key); mapObj.AddSfixed64(2, keyValuePair.Value); } + if (component.Field15.Count == 0) { updateObj.AddClearedField(15); @@ -754,6 +794,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveMapVa mapObj.AddString(1, keyValuePair.Key); mapObj.AddEntityId(2, keyValuePair.Value); } + if (component.Field16.Count == 0) { updateObj.AddClearedField(16); @@ -768,6 +809,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveMapVa mapObj.AddString(1, keyValuePair.Key); global::Improbable.TestSchema.SomeType.Serialization.Serialize(keyValuePair.Value, mapObj.AddObject(2)); } + if (component.Field17.Count == 0) { updateObj.AddClearedField(17); @@ -782,299 +824,353 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveMapVa mapObj.AddString(1, keyValuePair.Key); mapObj.AddEnum(2, (uint) keyValuePair.Value); } + if (component.Field18.Count == 0) { updateObj.AddClearedField(18); } } - } public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveMapValue.Update update, global::Improbable.Worker.CInterop.SchemaComponentUpdate updateObj) { var obj = updateObj.GetFields(); + { if (update.Field1.HasValue) { var field = update.Field1.Value; + foreach (var keyValuePair in field) { var mapObj = obj.AddObject(1); mapObj.AddString(1, keyValuePair.Key); mapObj.AddBool(2, keyValuePair.Value); } + if (field.Count == 0) { updateObj.AddClearedField(1); } } } + { if (update.Field2.HasValue) { var field = update.Field2.Value; + foreach (var keyValuePair in field) { var mapObj = obj.AddObject(2); mapObj.AddString(1, keyValuePair.Key); mapObj.AddFloat(2, keyValuePair.Value); } + if (field.Count == 0) { updateObj.AddClearedField(2); } } } + { if (update.Field3.HasValue) { var field = update.Field3.Value; + foreach (var keyValuePair in field) { var mapObj = obj.AddObject(3); mapObj.AddString(1, keyValuePair.Key); mapObj.AddBytes(2, keyValuePair.Value); } + if (field.Count == 0) { updateObj.AddClearedField(3); } } } + { if (update.Field4.HasValue) { var field = update.Field4.Value; + foreach (var keyValuePair in field) { var mapObj = obj.AddObject(4); mapObj.AddString(1, keyValuePair.Key); mapObj.AddInt32(2, keyValuePair.Value); } + if (field.Count == 0) { updateObj.AddClearedField(4); } } } + { if (update.Field5.HasValue) { var field = update.Field5.Value; + foreach (var keyValuePair in field) { var mapObj = obj.AddObject(5); mapObj.AddString(1, keyValuePair.Key); mapObj.AddInt64(2, keyValuePair.Value); } + if (field.Count == 0) { updateObj.AddClearedField(5); } } } + { if (update.Field6.HasValue) { var field = update.Field6.Value; + foreach (var keyValuePair in field) { var mapObj = obj.AddObject(6); mapObj.AddString(1, keyValuePair.Key); mapObj.AddDouble(2, keyValuePair.Value); } + if (field.Count == 0) { updateObj.AddClearedField(6); } } } + { if (update.Field7.HasValue) { var field = update.Field7.Value; + foreach (var keyValuePair in field) { var mapObj = obj.AddObject(7); mapObj.AddString(1, keyValuePair.Key); mapObj.AddString(2, keyValuePair.Value); } + if (field.Count == 0) { updateObj.AddClearedField(7); } } } + { if (update.Field8.HasValue) { var field = update.Field8.Value; + foreach (var keyValuePair in field) { var mapObj = obj.AddObject(8); mapObj.AddString(1, keyValuePair.Key); mapObj.AddUint32(2, keyValuePair.Value); } + if (field.Count == 0) { updateObj.AddClearedField(8); } } } + { if (update.Field9.HasValue) { var field = update.Field9.Value; + foreach (var keyValuePair in field) { var mapObj = obj.AddObject(9); mapObj.AddString(1, keyValuePair.Key); mapObj.AddUint64(2, keyValuePair.Value); } + if (field.Count == 0) { updateObj.AddClearedField(9); } } } + { if (update.Field10.HasValue) { var field = update.Field10.Value; + foreach (var keyValuePair in field) { var mapObj = obj.AddObject(10); mapObj.AddString(1, keyValuePair.Key); mapObj.AddSint32(2, keyValuePair.Value); } + if (field.Count == 0) { updateObj.AddClearedField(10); } } } + { if (update.Field11.HasValue) { var field = update.Field11.Value; + foreach (var keyValuePair in field) { var mapObj = obj.AddObject(11); mapObj.AddString(1, keyValuePair.Key); mapObj.AddSint64(2, keyValuePair.Value); } + if (field.Count == 0) { updateObj.AddClearedField(11); } } } + { if (update.Field12.HasValue) { var field = update.Field12.Value; + foreach (var keyValuePair in field) { var mapObj = obj.AddObject(12); mapObj.AddString(1, keyValuePair.Key); mapObj.AddFixed32(2, keyValuePair.Value); } + if (field.Count == 0) { updateObj.AddClearedField(12); } } } + { if (update.Field13.HasValue) { var field = update.Field13.Value; + foreach (var keyValuePair in field) { var mapObj = obj.AddObject(13); mapObj.AddString(1, keyValuePair.Key); mapObj.AddFixed64(2, keyValuePair.Value); } + if (field.Count == 0) { updateObj.AddClearedField(13); } } } + { if (update.Field14.HasValue) { var field = update.Field14.Value; + foreach (var keyValuePair in field) { var mapObj = obj.AddObject(14); mapObj.AddString(1, keyValuePair.Key); mapObj.AddSfixed32(2, keyValuePair.Value); } + if (field.Count == 0) { updateObj.AddClearedField(14); } } } + { if (update.Field15.HasValue) { var field = update.Field15.Value; + foreach (var keyValuePair in field) { var mapObj = obj.AddObject(15); mapObj.AddString(1, keyValuePair.Key); mapObj.AddSfixed64(2, keyValuePair.Value); } + if (field.Count == 0) { updateObj.AddClearedField(15); } } } + { if (update.Field16.HasValue) { var field = update.Field16.Value; + foreach (var keyValuePair in field) { var mapObj = obj.AddObject(16); mapObj.AddString(1, keyValuePair.Key); mapObj.AddEntityId(2, keyValuePair.Value); } + if (field.Count == 0) { updateObj.AddClearedField(16); } } } + { if (update.Field17.HasValue) { var field = update.Field17.Value; + foreach (var keyValuePair in field) { var mapObj = obj.AddObject(17); mapObj.AddString(1, keyValuePair.Key); global::Improbable.TestSchema.SomeType.Serialization.Serialize(keyValuePair.Value, mapObj.AddObject(2)); } + if (field.Count == 0) { updateObj.AddClearedField(17); } } } + { if (update.Field18.HasValue) { var field = update.Field18.Value; + foreach (var keyValuePair in field) { var mapObj = obj.AddObject(18); mapObj.AddString(1, keyValuePair.Key); mapObj.AddEnum(2, (uint) keyValuePair.Value); } + if (field.Count == 0) { updateObj.AddClearedField(18); @@ -1210,7 +1306,6 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap mapObj.AddString(1, keyValuePair.Key); mapObj.AddEnum(2, (uint) keyValuePair.Value); } - } public static global::Improbable.TestSchema.ExhaustiveMapValue.Component Deserialize(global::Improbable.Worker.CInterop.SchemaObject obj, global::Unity.Entities.World world) @@ -1218,11 +1313,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap var component = new global::Improbable.TestSchema.ExhaustiveMapValue.Component(); component.field1Handle = global::Improbable.TestSchema.ExhaustiveMapValue.ReferenceTypeProviders.Field1Provider.Allocate(world); + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(1); component.Field1 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(1, (uint) i); @@ -1231,12 +1327,14 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + component.field2Handle = global::Improbable.TestSchema.ExhaustiveMapValue.ReferenceTypeProviders.Field2Provider.Allocate(world); + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(2); component.Field2 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(2, (uint) i); @@ -1245,12 +1343,14 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + component.field3Handle = global::Improbable.TestSchema.ExhaustiveMapValue.ReferenceTypeProviders.Field3Provider.Allocate(world); + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(3); component.Field3 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(3, (uint) i); @@ -1259,12 +1359,14 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + component.field4Handle = global::Improbable.TestSchema.ExhaustiveMapValue.ReferenceTypeProviders.Field4Provider.Allocate(world); + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(4); component.Field4 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(4, (uint) i); @@ -1273,12 +1375,14 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + component.field5Handle = global::Improbable.TestSchema.ExhaustiveMapValue.ReferenceTypeProviders.Field5Provider.Allocate(world); + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(5); component.Field5 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(5, (uint) i); @@ -1287,12 +1391,14 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + component.field6Handle = global::Improbable.TestSchema.ExhaustiveMapValue.ReferenceTypeProviders.Field6Provider.Allocate(world); + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(6); component.Field6 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(6, (uint) i); @@ -1301,12 +1407,14 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + component.field7Handle = global::Improbable.TestSchema.ExhaustiveMapValue.ReferenceTypeProviders.Field7Provider.Allocate(world); + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(7); component.Field7 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(7, (uint) i); @@ -1315,12 +1423,14 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + component.field8Handle = global::Improbable.TestSchema.ExhaustiveMapValue.ReferenceTypeProviders.Field8Provider.Allocate(world); + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(8); component.Field8 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(8, (uint) i); @@ -1329,12 +1439,14 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + component.field9Handle = global::Improbable.TestSchema.ExhaustiveMapValue.ReferenceTypeProviders.Field9Provider.Allocate(world); + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(9); component.Field9 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(9, (uint) i); @@ -1343,12 +1455,14 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + component.field10Handle = global::Improbable.TestSchema.ExhaustiveMapValue.ReferenceTypeProviders.Field10Provider.Allocate(world); + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(10); component.Field10 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(10, (uint) i); @@ -1357,12 +1471,14 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + component.field11Handle = global::Improbable.TestSchema.ExhaustiveMapValue.ReferenceTypeProviders.Field11Provider.Allocate(world); + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(11); component.Field11 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(11, (uint) i); @@ -1371,12 +1487,14 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + component.field12Handle = global::Improbable.TestSchema.ExhaustiveMapValue.ReferenceTypeProviders.Field12Provider.Allocate(world); + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(12); component.Field12 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(12, (uint) i); @@ -1385,12 +1503,14 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + component.field13Handle = global::Improbable.TestSchema.ExhaustiveMapValue.ReferenceTypeProviders.Field13Provider.Allocate(world); + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(13); component.Field13 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(13, (uint) i); @@ -1399,12 +1519,14 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + component.field14Handle = global::Improbable.TestSchema.ExhaustiveMapValue.ReferenceTypeProviders.Field14Provider.Allocate(world); + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(14); component.Field14 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(14, (uint) i); @@ -1413,12 +1535,14 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + component.field15Handle = global::Improbable.TestSchema.ExhaustiveMapValue.ReferenceTypeProviders.Field15Provider.Allocate(world); + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(15); component.Field15 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(15, (uint) i); @@ -1427,12 +1551,14 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + component.field16Handle = global::Improbable.TestSchema.ExhaustiveMapValue.ReferenceTypeProviders.Field16Provider.Allocate(world); + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(16); component.Field16 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(16, (uint) i); @@ -1441,12 +1567,14 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + component.field17Handle = global::Improbable.TestSchema.ExhaustiveMapValue.ReferenceTypeProviders.Field17Provider.Allocate(world); + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(17); component.Field17 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(17, (uint) i); @@ -1455,12 +1583,14 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + component.field18Handle = global::Improbable.TestSchema.ExhaustiveMapValue.ReferenceTypeProviders.Field18Provider.Allocate(world); + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(18); component.Field18 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(18, (uint) i); @@ -1469,6 +1599,7 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + return component; } @@ -1479,14 +1610,14 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap { var mapSize = obj.GetObjectCount(1); - + var isCleared = updateObj.IsFieldCleared(1); - + if (mapSize > 0 || isCleared) { update.Field1 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.Dictionary()); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(1, (uint) i); @@ -1495,16 +1626,17 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap update.Field1.Value.Add(key, value); } } + { var mapSize = obj.GetObjectCount(2); - + var isCleared = updateObj.IsFieldCleared(2); - + if (mapSize > 0 || isCleared) { update.Field2 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.Dictionary()); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(2, (uint) i); @@ -1513,16 +1645,17 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap update.Field2.Value.Add(key, value); } } + { var mapSize = obj.GetObjectCount(3); - + var isCleared = updateObj.IsFieldCleared(3); - + if (mapSize > 0 || isCleared) { update.Field3 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.Dictionary()); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(3, (uint) i); @@ -1531,16 +1664,17 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap update.Field3.Value.Add(key, value); } } + { var mapSize = obj.GetObjectCount(4); - + var isCleared = updateObj.IsFieldCleared(4); - + if (mapSize > 0 || isCleared) { update.Field4 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.Dictionary()); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(4, (uint) i); @@ -1549,16 +1683,17 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap update.Field4.Value.Add(key, value); } } + { var mapSize = obj.GetObjectCount(5); - + var isCleared = updateObj.IsFieldCleared(5); - + if (mapSize > 0 || isCleared) { update.Field5 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.Dictionary()); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(5, (uint) i); @@ -1567,16 +1702,17 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap update.Field5.Value.Add(key, value); } } + { var mapSize = obj.GetObjectCount(6); - + var isCleared = updateObj.IsFieldCleared(6); - + if (mapSize > 0 || isCleared) { update.Field6 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.Dictionary()); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(6, (uint) i); @@ -1585,16 +1721,17 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap update.Field6.Value.Add(key, value); } } + { var mapSize = obj.GetObjectCount(7); - + var isCleared = updateObj.IsFieldCleared(7); - + if (mapSize > 0 || isCleared) { update.Field7 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.Dictionary()); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(7, (uint) i); @@ -1603,16 +1740,17 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap update.Field7.Value.Add(key, value); } } + { var mapSize = obj.GetObjectCount(8); - + var isCleared = updateObj.IsFieldCleared(8); - + if (mapSize > 0 || isCleared) { update.Field8 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.Dictionary()); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(8, (uint) i); @@ -1621,16 +1759,17 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap update.Field8.Value.Add(key, value); } } + { var mapSize = obj.GetObjectCount(9); - + var isCleared = updateObj.IsFieldCleared(9); - + if (mapSize > 0 || isCleared) { update.Field9 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.Dictionary()); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(9, (uint) i); @@ -1639,16 +1778,17 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap update.Field9.Value.Add(key, value); } } + { var mapSize = obj.GetObjectCount(10); - + var isCleared = updateObj.IsFieldCleared(10); - + if (mapSize > 0 || isCleared) { update.Field10 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.Dictionary()); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(10, (uint) i); @@ -1657,16 +1797,17 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap update.Field10.Value.Add(key, value); } } + { var mapSize = obj.GetObjectCount(11); - + var isCleared = updateObj.IsFieldCleared(11); - + if (mapSize > 0 || isCleared) { update.Field11 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.Dictionary()); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(11, (uint) i); @@ -1675,16 +1816,17 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap update.Field11.Value.Add(key, value); } } + { var mapSize = obj.GetObjectCount(12); - + var isCleared = updateObj.IsFieldCleared(12); - + if (mapSize > 0 || isCleared) { update.Field12 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.Dictionary()); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(12, (uint) i); @@ -1693,16 +1835,17 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap update.Field12.Value.Add(key, value); } } + { var mapSize = obj.GetObjectCount(13); - + var isCleared = updateObj.IsFieldCleared(13); - + if (mapSize > 0 || isCleared) { update.Field13 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.Dictionary()); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(13, (uint) i); @@ -1711,16 +1854,17 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap update.Field13.Value.Add(key, value); } } + { var mapSize = obj.GetObjectCount(14); - + var isCleared = updateObj.IsFieldCleared(14); - + if (mapSize > 0 || isCleared) { update.Field14 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.Dictionary()); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(14, (uint) i); @@ -1729,16 +1873,17 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap update.Field14.Value.Add(key, value); } } + { var mapSize = obj.GetObjectCount(15); - + var isCleared = updateObj.IsFieldCleared(15); - + if (mapSize > 0 || isCleared) { update.Field15 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.Dictionary()); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(15, (uint) i); @@ -1747,16 +1892,17 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap update.Field15.Value.Add(key, value); } } + { var mapSize = obj.GetObjectCount(16); - + var isCleared = updateObj.IsFieldCleared(16); - + if (mapSize > 0 || isCleared) { update.Field16 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.Dictionary()); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(16, (uint) i); @@ -1765,16 +1911,17 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap update.Field16.Value.Add(key, value); } } + { var mapSize = obj.GetObjectCount(17); - + var isCleared = updateObj.IsFieldCleared(17); - + if (mapSize > 0 || isCleared) { update.Field17 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.Dictionary()); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(17, (uint) i); @@ -1783,16 +1930,17 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap update.Field17.Value.Add(key, value); } } + { var mapSize = obj.GetObjectCount(18); - + var isCleared = updateObj.IsFieldCleared(18); - + if (mapSize > 0 || isCleared) { update.Field18 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.Dictionary()); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(18, (uint) i); @@ -1801,6 +1949,7 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap update.Field18.Value.Add(key, value); } } + return update; } @@ -1813,7 +1962,7 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(1); update.Field1 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(1, (uint) i); @@ -1822,11 +1971,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(2); update.Field2 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(2, (uint) i); @@ -1835,11 +1985,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(3); update.Field3 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(3, (uint) i); @@ -1848,11 +1999,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(4); update.Field4 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(4, (uint) i); @@ -1861,11 +2013,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(5); update.Field5 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(5, (uint) i); @@ -1874,11 +2027,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(6); update.Field6 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(6, (uint) i); @@ -1887,11 +2041,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(7); update.Field7 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(7, (uint) i); @@ -1900,11 +2055,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(8); update.Field8 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(8, (uint) i); @@ -1913,11 +2069,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(9); update.Field9 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(9, (uint) i); @@ -1926,11 +2083,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(10); update.Field10 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(10, (uint) i); @@ -1939,11 +2097,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(11); update.Field11 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(11, (uint) i); @@ -1952,11 +2111,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(12); update.Field12 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(12, (uint) i); @@ -1965,11 +2125,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(13); update.Field13 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(13, (uint) i); @@ -1978,11 +2139,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(14); update.Field14 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(14, (uint) i); @@ -1991,11 +2153,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(15); update.Field15 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(15, (uint) i); @@ -2004,11 +2167,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(16); update.Field16 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(16, (uint) i); @@ -2017,11 +2181,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(17); update.Field17 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(17, (uint) i); @@ -2030,11 +2195,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(18); update.Field18 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(18, (uint) i); @@ -2043,6 +2209,7 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + return update; } @@ -2054,7 +2221,7 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(1); component.Field1 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(1, (uint) i); @@ -2063,11 +2230,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(2); component.Field2 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(2, (uint) i); @@ -2076,11 +2244,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(3); component.Field3 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(3, (uint) i); @@ -2089,11 +2258,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(4); component.Field4 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(4, (uint) i); @@ -2102,11 +2272,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(5); component.Field5 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(5, (uint) i); @@ -2115,11 +2286,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(6); component.Field6 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(6, (uint) i); @@ -2128,11 +2300,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(7); component.Field7 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(7, (uint) i); @@ -2141,11 +2314,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(8); component.Field8 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(8, (uint) i); @@ -2154,11 +2328,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(9); component.Field9 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(9, (uint) i); @@ -2167,11 +2342,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(10); component.Field10 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(10, (uint) i); @@ -2180,11 +2356,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(11); component.Field11 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(11, (uint) i); @@ -2193,11 +2370,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(12); component.Field12 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(12, (uint) i); @@ -2206,11 +2384,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(13); component.Field13 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(13, (uint) i); @@ -2219,11 +2398,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(14); component.Field14 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(14, (uint) i); @@ -2232,11 +2412,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(15); component.Field15 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(15, (uint) i); @@ -2245,11 +2426,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(16); component.Field16 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(16, (uint) i); @@ -2258,11 +2440,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(17); component.Field17 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(17, (uint) i); @@ -2271,11 +2454,12 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + { var map = new global::System.Collections.Generic.Dictionary(); var mapSize = obj.GetObjectCount(18); component.Field18 = map; - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(18, (uint) i); @@ -2284,6 +2468,7 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveMap map.Add(key, value); } } + return component; } @@ -2293,14 +2478,14 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen { var mapSize = obj.GetObjectCount(1); - + var isCleared = updateObj.IsFieldCleared(1); - + if (mapSize > 0 || isCleared) { component.Field1.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(1, (uint) i); @@ -2309,16 +2494,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field1.Add(key, value); } } + { var mapSize = obj.GetObjectCount(2); - + var isCleared = updateObj.IsFieldCleared(2); - + if (mapSize > 0 || isCleared) { component.Field2.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(2, (uint) i); @@ -2327,16 +2513,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field2.Add(key, value); } } + { var mapSize = obj.GetObjectCount(3); - + var isCleared = updateObj.IsFieldCleared(3); - + if (mapSize > 0 || isCleared) { component.Field3.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(3, (uint) i); @@ -2345,16 +2532,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field3.Add(key, value); } } + { var mapSize = obj.GetObjectCount(4); - + var isCleared = updateObj.IsFieldCleared(4); - + if (mapSize > 0 || isCleared) { component.Field4.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(4, (uint) i); @@ -2363,16 +2551,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field4.Add(key, value); } } + { var mapSize = obj.GetObjectCount(5); - + var isCleared = updateObj.IsFieldCleared(5); - + if (mapSize > 0 || isCleared) { component.Field5.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(5, (uint) i); @@ -2381,16 +2570,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field5.Add(key, value); } } + { var mapSize = obj.GetObjectCount(6); - + var isCleared = updateObj.IsFieldCleared(6); - + if (mapSize > 0 || isCleared) { component.Field6.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(6, (uint) i); @@ -2399,16 +2589,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field6.Add(key, value); } } + { var mapSize = obj.GetObjectCount(7); - + var isCleared = updateObj.IsFieldCleared(7); - + if (mapSize > 0 || isCleared) { component.Field7.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(7, (uint) i); @@ -2417,16 +2608,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field7.Add(key, value); } } + { var mapSize = obj.GetObjectCount(8); - + var isCleared = updateObj.IsFieldCleared(8); - + if (mapSize > 0 || isCleared) { component.Field8.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(8, (uint) i); @@ -2435,16 +2627,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field8.Add(key, value); } } + { var mapSize = obj.GetObjectCount(9); - + var isCleared = updateObj.IsFieldCleared(9); - + if (mapSize > 0 || isCleared) { component.Field9.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(9, (uint) i); @@ -2453,16 +2646,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field9.Add(key, value); } } + { var mapSize = obj.GetObjectCount(10); - + var isCleared = updateObj.IsFieldCleared(10); - + if (mapSize > 0 || isCleared) { component.Field10.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(10, (uint) i); @@ -2471,16 +2665,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field10.Add(key, value); } } + { var mapSize = obj.GetObjectCount(11); - + var isCleared = updateObj.IsFieldCleared(11); - + if (mapSize > 0 || isCleared) { component.Field11.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(11, (uint) i); @@ -2489,16 +2684,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field11.Add(key, value); } } + { var mapSize = obj.GetObjectCount(12); - + var isCleared = updateObj.IsFieldCleared(12); - + if (mapSize > 0 || isCleared) { component.Field12.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(12, (uint) i); @@ -2507,16 +2703,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field12.Add(key, value); } } + { var mapSize = obj.GetObjectCount(13); - + var isCleared = updateObj.IsFieldCleared(13); - + if (mapSize > 0 || isCleared) { component.Field13.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(13, (uint) i); @@ -2525,16 +2722,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field13.Add(key, value); } } + { var mapSize = obj.GetObjectCount(14); - + var isCleared = updateObj.IsFieldCleared(14); - + if (mapSize > 0 || isCleared) { component.Field14.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(14, (uint) i); @@ -2543,16 +2741,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field14.Add(key, value); } } + { var mapSize = obj.GetObjectCount(15); - + var isCleared = updateObj.IsFieldCleared(15); - + if (mapSize > 0 || isCleared) { component.Field15.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(15, (uint) i); @@ -2561,16 +2760,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field15.Add(key, value); } } + { var mapSize = obj.GetObjectCount(16); - + var isCleared = updateObj.IsFieldCleared(16); - + if (mapSize > 0 || isCleared) { component.Field16.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(16, (uint) i); @@ -2579,16 +2779,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field16.Add(key, value); } } + { var mapSize = obj.GetObjectCount(17); - + var isCleared = updateObj.IsFieldCleared(17); - + if (mapSize > 0 || isCleared) { component.Field17.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(17, (uint) i); @@ -2597,16 +2798,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field17.Add(key, value); } } + { var mapSize = obj.GetObjectCount(18); - + var isCleared = updateObj.IsFieldCleared(18); - + if (mapSize > 0 || isCleared) { component.Field18.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(18, (uint) i); @@ -2623,14 +2825,14 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen { var mapSize = obj.GetObjectCount(1); - + var isCleared = updateObj.IsFieldCleared(1); - + if (mapSize > 0 || isCleared) { snapshot.Field1.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(1, (uint) i); @@ -2639,16 +2841,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field1.Add(key, value); } } + { var mapSize = obj.GetObjectCount(2); - + var isCleared = updateObj.IsFieldCleared(2); - + if (mapSize > 0 || isCleared) { snapshot.Field2.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(2, (uint) i); @@ -2657,16 +2860,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field2.Add(key, value); } } + { var mapSize = obj.GetObjectCount(3); - + var isCleared = updateObj.IsFieldCleared(3); - + if (mapSize > 0 || isCleared) { snapshot.Field3.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(3, (uint) i); @@ -2675,16 +2879,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field3.Add(key, value); } } + { var mapSize = obj.GetObjectCount(4); - + var isCleared = updateObj.IsFieldCleared(4); - + if (mapSize > 0 || isCleared) { snapshot.Field4.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(4, (uint) i); @@ -2693,16 +2898,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field4.Add(key, value); } } + { var mapSize = obj.GetObjectCount(5); - + var isCleared = updateObj.IsFieldCleared(5); - + if (mapSize > 0 || isCleared) { snapshot.Field5.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(5, (uint) i); @@ -2711,16 +2917,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field5.Add(key, value); } } + { var mapSize = obj.GetObjectCount(6); - + var isCleared = updateObj.IsFieldCleared(6); - + if (mapSize > 0 || isCleared) { snapshot.Field6.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(6, (uint) i); @@ -2729,16 +2936,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field6.Add(key, value); } } + { var mapSize = obj.GetObjectCount(7); - + var isCleared = updateObj.IsFieldCleared(7); - + if (mapSize > 0 || isCleared) { snapshot.Field7.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(7, (uint) i); @@ -2747,16 +2955,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field7.Add(key, value); } } + { var mapSize = obj.GetObjectCount(8); - + var isCleared = updateObj.IsFieldCleared(8); - + if (mapSize > 0 || isCleared) { snapshot.Field8.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(8, (uint) i); @@ -2765,16 +2974,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field8.Add(key, value); } } + { var mapSize = obj.GetObjectCount(9); - + var isCleared = updateObj.IsFieldCleared(9); - + if (mapSize > 0 || isCleared) { snapshot.Field9.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(9, (uint) i); @@ -2783,16 +2993,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field9.Add(key, value); } } + { var mapSize = obj.GetObjectCount(10); - + var isCleared = updateObj.IsFieldCleared(10); - + if (mapSize > 0 || isCleared) { snapshot.Field10.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(10, (uint) i); @@ -2801,16 +3012,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field10.Add(key, value); } } + { var mapSize = obj.GetObjectCount(11); - + var isCleared = updateObj.IsFieldCleared(11); - + if (mapSize > 0 || isCleared) { snapshot.Field11.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(11, (uint) i); @@ -2819,16 +3031,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field11.Add(key, value); } } + { var mapSize = obj.GetObjectCount(12); - + var isCleared = updateObj.IsFieldCleared(12); - + if (mapSize > 0 || isCleared) { snapshot.Field12.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(12, (uint) i); @@ -2837,16 +3050,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field12.Add(key, value); } } + { var mapSize = obj.GetObjectCount(13); - + var isCleared = updateObj.IsFieldCleared(13); - + if (mapSize > 0 || isCleared) { snapshot.Field13.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(13, (uint) i); @@ -2855,16 +3069,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field13.Add(key, value); } } + { var mapSize = obj.GetObjectCount(14); - + var isCleared = updateObj.IsFieldCleared(14); - + if (mapSize > 0 || isCleared) { snapshot.Field14.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(14, (uint) i); @@ -2873,16 +3088,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field14.Add(key, value); } } + { var mapSize = obj.GetObjectCount(15); - + var isCleared = updateObj.IsFieldCleared(15); - + if (mapSize > 0 || isCleared) { snapshot.Field15.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(15, (uint) i); @@ -2891,16 +3107,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field15.Add(key, value); } } + { var mapSize = obj.GetObjectCount(16); - + var isCleared = updateObj.IsFieldCleared(16); - + if (mapSize > 0 || isCleared) { snapshot.Field16.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(16, (uint) i); @@ -2909,16 +3126,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field16.Add(key, value); } } + { var mapSize = obj.GetObjectCount(17); - + var isCleared = updateObj.IsFieldCleared(17); - + if (mapSize > 0 || isCleared) { snapshot.Field17.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(17, (uint) i); @@ -2927,16 +3145,17 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field17.Add(key, value); } } + { var mapSize = obj.GetObjectCount(18); - + var isCleared = updateObj.IsFieldCleared(18); - + if (mapSize > 0 || isCleared) { snapshot.Field18.Clear(); } - + for (var i = 0; i < mapSize; i++) { var mapObj = obj.IndexObject(18, (uint) i); @@ -3026,7 +3245,7 @@ private static Update SnapshotToUpdate(in Snapshot snapshot) Field15 = snapshot.Field15, Field16 = snapshot.Field16, Field17 = snapshot.Field17, - Field18 = snapshot.Field18, + Field18 = snapshot.Field18 }; return update; diff --git a/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveMapValueComponentReaderWriter.cs b/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveMapValueComponentReaderWriter.cs index 363557e89b..3838ade179 100644 --- a/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveMapValueComponentReaderWriter.cs +++ b/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveMapValueComponentReaderWriter.cs @@ -910,7 +910,6 @@ public event Action OnUpdate } } - internal ExhaustiveMapValueReader(World world, Entity entity, EntityId entityId) { Entity = entity; @@ -945,7 +944,6 @@ public void RemoveAllCallbacks() updateCallbackToCallbackKey.Clear(); } - if (field1UpdateCallbackToCallbackKey != null) { foreach (var callbackToKey in field1UpdateCallbackToCallbackKey) @@ -1232,7 +1230,6 @@ public void SendUpdate(ExhaustiveMapValue.Update update) EntityManager.SetComponentData(Entity, component); } - public void AcknowledgeAuthorityLoss() { ComponentUpdateSystem.AcknowledgeAuthorityLoss(EntityId, ExhaustiveMapValue.ComponentId); diff --git a/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveMapValueUpdateSender.cs b/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveMapValueUpdateSender.cs index 68ea8cd3e0..91e050f984 100644 --- a/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveMapValueUpdateSender.cs +++ b/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveMapValueUpdateSender.cs @@ -40,14 +40,12 @@ public void SendUpdates( var spatialOSEntityType = system.GetArchetypeChunkComponentType(true); var componentType = system.GetArchetypeChunkComponentType(); - var authorityType = system.GetArchetypeChunkSharedComponentType(); foreach (var chunk in chunkArray) { var entityIdArray = chunk.GetNativeArray(spatialOSEntityType); var componentArray = chunk.GetNativeArray(componentType); - var authorityIndex = chunk.GetSharedComponentIndex(authorityType); if (!entityManager.GetSharedComponentData(authorityIndex).HasAuthority) @@ -58,6 +56,7 @@ public void SendUpdates( for (var i = 0; i < componentArray.Length; i++) { var data = componentArray[i]; + if (data.IsDataDirty()) { Update update = new Update(); diff --git a/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveOptional.cs b/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveOptional.cs index adbae9dd23..5a3501d491 100644 --- a/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveOptional.cs +++ b/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveOptional.cs @@ -27,9 +27,11 @@ public struct Component : IComponentData, ISpatialComponentData, ISnapshottable< public bool IsDataDirty() { var isDataDirty = false; + isDataDirty |= (dirtyBits0 != 0x0); isDataDirty |= (dirtyBits1 != 0x0); isDataDirty |= (dirtyBits2 != 0x0); + return isDataDirty; } @@ -45,6 +47,7 @@ component MyComponent In that case, val_a corresponds to propertyIndex 0 and val_b corresponds to propertyIndex 1 in this method. This method throws an InvalidOperationException in case your component doesn't contain properties. */ + public bool IsDataDirty(int propertyIndex) { if (propertyIndex < 0 || propertyIndex >= 18) @@ -60,8 +63,10 @@ public bool IsDataDirty(int propertyIndex) { case 0: return (dirtyBits0 & (0x1 << propertyIndex % 8)) != 0x0; + case 1: return (dirtyBits1 & (0x1 << propertyIndex % 8)) != 0x0; + case 2: return (dirtyBits2 & (0x1 << propertyIndex % 8)) != 0x0; } @@ -87,9 +92,11 @@ public void MarkDataDirty(int propertyIndex) case 0: dirtyBits0 |= (byte) (0x1 << propertyIndex % 8); break; + case 1: dirtyBits1 |= (byte) (0x1 << propertyIndex % 8); break; + case 2: dirtyBits2 |= (byte) (0x1 << propertyIndex % 8); break; @@ -427,70 +434,87 @@ public static void SerializeComponent(global::Improbable.TestSchema.ExhaustiveOp { obj.AddBool(1, component.Field1.Value); } + if (component.Field2.HasValue) { obj.AddFloat(2, component.Field2.Value); } + if (component.Field3.HasValue) { obj.AddBytes(3, component.Field3.Value); } + if (component.Field4.HasValue) { obj.AddInt32(4, component.Field4.Value); } + if (component.Field5.HasValue) { obj.AddInt64(5, component.Field5.Value); } + if (component.Field6.HasValue) { obj.AddDouble(6, component.Field6.Value); } + if (component.Field7.HasValue) { obj.AddString(7, component.Field7.Value); } + if (component.Field8.HasValue) { obj.AddUint32(8, component.Field8.Value); } + if (component.Field9.HasValue) { obj.AddUint64(9, component.Field9.Value); } + if (component.Field10.HasValue) { obj.AddSint32(10, component.Field10.Value); } + if (component.Field11.HasValue) { obj.AddSint64(11, component.Field11.Value); } + if (component.Field12.HasValue) { obj.AddFixed32(12, component.Field12.Value); } + if (component.Field13.HasValue) { obj.AddFixed64(13, component.Field13.Value); } + if (component.Field14.HasValue) { obj.AddSfixed32(14, component.Field14.Value); } + if (component.Field15.HasValue) { obj.AddSfixed64(15, component.Field15.Value); } + if (component.Field16.HasValue) { obj.AddEntityId(16, component.Field16.Value); } + if (component.Field17.HasValue) { global::Improbable.TestSchema.SomeType.Serialization.Serialize(component.Field17.Value, obj.AddObject(17)); } + if (component.Field18.HasValue) { obj.AddEnum(18, (uint) component.Field18.Value); @@ -500,12 +524,14 @@ public static void SerializeComponent(global::Improbable.TestSchema.ExhaustiveOp public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveOptional.Component component, global::Improbable.Worker.CInterop.SchemaComponentUpdate updateObj) { var obj = updateObj.GetFields(); + if (component.IsDataDirty(0)) { if (component.Field1.HasValue) { obj.AddBool(1, component.Field1.Value); } + if (!component.Field1.HasValue) { updateObj.AddClearedField(1); @@ -518,6 +544,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveOptio { obj.AddFloat(2, component.Field2.Value); } + if (!component.Field2.HasValue) { updateObj.AddClearedField(2); @@ -530,6 +557,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveOptio { obj.AddBytes(3, component.Field3.Value); } + if (!component.Field3.HasValue) { updateObj.AddClearedField(3); @@ -542,6 +570,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveOptio { obj.AddInt32(4, component.Field4.Value); } + if (!component.Field4.HasValue) { updateObj.AddClearedField(4); @@ -554,6 +583,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveOptio { obj.AddInt64(5, component.Field5.Value); } + if (!component.Field5.HasValue) { updateObj.AddClearedField(5); @@ -566,6 +596,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveOptio { obj.AddDouble(6, component.Field6.Value); } + if (!component.Field6.HasValue) { updateObj.AddClearedField(6); @@ -578,6 +609,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveOptio { obj.AddString(7, component.Field7.Value); } + if (!component.Field7.HasValue) { updateObj.AddClearedField(7); @@ -590,6 +622,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveOptio { obj.AddUint32(8, component.Field8.Value); } + if (!component.Field8.HasValue) { updateObj.AddClearedField(8); @@ -602,6 +635,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveOptio { obj.AddUint64(9, component.Field9.Value); } + if (!component.Field9.HasValue) { updateObj.AddClearedField(9); @@ -614,6 +648,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveOptio { obj.AddSint32(10, component.Field10.Value); } + if (!component.Field10.HasValue) { updateObj.AddClearedField(10); @@ -626,6 +661,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveOptio { obj.AddSint64(11, component.Field11.Value); } + if (!component.Field11.HasValue) { updateObj.AddClearedField(11); @@ -638,6 +674,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveOptio { obj.AddFixed32(12, component.Field12.Value); } + if (!component.Field12.HasValue) { updateObj.AddClearedField(12); @@ -650,6 +687,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveOptio { obj.AddFixed64(13, component.Field13.Value); } + if (!component.Field13.HasValue) { updateObj.AddClearedField(13); @@ -662,6 +700,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveOptio { obj.AddSfixed32(14, component.Field14.Value); } + if (!component.Field14.HasValue) { updateObj.AddClearedField(14); @@ -674,6 +713,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveOptio { obj.AddSfixed64(15, component.Field15.Value); } + if (!component.Field15.HasValue) { updateObj.AddClearedField(15); @@ -686,6 +726,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveOptio { obj.AddEntityId(16, component.Field16.Value); } + if (!component.Field16.HasValue) { updateObj.AddClearedField(16); @@ -698,6 +739,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveOptio { global::Improbable.TestSchema.SomeType.Serialization.Serialize(component.Field17.Value, obj.AddObject(17)); } + if (!component.Field17.HasValue) { updateObj.AddClearedField(17); @@ -710,263 +752,317 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveOptio { obj.AddEnum(18, (uint) component.Field18.Value); } + if (!component.Field18.HasValue) { updateObj.AddClearedField(18); } } - } public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveOptional.Update update, global::Improbable.Worker.CInterop.SchemaComponentUpdate updateObj) { var obj = updateObj.GetFields(); + { if (update.Field1.HasValue) { var field = update.Field1.Value; + if (field.HasValue) { obj.AddBool(1, field.Value); } + if (!field.HasValue) { updateObj.AddClearedField(1); } } } + { if (update.Field2.HasValue) { var field = update.Field2.Value; + if (field.HasValue) { obj.AddFloat(2, field.Value); } + if (!field.HasValue) { updateObj.AddClearedField(2); } } } + { if (update.Field3.HasValue) { var field = update.Field3.Value; + if (field.HasValue) { obj.AddBytes(3, field.Value); } + if (!field.HasValue) { updateObj.AddClearedField(3); } } } + { if (update.Field4.HasValue) { var field = update.Field4.Value; + if (field.HasValue) { obj.AddInt32(4, field.Value); } + if (!field.HasValue) { updateObj.AddClearedField(4); } } } + { if (update.Field5.HasValue) { var field = update.Field5.Value; + if (field.HasValue) { obj.AddInt64(5, field.Value); } + if (!field.HasValue) { updateObj.AddClearedField(5); } } } + { if (update.Field6.HasValue) { var field = update.Field6.Value; + if (field.HasValue) { obj.AddDouble(6, field.Value); } + if (!field.HasValue) { updateObj.AddClearedField(6); } } } + { if (update.Field7.HasValue) { var field = update.Field7.Value; + if (field.HasValue) { obj.AddString(7, field.Value); } + if (!field.HasValue) { updateObj.AddClearedField(7); } } } + { if (update.Field8.HasValue) { var field = update.Field8.Value; + if (field.HasValue) { obj.AddUint32(8, field.Value); } + if (!field.HasValue) { updateObj.AddClearedField(8); } } } + { if (update.Field9.HasValue) { var field = update.Field9.Value; + if (field.HasValue) { obj.AddUint64(9, field.Value); } + if (!field.HasValue) { updateObj.AddClearedField(9); } } } + { if (update.Field10.HasValue) { var field = update.Field10.Value; + if (field.HasValue) { obj.AddSint32(10, field.Value); } + if (!field.HasValue) { updateObj.AddClearedField(10); } } } + { if (update.Field11.HasValue) { var field = update.Field11.Value; + if (field.HasValue) { obj.AddSint64(11, field.Value); } + if (!field.HasValue) { updateObj.AddClearedField(11); } } } + { if (update.Field12.HasValue) { var field = update.Field12.Value; + if (field.HasValue) { obj.AddFixed32(12, field.Value); } + if (!field.HasValue) { updateObj.AddClearedField(12); } } } + { if (update.Field13.HasValue) { var field = update.Field13.Value; + if (field.HasValue) { obj.AddFixed64(13, field.Value); } + if (!field.HasValue) { updateObj.AddClearedField(13); } } } + { if (update.Field14.HasValue) { var field = update.Field14.Value; + if (field.HasValue) { obj.AddSfixed32(14, field.Value); } + if (!field.HasValue) { updateObj.AddClearedField(14); } } } + { if (update.Field15.HasValue) { var field = update.Field15.Value; + if (field.HasValue) { obj.AddSfixed64(15, field.Value); } + if (!field.HasValue) { updateObj.AddClearedField(15); } } } + { if (update.Field16.HasValue) { var field = update.Field16.Value; + if (field.HasValue) { obj.AddEntityId(16, field.Value); } + if (!field.HasValue) { updateObj.AddClearedField(16); } } } + { if (update.Field17.HasValue) { var field = update.Field17.Value; + if (field.HasValue) { global::Improbable.TestSchema.SomeType.Serialization.Serialize(field.Value, obj.AddObject(17)); } + if (!field.HasValue) { updateObj.AddClearedField(17); } } } + { if (update.Field18.HasValue) { var field = update.Field18.Value; + if (field.HasValue) { obj.AddEnum(18, (uint) field.Value); } + if (!field.HasValue) { updateObj.AddClearedField(18); @@ -1066,7 +1162,6 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveOpt { obj.AddEnum(18, (uint) snapshot.Field18.Value); } - } public static global::Improbable.TestSchema.ExhaustiveOptional.Component Deserialize(global::Improbable.Worker.CInterop.SchemaObject obj, global::Unity.Entities.World world) @@ -1074,95 +1169,131 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveOpt var component = new global::Improbable.TestSchema.ExhaustiveOptional.Component(); component.field1Handle = global::Improbable.TestSchema.ExhaustiveOptional.ReferenceTypeProviders.Field1Provider.Allocate(world); + if (obj.GetBoolCount(1) == 1) { component.Field1 = new bool?(obj.GetBool(1)); } + component.field2Handle = global::Improbable.TestSchema.ExhaustiveOptional.ReferenceTypeProviders.Field2Provider.Allocate(world); + if (obj.GetFloatCount(2) == 1) { component.Field2 = new float?(obj.GetFloat(2)); } + component.field3Handle = global::Improbable.TestSchema.ExhaustiveOptional.ReferenceTypeProviders.Field3Provider.Allocate(world); + if (obj.GetBytesCount(3) == 1) { component.Field3 = new global::Improbable.Gdk.Core.Option(obj.GetBytes(3)); } + component.field4Handle = global::Improbable.TestSchema.ExhaustiveOptional.ReferenceTypeProviders.Field4Provider.Allocate(world); + if (obj.GetInt32Count(4) == 1) { component.Field4 = new int?(obj.GetInt32(4)); } + component.field5Handle = global::Improbable.TestSchema.ExhaustiveOptional.ReferenceTypeProviders.Field5Provider.Allocate(world); + if (obj.GetInt64Count(5) == 1) { component.Field5 = new long?(obj.GetInt64(5)); } + component.field6Handle = global::Improbable.TestSchema.ExhaustiveOptional.ReferenceTypeProviders.Field6Provider.Allocate(world); + if (obj.GetDoubleCount(6) == 1) { component.Field6 = new double?(obj.GetDouble(6)); } + component.field7Handle = global::Improbable.TestSchema.ExhaustiveOptional.ReferenceTypeProviders.Field7Provider.Allocate(world); + if (obj.GetStringCount(7) == 1) { component.Field7 = new global::Improbable.Gdk.Core.Option(obj.GetString(7)); } + component.field8Handle = global::Improbable.TestSchema.ExhaustiveOptional.ReferenceTypeProviders.Field8Provider.Allocate(world); + if (obj.GetUint32Count(8) == 1) { component.Field8 = new uint?(obj.GetUint32(8)); } + component.field9Handle = global::Improbable.TestSchema.ExhaustiveOptional.ReferenceTypeProviders.Field9Provider.Allocate(world); + if (obj.GetUint64Count(9) == 1) { component.Field9 = new ulong?(obj.GetUint64(9)); } + component.field10Handle = global::Improbable.TestSchema.ExhaustiveOptional.ReferenceTypeProviders.Field10Provider.Allocate(world); + if (obj.GetSint32Count(10) == 1) { component.Field10 = new int?(obj.GetSint32(10)); } + component.field11Handle = global::Improbable.TestSchema.ExhaustiveOptional.ReferenceTypeProviders.Field11Provider.Allocate(world); + if (obj.GetSint64Count(11) == 1) { component.Field11 = new long?(obj.GetSint64(11)); } + component.field12Handle = global::Improbable.TestSchema.ExhaustiveOptional.ReferenceTypeProviders.Field12Provider.Allocate(world); + if (obj.GetFixed32Count(12) == 1) { component.Field12 = new uint?(obj.GetFixed32(12)); } + component.field13Handle = global::Improbable.TestSchema.ExhaustiveOptional.ReferenceTypeProviders.Field13Provider.Allocate(world); + if (obj.GetFixed64Count(13) == 1) { component.Field13 = new ulong?(obj.GetFixed64(13)); } + component.field14Handle = global::Improbable.TestSchema.ExhaustiveOptional.ReferenceTypeProviders.Field14Provider.Allocate(world); + if (obj.GetSfixed32Count(14) == 1) { component.Field14 = new int?(obj.GetSfixed32(14)); } + component.field15Handle = global::Improbable.TestSchema.ExhaustiveOptional.ReferenceTypeProviders.Field15Provider.Allocate(world); + if (obj.GetSfixed64Count(15) == 1) { component.Field15 = new long?(obj.GetSfixed64(15)); } + component.field16Handle = global::Improbable.TestSchema.ExhaustiveOptional.ReferenceTypeProviders.Field16Provider.Allocate(world); + if (obj.GetEntityIdCount(16) == 1) { component.Field16 = new global::Improbable.Gdk.Core.EntityId?(obj.GetEntityIdStruct(16)); } + component.field17Handle = global::Improbable.TestSchema.ExhaustiveOptional.ReferenceTypeProviders.Field17Provider.Allocate(world); + if (obj.GetObjectCount(17) == 1) { component.Field17 = new global::Improbable.TestSchema.SomeType?(global::Improbable.TestSchema.SomeType.Serialization.Deserialize(obj.GetObject(17))); } + component.field18Handle = global::Improbable.TestSchema.ExhaustiveOptional.ReferenceTypeProviders.Field18Provider.Allocate(world); + if (obj.GetEnumCount(18) == 1) { component.Field18 = new global::Improbable.TestSchema.SomeEnum?((global::Improbable.TestSchema.SomeEnum) obj.GetEnum(18)); } + return component; } @@ -1173,7 +1304,7 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveOpt { var isCleared = updateObj.IsFieldCleared(1); - + if (isCleared) { update.Field1 = new global::Improbable.Gdk.Core.Option(new bool?()); @@ -1183,9 +1314,10 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveOpt update.Field1 = new global::Improbable.Gdk.Core.Option(obj.GetBool(1)); } } + { var isCleared = updateObj.IsFieldCleared(2); - + if (isCleared) { update.Field2 = new global::Improbable.Gdk.Core.Option(new float?()); @@ -1195,9 +1327,10 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveOpt update.Field2 = new global::Improbable.Gdk.Core.Option(obj.GetFloat(2)); } } + { var isCleared = updateObj.IsFieldCleared(3); - + if (isCleared) { update.Field3 = new global::Improbable.Gdk.Core.Option>(new global::Improbable.Gdk.Core.Option()); @@ -1207,9 +1340,10 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveOpt update.Field3 = new global::Improbable.Gdk.Core.Option>(obj.GetBytes(3)); } } + { var isCleared = updateObj.IsFieldCleared(4); - + if (isCleared) { update.Field4 = new global::Improbable.Gdk.Core.Option(new int?()); @@ -1219,9 +1353,10 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveOpt update.Field4 = new global::Improbable.Gdk.Core.Option(obj.GetInt32(4)); } } + { var isCleared = updateObj.IsFieldCleared(5); - + if (isCleared) { update.Field5 = new global::Improbable.Gdk.Core.Option(new long?()); @@ -1231,9 +1366,10 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveOpt update.Field5 = new global::Improbable.Gdk.Core.Option(obj.GetInt64(5)); } } + { var isCleared = updateObj.IsFieldCleared(6); - + if (isCleared) { update.Field6 = new global::Improbable.Gdk.Core.Option(new double?()); @@ -1243,9 +1379,10 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveOpt update.Field6 = new global::Improbable.Gdk.Core.Option(obj.GetDouble(6)); } } + { var isCleared = updateObj.IsFieldCleared(7); - + if (isCleared) { update.Field7 = new global::Improbable.Gdk.Core.Option>(new global::Improbable.Gdk.Core.Option()); @@ -1255,9 +1392,10 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveOpt update.Field7 = new global::Improbable.Gdk.Core.Option>(obj.GetString(7)); } } + { var isCleared = updateObj.IsFieldCleared(8); - + if (isCleared) { update.Field8 = new global::Improbable.Gdk.Core.Option(new uint?()); @@ -1267,9 +1405,10 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveOpt update.Field8 = new global::Improbable.Gdk.Core.Option(obj.GetUint32(8)); } } + { var isCleared = updateObj.IsFieldCleared(9); - + if (isCleared) { update.Field9 = new global::Improbable.Gdk.Core.Option(new ulong?()); @@ -1279,9 +1418,10 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveOpt update.Field9 = new global::Improbable.Gdk.Core.Option(obj.GetUint64(9)); } } + { var isCleared = updateObj.IsFieldCleared(10); - + if (isCleared) { update.Field10 = new global::Improbable.Gdk.Core.Option(new int?()); @@ -1291,9 +1431,10 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveOpt update.Field10 = new global::Improbable.Gdk.Core.Option(obj.GetSint32(10)); } } + { var isCleared = updateObj.IsFieldCleared(11); - + if (isCleared) { update.Field11 = new global::Improbable.Gdk.Core.Option(new long?()); @@ -1303,9 +1444,10 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveOpt update.Field11 = new global::Improbable.Gdk.Core.Option(obj.GetSint64(11)); } } + { var isCleared = updateObj.IsFieldCleared(12); - + if (isCleared) { update.Field12 = new global::Improbable.Gdk.Core.Option(new uint?()); @@ -1315,9 +1457,10 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveOpt update.Field12 = new global::Improbable.Gdk.Core.Option(obj.GetFixed32(12)); } } + { var isCleared = updateObj.IsFieldCleared(13); - + if (isCleared) { update.Field13 = new global::Improbable.Gdk.Core.Option(new ulong?()); @@ -1327,9 +1470,10 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveOpt update.Field13 = new global::Improbable.Gdk.Core.Option(obj.GetFixed64(13)); } } + { var isCleared = updateObj.IsFieldCleared(14); - + if (isCleared) { update.Field14 = new global::Improbable.Gdk.Core.Option(new int?()); @@ -1339,9 +1483,10 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveOpt update.Field14 = new global::Improbable.Gdk.Core.Option(obj.GetSfixed32(14)); } } + { var isCleared = updateObj.IsFieldCleared(15); - + if (isCleared) { update.Field15 = new global::Improbable.Gdk.Core.Option(new long?()); @@ -1351,9 +1496,10 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveOpt update.Field15 = new global::Improbable.Gdk.Core.Option(obj.GetSfixed64(15)); } } + { var isCleared = updateObj.IsFieldCleared(16); - + if (isCleared) { update.Field16 = new global::Improbable.Gdk.Core.Option(new global::Improbable.Gdk.Core.EntityId?()); @@ -1363,9 +1509,10 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveOpt update.Field16 = new global::Improbable.Gdk.Core.Option(obj.GetEntityIdStruct(16)); } } + { var isCleared = updateObj.IsFieldCleared(17); - + if (isCleared) { update.Field17 = new global::Improbable.Gdk.Core.Option(new global::Improbable.TestSchema.SomeType?()); @@ -1375,9 +1522,10 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveOpt update.Field17 = new global::Improbable.Gdk.Core.Option(global::Improbable.TestSchema.SomeType.Serialization.Deserialize(obj.GetObject(17))); } } + { var isCleared = updateObj.IsFieldCleared(18); - + if (isCleared) { update.Field18 = new global::Improbable.Gdk.Core.Option(new global::Improbable.TestSchema.SomeEnum?()); @@ -1387,6 +1535,7 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveOpt update.Field18 = new global::Improbable.Gdk.Core.Option((global::Improbable.TestSchema.SomeEnum) obj.GetEnum(18)); } } + return update; } @@ -1399,74 +1548,92 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveOpt { update.Field1 = new global::Improbable.Gdk.Core.Option(obj.GetBool(1)); } + if (obj.GetFloatCount(2) == 1) { update.Field2 = new global::Improbable.Gdk.Core.Option(obj.GetFloat(2)); } + if (obj.GetBytesCount(3) == 1) { update.Field3 = new global::Improbable.Gdk.Core.Option>(obj.GetBytes(3)); } + if (obj.GetInt32Count(4) == 1) { update.Field4 = new global::Improbable.Gdk.Core.Option(obj.GetInt32(4)); } + if (obj.GetInt64Count(5) == 1) { update.Field5 = new global::Improbable.Gdk.Core.Option(obj.GetInt64(5)); } + if (obj.GetDoubleCount(6) == 1) { update.Field6 = new global::Improbable.Gdk.Core.Option(obj.GetDouble(6)); } + if (obj.GetStringCount(7) == 1) { update.Field7 = new global::Improbable.Gdk.Core.Option>(obj.GetString(7)); } + if (obj.GetUint32Count(8) == 1) { update.Field8 = new global::Improbable.Gdk.Core.Option(obj.GetUint32(8)); } + if (obj.GetUint64Count(9) == 1) { update.Field9 = new global::Improbable.Gdk.Core.Option(obj.GetUint64(9)); } + if (obj.GetSint32Count(10) == 1) { update.Field10 = new global::Improbable.Gdk.Core.Option(obj.GetSint32(10)); } + if (obj.GetSint64Count(11) == 1) { update.Field11 = new global::Improbable.Gdk.Core.Option(obj.GetSint64(11)); } + if (obj.GetFixed32Count(12) == 1) { update.Field12 = new global::Improbable.Gdk.Core.Option(obj.GetFixed32(12)); } + if (obj.GetFixed64Count(13) == 1) { update.Field13 = new global::Improbable.Gdk.Core.Option(obj.GetFixed64(13)); } + if (obj.GetSfixed32Count(14) == 1) { update.Field14 = new global::Improbable.Gdk.Core.Option(obj.GetSfixed32(14)); } + if (obj.GetSfixed64Count(15) == 1) { update.Field15 = new global::Improbable.Gdk.Core.Option(obj.GetSfixed64(15)); } + if (obj.GetEntityIdCount(16) == 1) { update.Field16 = new global::Improbable.Gdk.Core.Option(obj.GetEntityIdStruct(16)); } + if (obj.GetObjectCount(17) == 1) { update.Field17 = new global::Improbable.Gdk.Core.Option(global::Improbable.TestSchema.SomeType.Serialization.Deserialize(obj.GetObject(17))); } + if (obj.GetEnumCount(18) == 1) { update.Field18 = new global::Improbable.Gdk.Core.Option((global::Improbable.TestSchema.SomeEnum) obj.GetEnum(18)); } + return update; } @@ -1478,74 +1645,92 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveOpt { component.Field1 = new bool?(obj.GetBool(1)); } + if (obj.GetFloatCount(2) == 1) { component.Field2 = new float?(obj.GetFloat(2)); } + if (obj.GetBytesCount(3) == 1) { component.Field3 = new global::Improbable.Gdk.Core.Option(obj.GetBytes(3)); } + if (obj.GetInt32Count(4) == 1) { component.Field4 = new int?(obj.GetInt32(4)); } + if (obj.GetInt64Count(5) == 1) { component.Field5 = new long?(obj.GetInt64(5)); } + if (obj.GetDoubleCount(6) == 1) { component.Field6 = new double?(obj.GetDouble(6)); } + if (obj.GetStringCount(7) == 1) { component.Field7 = new global::Improbable.Gdk.Core.Option(obj.GetString(7)); } + if (obj.GetUint32Count(8) == 1) { component.Field8 = new uint?(obj.GetUint32(8)); } + if (obj.GetUint64Count(9) == 1) { component.Field9 = new ulong?(obj.GetUint64(9)); } + if (obj.GetSint32Count(10) == 1) { component.Field10 = new int?(obj.GetSint32(10)); } + if (obj.GetSint64Count(11) == 1) { component.Field11 = new long?(obj.GetSint64(11)); } + if (obj.GetFixed32Count(12) == 1) { component.Field12 = new uint?(obj.GetFixed32(12)); } + if (obj.GetFixed64Count(13) == 1) { component.Field13 = new ulong?(obj.GetFixed64(13)); } + if (obj.GetSfixed32Count(14) == 1) { component.Field14 = new int?(obj.GetSfixed32(14)); } + if (obj.GetSfixed64Count(15) == 1) { component.Field15 = new long?(obj.GetSfixed64(15)); } + if (obj.GetEntityIdCount(16) == 1) { component.Field16 = new global::Improbable.Gdk.Core.EntityId?(obj.GetEntityIdStruct(16)); } + if (obj.GetObjectCount(17) == 1) { component.Field17 = new global::Improbable.TestSchema.SomeType?(global::Improbable.TestSchema.SomeType.Serialization.Deserialize(obj.GetObject(17))); } + if (obj.GetEnumCount(18) == 1) { component.Field18 = new global::Improbable.TestSchema.SomeEnum?((global::Improbable.TestSchema.SomeEnum) obj.GetEnum(18)); } + return component; } @@ -1555,7 +1740,7 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen { var isCleared = updateObj.IsFieldCleared(1); - + if (isCleared) { component.Field1 = new bool?(); @@ -1566,9 +1751,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field1 = new bool?(value); } } + { var isCleared = updateObj.IsFieldCleared(2); - + if (isCleared) { component.Field2 = new float?(); @@ -1579,9 +1765,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field2 = new float?(value); } } + { var isCleared = updateObj.IsFieldCleared(3); - + if (isCleared) { component.Field3 = new global::Improbable.Gdk.Core.Option(); @@ -1592,9 +1779,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field3 = new global::Improbable.Gdk.Core.Option(value); } } + { var isCleared = updateObj.IsFieldCleared(4); - + if (isCleared) { component.Field4 = new int?(); @@ -1605,9 +1793,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field4 = new int?(value); } } + { var isCleared = updateObj.IsFieldCleared(5); - + if (isCleared) { component.Field5 = new long?(); @@ -1618,9 +1807,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field5 = new long?(value); } } + { var isCleared = updateObj.IsFieldCleared(6); - + if (isCleared) { component.Field6 = new double?(); @@ -1631,9 +1821,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field6 = new double?(value); } } + { var isCleared = updateObj.IsFieldCleared(7); - + if (isCleared) { component.Field7 = new global::Improbable.Gdk.Core.Option(); @@ -1644,9 +1835,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field7 = new global::Improbable.Gdk.Core.Option(value); } } + { var isCleared = updateObj.IsFieldCleared(8); - + if (isCleared) { component.Field8 = new uint?(); @@ -1657,9 +1849,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field8 = new uint?(value); } } + { var isCleared = updateObj.IsFieldCleared(9); - + if (isCleared) { component.Field9 = new ulong?(); @@ -1670,9 +1863,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field9 = new ulong?(value); } } + { var isCleared = updateObj.IsFieldCleared(10); - + if (isCleared) { component.Field10 = new int?(); @@ -1683,9 +1877,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field10 = new int?(value); } } + { var isCleared = updateObj.IsFieldCleared(11); - + if (isCleared) { component.Field11 = new long?(); @@ -1696,9 +1891,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field11 = new long?(value); } } + { var isCleared = updateObj.IsFieldCleared(12); - + if (isCleared) { component.Field12 = new uint?(); @@ -1709,9 +1905,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field12 = new uint?(value); } } + { var isCleared = updateObj.IsFieldCleared(13); - + if (isCleared) { component.Field13 = new ulong?(); @@ -1722,9 +1919,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field13 = new ulong?(value); } } + { var isCleared = updateObj.IsFieldCleared(14); - + if (isCleared) { component.Field14 = new int?(); @@ -1735,9 +1933,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field14 = new int?(value); } } + { var isCleared = updateObj.IsFieldCleared(15); - + if (isCleared) { component.Field15 = new long?(); @@ -1748,9 +1947,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field15 = new long?(value); } } + { var isCleared = updateObj.IsFieldCleared(16); - + if (isCleared) { component.Field16 = new global::Improbable.Gdk.Core.EntityId?(); @@ -1761,9 +1961,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field16 = new global::Improbable.Gdk.Core.EntityId?(value); } } + { var isCleared = updateObj.IsFieldCleared(17); - + if (isCleared) { component.Field17 = new global::Improbable.TestSchema.SomeType?(); @@ -1774,9 +1975,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen component.Field17 = new global::Improbable.TestSchema.SomeType?(value); } } + { var isCleared = updateObj.IsFieldCleared(18); - + if (isCleared) { component.Field18 = new global::Improbable.TestSchema.SomeEnum?(); @@ -1795,7 +1997,7 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen { var isCleared = updateObj.IsFieldCleared(1); - + if (isCleared) { snapshot.Field1 = new bool?(); @@ -1806,9 +2008,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field1 = new bool?(value); } } + { var isCleared = updateObj.IsFieldCleared(2); - + if (isCleared) { snapshot.Field2 = new float?(); @@ -1819,9 +2022,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field2 = new float?(value); } } + { var isCleared = updateObj.IsFieldCleared(3); - + if (isCleared) { snapshot.Field3 = new global::Improbable.Gdk.Core.Option(); @@ -1832,9 +2036,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field3 = new global::Improbable.Gdk.Core.Option(value); } } + { var isCleared = updateObj.IsFieldCleared(4); - + if (isCleared) { snapshot.Field4 = new int?(); @@ -1845,9 +2050,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field4 = new int?(value); } } + { var isCleared = updateObj.IsFieldCleared(5); - + if (isCleared) { snapshot.Field5 = new long?(); @@ -1858,9 +2064,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field5 = new long?(value); } } + { var isCleared = updateObj.IsFieldCleared(6); - + if (isCleared) { snapshot.Field6 = new double?(); @@ -1871,9 +2078,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field6 = new double?(value); } } + { var isCleared = updateObj.IsFieldCleared(7); - + if (isCleared) { snapshot.Field7 = new global::Improbable.Gdk.Core.Option(); @@ -1884,9 +2092,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field7 = new global::Improbable.Gdk.Core.Option(value); } } + { var isCleared = updateObj.IsFieldCleared(8); - + if (isCleared) { snapshot.Field8 = new uint?(); @@ -1897,9 +2106,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field8 = new uint?(value); } } + { var isCleared = updateObj.IsFieldCleared(9); - + if (isCleared) { snapshot.Field9 = new ulong?(); @@ -1910,9 +2120,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field9 = new ulong?(value); } } + { var isCleared = updateObj.IsFieldCleared(10); - + if (isCleared) { snapshot.Field10 = new int?(); @@ -1923,9 +2134,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field10 = new int?(value); } } + { var isCleared = updateObj.IsFieldCleared(11); - + if (isCleared) { snapshot.Field11 = new long?(); @@ -1936,9 +2148,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field11 = new long?(value); } } + { var isCleared = updateObj.IsFieldCleared(12); - + if (isCleared) { snapshot.Field12 = new uint?(); @@ -1949,9 +2162,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field12 = new uint?(value); } } + { var isCleared = updateObj.IsFieldCleared(13); - + if (isCleared) { snapshot.Field13 = new ulong?(); @@ -1962,9 +2176,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field13 = new ulong?(value); } } + { var isCleared = updateObj.IsFieldCleared(14); - + if (isCleared) { snapshot.Field14 = new int?(); @@ -1975,9 +2190,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field14 = new int?(value); } } + { var isCleared = updateObj.IsFieldCleared(15); - + if (isCleared) { snapshot.Field15 = new long?(); @@ -1988,9 +2204,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field15 = new long?(value); } } + { var isCleared = updateObj.IsFieldCleared(16); - + if (isCleared) { snapshot.Field16 = new global::Improbable.Gdk.Core.EntityId?(); @@ -2001,9 +2218,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field16 = new global::Improbable.Gdk.Core.EntityId?(value); } } + { var isCleared = updateObj.IsFieldCleared(17); - + if (isCleared) { snapshot.Field17 = new global::Improbable.TestSchema.SomeType?(); @@ -2014,9 +2232,10 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen snapshot.Field17 = new global::Improbable.TestSchema.SomeType?(value); } } + { var isCleared = updateObj.IsFieldCleared(18); - + if (isCleared) { snapshot.Field18 = new global::Improbable.TestSchema.SomeEnum?(); @@ -2108,7 +2327,7 @@ private static Update SnapshotToUpdate(in Snapshot snapshot) Field15 = snapshot.Field15, Field16 = snapshot.Field16, Field17 = snapshot.Field17, - Field18 = snapshot.Field18, + Field18 = snapshot.Field18 }; return update; diff --git a/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveOptionalComponentReaderWriter.cs b/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveOptionalComponentReaderWriter.cs index 62286e69ca..69d93483e4 100644 --- a/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveOptionalComponentReaderWriter.cs +++ b/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveOptionalComponentReaderWriter.cs @@ -910,7 +910,6 @@ public event Action OnField15Update } } - internal ExhaustiveOptionalReader(World world, Entity entity, EntityId entityId) { Entity = entity; @@ -945,7 +944,6 @@ public void RemoveAllCallbacks() updateCallbackToCallbackKey.Clear(); } - if (field1UpdateCallbackToCallbackKey != null) { foreach (var callbackToKey in field1UpdateCallbackToCallbackKey) @@ -1232,7 +1230,6 @@ public void SendUpdate(ExhaustiveOptional.Update update) EntityManager.SetComponentData(Entity, component); } - public void AcknowledgeAuthorityLoss() { ComponentUpdateSystem.AcknowledgeAuthorityLoss(EntityId, ExhaustiveOptional.ComponentId); diff --git a/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveOptionalUpdateSender.cs b/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveOptionalUpdateSender.cs index 46870190a6..fb55d4b7df 100644 --- a/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveOptionalUpdateSender.cs +++ b/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveOptionalUpdateSender.cs @@ -40,14 +40,12 @@ public void SendUpdates( var spatialOSEntityType = system.GetArchetypeChunkComponentType(true); var componentType = system.GetArchetypeChunkComponentType(); - var authorityType = system.GetArchetypeChunkSharedComponentType(); foreach (var chunk in chunkArray) { var entityIdArray = chunk.GetNativeArray(spatialOSEntityType); var componentArray = chunk.GetNativeArray(componentType); - var authorityIndex = chunk.GetSharedComponentIndex(authorityType); if (!entityManager.GetSharedComponentData(authorityIndex).HasAuthority) @@ -58,6 +56,7 @@ public void SendUpdates( for (var i = 0; i < componentArray.Length; i++) { var data = componentArray[i]; + if (data.IsDataDirty()) { Update update = new Update(); diff --git a/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveRepeated.cs b/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveRepeated.cs index a57751f46c..53342b8ac2 100644 --- a/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveRepeated.cs +++ b/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveRepeated.cs @@ -27,9 +27,11 @@ public struct Component : IComponentData, ISpatialComponentData, ISnapshottable< public bool IsDataDirty() { var isDataDirty = false; + isDataDirty |= (dirtyBits0 != 0x0); isDataDirty |= (dirtyBits1 != 0x0); isDataDirty |= (dirtyBits2 != 0x0); + return isDataDirty; } @@ -45,6 +47,7 @@ component MyComponent In that case, val_a corresponds to propertyIndex 0 and val_b corresponds to propertyIndex 1 in this method. This method throws an InvalidOperationException in case your component doesn't contain properties. */ + public bool IsDataDirty(int propertyIndex) { if (propertyIndex < 0 || propertyIndex >= 18) @@ -60,8 +63,10 @@ public bool IsDataDirty(int propertyIndex) { case 0: return (dirtyBits0 & (0x1 << propertyIndex % 8)) != 0x0; + case 1: return (dirtyBits1 & (0x1 << propertyIndex % 8)) != 0x0; + case 2: return (dirtyBits2 & (0x1 << propertyIndex % 8)) != 0x0; } @@ -87,9 +92,11 @@ public void MarkDataDirty(int propertyIndex) case 0: dirtyBits0 |= (byte) (0x1 << propertyIndex % 8); break; + case 1: dirtyBits1 |= (byte) (0x1 << propertyIndex % 8); break; + case 2: dirtyBits2 |= (byte) (0x1 << propertyIndex % 8); break; @@ -427,70 +434,87 @@ public static void SerializeComponent(global::Improbable.TestSchema.ExhaustiveRe { obj.AddBool(1, value); } + foreach (var value in component.Field2) { obj.AddFloat(2, value); } + foreach (var value in component.Field3) { obj.AddBytes(3, value); } + foreach (var value in component.Field4) { obj.AddInt32(4, value); } + foreach (var value in component.Field5) { obj.AddInt64(5, value); } + foreach (var value in component.Field6) { obj.AddDouble(6, value); } + foreach (var value in component.Field7) { obj.AddString(7, value); } + foreach (var value in component.Field8) { obj.AddUint32(8, value); } + foreach (var value in component.Field9) { obj.AddUint64(9, value); } + foreach (var value in component.Field10) { obj.AddSint32(10, value); } + foreach (var value in component.Field11) { obj.AddSint64(11, value); } + foreach (var value in component.Field12) { obj.AddFixed32(12, value); } + foreach (var value in component.Field13) { obj.AddFixed64(13, value); } + foreach (var value in component.Field14) { obj.AddSfixed32(14, value); } + foreach (var value in component.Field15) { obj.AddSfixed64(15, value); } + foreach (var value in component.Field16) { obj.AddEntityId(16, value); } + foreach (var value in component.Field17) { global::Improbable.TestSchema.SomeType.Serialization.Serialize(value, obj.AddObject(17)); } + foreach (var value in component.Field18) { obj.AddEnum(18, (uint) value); @@ -500,12 +524,14 @@ public static void SerializeComponent(global::Improbable.TestSchema.ExhaustiveRe public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveRepeated.Component component, global::Improbable.Worker.CInterop.SchemaComponentUpdate updateObj) { var obj = updateObj.GetFields(); + if (component.IsDataDirty(0)) { foreach (var value in component.Field1) { obj.AddBool(1, value); } + if (component.Field1.Count == 0) { updateObj.AddClearedField(1); @@ -518,6 +544,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveRepea { obj.AddFloat(2, value); } + if (component.Field2.Count == 0) { updateObj.AddClearedField(2); @@ -530,6 +557,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveRepea { obj.AddBytes(3, value); } + if (component.Field3.Count == 0) { updateObj.AddClearedField(3); @@ -542,6 +570,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveRepea { obj.AddInt32(4, value); } + if (component.Field4.Count == 0) { updateObj.AddClearedField(4); @@ -554,6 +583,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveRepea { obj.AddInt64(5, value); } + if (component.Field5.Count == 0) { updateObj.AddClearedField(5); @@ -566,6 +596,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveRepea { obj.AddDouble(6, value); } + if (component.Field6.Count == 0) { updateObj.AddClearedField(6); @@ -578,6 +609,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveRepea { obj.AddString(7, value); } + if (component.Field7.Count == 0) { updateObj.AddClearedField(7); @@ -590,6 +622,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveRepea { obj.AddUint32(8, value); } + if (component.Field8.Count == 0) { updateObj.AddClearedField(8); @@ -602,6 +635,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveRepea { obj.AddUint64(9, value); } + if (component.Field9.Count == 0) { updateObj.AddClearedField(9); @@ -614,6 +648,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveRepea { obj.AddSint32(10, value); } + if (component.Field10.Count == 0) { updateObj.AddClearedField(10); @@ -626,6 +661,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveRepea { obj.AddSint64(11, value); } + if (component.Field11.Count == 0) { updateObj.AddClearedField(11); @@ -638,6 +674,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveRepea { obj.AddFixed32(12, value); } + if (component.Field12.Count == 0) { updateObj.AddClearedField(12); @@ -650,6 +687,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveRepea { obj.AddFixed64(13, value); } + if (component.Field13.Count == 0) { updateObj.AddClearedField(13); @@ -662,6 +700,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveRepea { obj.AddSfixed32(14, value); } + if (component.Field14.Count == 0) { updateObj.AddClearedField(14); @@ -674,6 +713,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveRepea { obj.AddSfixed64(15, value); } + if (component.Field15.Count == 0) { updateObj.AddClearedField(15); @@ -686,6 +726,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveRepea { obj.AddEntityId(16, value); } + if (component.Field16.Count == 0) { updateObj.AddClearedField(16); @@ -698,6 +739,7 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveRepea { global::Improbable.TestSchema.SomeType.Serialization.Serialize(value, obj.AddObject(17)); } + if (component.Field17.Count == 0) { updateObj.AddClearedField(17); @@ -710,263 +752,317 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveRepea { obj.AddEnum(18, (uint) value); } + if (component.Field18.Count == 0) { updateObj.AddClearedField(18); } } - } public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveRepeated.Update update, global::Improbable.Worker.CInterop.SchemaComponentUpdate updateObj) { var obj = updateObj.GetFields(); + { if (update.Field1.HasValue) { var field = update.Field1.Value; + foreach (var value in field) { obj.AddBool(1, value); } + if (field.Count == 0) { updateObj.AddClearedField(1); } } } + { if (update.Field2.HasValue) { var field = update.Field2.Value; + foreach (var value in field) { obj.AddFloat(2, value); } + if (field.Count == 0) { updateObj.AddClearedField(2); } } } + { if (update.Field3.HasValue) { var field = update.Field3.Value; + foreach (var value in field) { obj.AddBytes(3, value); } + if (field.Count == 0) { updateObj.AddClearedField(3); } } } + { if (update.Field4.HasValue) { var field = update.Field4.Value; + foreach (var value in field) { obj.AddInt32(4, value); } + if (field.Count == 0) { updateObj.AddClearedField(4); } } } + { if (update.Field5.HasValue) { var field = update.Field5.Value; + foreach (var value in field) { obj.AddInt64(5, value); } + if (field.Count == 0) { updateObj.AddClearedField(5); } } } + { if (update.Field6.HasValue) { var field = update.Field6.Value; + foreach (var value in field) { obj.AddDouble(6, value); } + if (field.Count == 0) { updateObj.AddClearedField(6); } } } + { if (update.Field7.HasValue) { var field = update.Field7.Value; + foreach (var value in field) { obj.AddString(7, value); } + if (field.Count == 0) { updateObj.AddClearedField(7); } } } + { if (update.Field8.HasValue) { var field = update.Field8.Value; + foreach (var value in field) { obj.AddUint32(8, value); } + if (field.Count == 0) { updateObj.AddClearedField(8); } } } + { if (update.Field9.HasValue) { var field = update.Field9.Value; + foreach (var value in field) { obj.AddUint64(9, value); } + if (field.Count == 0) { updateObj.AddClearedField(9); } } } + { if (update.Field10.HasValue) { var field = update.Field10.Value; + foreach (var value in field) { obj.AddSint32(10, value); } + if (field.Count == 0) { updateObj.AddClearedField(10); } } } + { if (update.Field11.HasValue) { var field = update.Field11.Value; + foreach (var value in field) { obj.AddSint64(11, value); } + if (field.Count == 0) { updateObj.AddClearedField(11); } } } + { if (update.Field12.HasValue) { var field = update.Field12.Value; + foreach (var value in field) { obj.AddFixed32(12, value); } + if (field.Count == 0) { updateObj.AddClearedField(12); } } } + { if (update.Field13.HasValue) { var field = update.Field13.Value; + foreach (var value in field) { obj.AddFixed64(13, value); } + if (field.Count == 0) { updateObj.AddClearedField(13); } } } + { if (update.Field14.HasValue) { var field = update.Field14.Value; + foreach (var value in field) { obj.AddSfixed32(14, value); } + if (field.Count == 0) { updateObj.AddClearedField(14); } } } + { if (update.Field15.HasValue) { var field = update.Field15.Value; + foreach (var value in field) { obj.AddSfixed64(15, value); } + if (field.Count == 0) { updateObj.AddClearedField(15); } } } + { if (update.Field16.HasValue) { var field = update.Field16.Value; + foreach (var value in field) { obj.AddEntityId(16, value); } + if (field.Count == 0) { updateObj.AddClearedField(16); } } } + { if (update.Field17.HasValue) { var field = update.Field17.Value; + foreach (var value in field) { global::Improbable.TestSchema.SomeType.Serialization.Serialize(value, obj.AddObject(17)); } + if (field.Count == 0) { updateObj.AddClearedField(17); } } } + { if (update.Field18.HasValue) { var field = update.Field18.Value; + foreach (var value in field) { obj.AddEnum(18, (uint) value); } + if (field.Count == 0) { updateObj.AddClearedField(18); @@ -1066,7 +1162,6 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveRep { obj.AddEnum(18, (uint) value); } - } public static global::Improbable.TestSchema.ExhaustiveRepeated.Component Deserialize(global::Improbable.Worker.CInterop.SchemaObject obj, global::Unity.Entities.World world) @@ -1074,203 +1169,239 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveRep var component = new global::Improbable.TestSchema.ExhaustiveRepeated.Component(); component.field1Handle = global::Improbable.TestSchema.ExhaustiveRepeated.ReferenceTypeProviders.Field1Provider.Allocate(world); + { component.Field1 = new global::System.Collections.Generic.List(); var list = component.Field1; var listLength = obj.GetBoolCount(1); - + for (var i = 0; i < listLength; i++) { list.Add(obj.IndexBool(1, (uint) i)); } } + component.field2Handle = global::Improbable.TestSchema.ExhaustiveRepeated.ReferenceTypeProviders.Field2Provider.Allocate(world); + { component.Field2 = new global::System.Collections.Generic.List(); var list = component.Field2; var listLength = obj.GetFloatCount(2); - + for (var i = 0; i < listLength; i++) { list.Add(obj.IndexFloat(2, (uint) i)); } } + component.field3Handle = global::Improbable.TestSchema.ExhaustiveRepeated.ReferenceTypeProviders.Field3Provider.Allocate(world); + { component.Field3 = new global::System.Collections.Generic.List(); var list = component.Field3; var listLength = obj.GetBytesCount(3); - + for (var i = 0; i < listLength; i++) { list.Add(obj.IndexBytes(3, (uint) i)); } } + component.field4Handle = global::Improbable.TestSchema.ExhaustiveRepeated.ReferenceTypeProviders.Field4Provider.Allocate(world); + { component.Field4 = new global::System.Collections.Generic.List(); var list = component.Field4; var listLength = obj.GetInt32Count(4); - + for (var i = 0; i < listLength; i++) { list.Add(obj.IndexInt32(4, (uint) i)); } } + component.field5Handle = global::Improbable.TestSchema.ExhaustiveRepeated.ReferenceTypeProviders.Field5Provider.Allocate(world); + { component.Field5 = new global::System.Collections.Generic.List(); var list = component.Field5; var listLength = obj.GetInt64Count(5); - + for (var i = 0; i < listLength; i++) { list.Add(obj.IndexInt64(5, (uint) i)); } } + component.field6Handle = global::Improbable.TestSchema.ExhaustiveRepeated.ReferenceTypeProviders.Field6Provider.Allocate(world); + { component.Field6 = new global::System.Collections.Generic.List(); var list = component.Field6; var listLength = obj.GetDoubleCount(6); - + for (var i = 0; i < listLength; i++) { list.Add(obj.IndexDouble(6, (uint) i)); } } + component.field7Handle = global::Improbable.TestSchema.ExhaustiveRepeated.ReferenceTypeProviders.Field7Provider.Allocate(world); + { component.Field7 = new global::System.Collections.Generic.List(); var list = component.Field7; var listLength = obj.GetStringCount(7); - + for (var i = 0; i < listLength; i++) { list.Add(obj.IndexString(7, (uint) i)); } } + component.field8Handle = global::Improbable.TestSchema.ExhaustiveRepeated.ReferenceTypeProviders.Field8Provider.Allocate(world); + { component.Field8 = new global::System.Collections.Generic.List(); var list = component.Field8; var listLength = obj.GetUint32Count(8); - + for (var i = 0; i < listLength; i++) { list.Add(obj.IndexUint32(8, (uint) i)); } } + component.field9Handle = global::Improbable.TestSchema.ExhaustiveRepeated.ReferenceTypeProviders.Field9Provider.Allocate(world); + { component.Field9 = new global::System.Collections.Generic.List(); var list = component.Field9; var listLength = obj.GetUint64Count(9); - + for (var i = 0; i < listLength; i++) { list.Add(obj.IndexUint64(9, (uint) i)); } } + component.field10Handle = global::Improbable.TestSchema.ExhaustiveRepeated.ReferenceTypeProviders.Field10Provider.Allocate(world); + { component.Field10 = new global::System.Collections.Generic.List(); var list = component.Field10; var listLength = obj.GetSint32Count(10); - + for (var i = 0; i < listLength; i++) { list.Add(obj.IndexSint32(10, (uint) i)); } } + component.field11Handle = global::Improbable.TestSchema.ExhaustiveRepeated.ReferenceTypeProviders.Field11Provider.Allocate(world); + { component.Field11 = new global::System.Collections.Generic.List(); var list = component.Field11; var listLength = obj.GetSint64Count(11); - + for (var i = 0; i < listLength; i++) { list.Add(obj.IndexSint64(11, (uint) i)); } } + component.field12Handle = global::Improbable.TestSchema.ExhaustiveRepeated.ReferenceTypeProviders.Field12Provider.Allocate(world); + { component.Field12 = new global::System.Collections.Generic.List(); var list = component.Field12; var listLength = obj.GetFixed32Count(12); - + for (var i = 0; i < listLength; i++) { list.Add(obj.IndexFixed32(12, (uint) i)); } } + component.field13Handle = global::Improbable.TestSchema.ExhaustiveRepeated.ReferenceTypeProviders.Field13Provider.Allocate(world); + { component.Field13 = new global::System.Collections.Generic.List(); var list = component.Field13; var listLength = obj.GetFixed64Count(13); - + for (var i = 0; i < listLength; i++) { list.Add(obj.IndexFixed64(13, (uint) i)); } } + component.field14Handle = global::Improbable.TestSchema.ExhaustiveRepeated.ReferenceTypeProviders.Field14Provider.Allocate(world); + { component.Field14 = new global::System.Collections.Generic.List(); var list = component.Field14; var listLength = obj.GetSfixed32Count(14); - + for (var i = 0; i < listLength; i++) { list.Add(obj.IndexSfixed32(14, (uint) i)); } } + component.field15Handle = global::Improbable.TestSchema.ExhaustiveRepeated.ReferenceTypeProviders.Field15Provider.Allocate(world); + { component.Field15 = new global::System.Collections.Generic.List(); var list = component.Field15; var listLength = obj.GetSfixed64Count(15); - + for (var i = 0; i < listLength; i++) { list.Add(obj.IndexSfixed64(15, (uint) i)); } } + component.field16Handle = global::Improbable.TestSchema.ExhaustiveRepeated.ReferenceTypeProviders.Field16Provider.Allocate(world); + { component.Field16 = new global::System.Collections.Generic.List(); var list = component.Field16; var listLength = obj.GetEntityIdCount(16); - + for (var i = 0; i < listLength; i++) { list.Add(obj.IndexEntityIdStruct(16, (uint) i)); } } + component.field17Handle = global::Improbable.TestSchema.ExhaustiveRepeated.ReferenceTypeProviders.Field17Provider.Allocate(world); + { component.Field17 = new global::System.Collections.Generic.List(); var list = component.Field17; var listLength = obj.GetObjectCount(17); - + for (var i = 0; i < listLength; i++) { list.Add(global::Improbable.TestSchema.SomeType.Serialization.Deserialize(obj.IndexObject(17, (uint) i))); } } + component.field18Handle = global::Improbable.TestSchema.ExhaustiveRepeated.ReferenceTypeProviders.Field18Provider.Allocate(world); + { component.Field18 = new global::System.Collections.Generic.List(); var list = component.Field18; var listLength = obj.GetEnumCount(18); - + for (var i = 0; i < listLength; i++) { list.Add((global::Improbable.TestSchema.SomeEnum) obj.IndexEnum(18, (uint) i)); } } + return component; } @@ -1281,292 +1412,310 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveRep { var listSize = obj.GetBoolCount(1); - + var isCleared = updateObj.IsFieldCleared(1); - + if (listSize > 0 || isCleared) { update.Field1 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.List()); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexBool(1, (uint) i); update.Field1.Value.Add(value); } } + { var listSize = obj.GetFloatCount(2); - + var isCleared = updateObj.IsFieldCleared(2); - + if (listSize > 0 || isCleared) { update.Field2 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.List()); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexFloat(2, (uint) i); update.Field2.Value.Add(value); } } + { var listSize = obj.GetBytesCount(3); - + var isCleared = updateObj.IsFieldCleared(3); - + if (listSize > 0 || isCleared) { update.Field3 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.List()); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexBytes(3, (uint) i); update.Field3.Value.Add(value); } } + { var listSize = obj.GetInt32Count(4); - + var isCleared = updateObj.IsFieldCleared(4); - + if (listSize > 0 || isCleared) { update.Field4 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.List()); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexInt32(4, (uint) i); update.Field4.Value.Add(value); } } + { var listSize = obj.GetInt64Count(5); - + var isCleared = updateObj.IsFieldCleared(5); - + if (listSize > 0 || isCleared) { update.Field5 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.List()); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexInt64(5, (uint) i); update.Field5.Value.Add(value); } } + { var listSize = obj.GetDoubleCount(6); - + var isCleared = updateObj.IsFieldCleared(6); - + if (listSize > 0 || isCleared) { update.Field6 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.List()); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexDouble(6, (uint) i); update.Field6.Value.Add(value); } } + { var listSize = obj.GetStringCount(7); - + var isCleared = updateObj.IsFieldCleared(7); - + if (listSize > 0 || isCleared) { update.Field7 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.List()); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexString(7, (uint) i); update.Field7.Value.Add(value); } } + { var listSize = obj.GetUint32Count(8); - + var isCleared = updateObj.IsFieldCleared(8); - + if (listSize > 0 || isCleared) { update.Field8 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.List()); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexUint32(8, (uint) i); update.Field8.Value.Add(value); } } + { var listSize = obj.GetUint64Count(9); - + var isCleared = updateObj.IsFieldCleared(9); - + if (listSize > 0 || isCleared) { update.Field9 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.List()); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexUint64(9, (uint) i); update.Field9.Value.Add(value); } } + { var listSize = obj.GetSint32Count(10); - + var isCleared = updateObj.IsFieldCleared(10); - + if (listSize > 0 || isCleared) { update.Field10 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.List()); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexSint32(10, (uint) i); update.Field10.Value.Add(value); } } + { var listSize = obj.GetSint64Count(11); - + var isCleared = updateObj.IsFieldCleared(11); - + if (listSize > 0 || isCleared) { update.Field11 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.List()); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexSint64(11, (uint) i); update.Field11.Value.Add(value); } } + { var listSize = obj.GetFixed32Count(12); - + var isCleared = updateObj.IsFieldCleared(12); - + if (listSize > 0 || isCleared) { update.Field12 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.List()); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexFixed32(12, (uint) i); update.Field12.Value.Add(value); } } + { var listSize = obj.GetFixed64Count(13); - + var isCleared = updateObj.IsFieldCleared(13); - + if (listSize > 0 || isCleared) { update.Field13 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.List()); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexFixed64(13, (uint) i); update.Field13.Value.Add(value); } } + { var listSize = obj.GetSfixed32Count(14); - + var isCleared = updateObj.IsFieldCleared(14); - + if (listSize > 0 || isCleared) { update.Field14 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.List()); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexSfixed32(14, (uint) i); update.Field14.Value.Add(value); } } + { var listSize = obj.GetSfixed64Count(15); - + var isCleared = updateObj.IsFieldCleared(15); - + if (listSize > 0 || isCleared) { update.Field15 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.List()); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexSfixed64(15, (uint) i); update.Field15.Value.Add(value); } } + { var listSize = obj.GetEntityIdCount(16); - + var isCleared = updateObj.IsFieldCleared(16); - + if (listSize > 0 || isCleared) { update.Field16 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.List()); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexEntityIdStruct(16, (uint) i); update.Field16.Value.Add(value); } } + { var listSize = obj.GetObjectCount(17); - + var isCleared = updateObj.IsFieldCleared(17); - + if (listSize > 0 || isCleared) { update.Field17 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.List()); } - + for (var i = 0; i < listSize; i++) { var value = global::Improbable.TestSchema.SomeType.Serialization.Deserialize(obj.IndexObject(17, (uint) i)); update.Field17.Value.Add(value); } } + { var listSize = obj.GetEnumCount(18); - + var isCleared = updateObj.IsFieldCleared(18); - + if (listSize > 0 || isCleared) { update.Field18 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.List()); } - + for (var i = 0; i < listSize; i++) { var value = (global::Improbable.TestSchema.SomeEnum) obj.IndexEnum(18, (uint) i); update.Field18.Value.Add(value); } } + return update; } @@ -1578,183 +1727,201 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveRep { var listSize = obj.GetBoolCount(1); update.Field1 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.List()); - + for (var i = 0; i < listSize; i++) { var value = obj.IndexBool(1, (uint) i); update.Field1.Value.Add(value); } } + { var listSize = obj.GetFloatCount(2); update.Field2 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.List()); - + for (var i = 0; i < listSize; i++) { var value = obj.IndexFloat(2, (uint) i); update.Field2.Value.Add(value); } } + { var listSize = obj.GetBytesCount(3); update.Field3 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.List()); - + for (var i = 0; i < listSize; i++) { var value = obj.IndexBytes(3, (uint) i); update.Field3.Value.Add(value); } } + { var listSize = obj.GetInt32Count(4); update.Field4 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.List()); - + for (var i = 0; i < listSize; i++) { var value = obj.IndexInt32(4, (uint) i); update.Field4.Value.Add(value); } } + { var listSize = obj.GetInt64Count(5); update.Field5 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.List()); - + for (var i = 0; i < listSize; i++) { var value = obj.IndexInt64(5, (uint) i); update.Field5.Value.Add(value); } } + { var listSize = obj.GetDoubleCount(6); update.Field6 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.List()); - + for (var i = 0; i < listSize; i++) { var value = obj.IndexDouble(6, (uint) i); update.Field6.Value.Add(value); } } + { var listSize = obj.GetStringCount(7); update.Field7 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.List()); - + for (var i = 0; i < listSize; i++) { var value = obj.IndexString(7, (uint) i); update.Field7.Value.Add(value); } } + { var listSize = obj.GetUint32Count(8); update.Field8 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.List()); - + for (var i = 0; i < listSize; i++) { var value = obj.IndexUint32(8, (uint) i); update.Field8.Value.Add(value); } } + { var listSize = obj.GetUint64Count(9); update.Field9 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.List()); - + for (var i = 0; i < listSize; i++) { var value = obj.IndexUint64(9, (uint) i); update.Field9.Value.Add(value); } } + { var listSize = obj.GetSint32Count(10); update.Field10 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.List()); - + for (var i = 0; i < listSize; i++) { var value = obj.IndexSint32(10, (uint) i); update.Field10.Value.Add(value); } } + { var listSize = obj.GetSint64Count(11); update.Field11 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.List()); - + for (var i = 0; i < listSize; i++) { var value = obj.IndexSint64(11, (uint) i); update.Field11.Value.Add(value); } } + { var listSize = obj.GetFixed32Count(12); update.Field12 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.List()); - + for (var i = 0; i < listSize; i++) { var value = obj.IndexFixed32(12, (uint) i); update.Field12.Value.Add(value); } } + { var listSize = obj.GetFixed64Count(13); update.Field13 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.List()); - + for (var i = 0; i < listSize; i++) { var value = obj.IndexFixed64(13, (uint) i); update.Field13.Value.Add(value); } } + { var listSize = obj.GetSfixed32Count(14); update.Field14 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.List()); - + for (var i = 0; i < listSize; i++) { var value = obj.IndexSfixed32(14, (uint) i); update.Field14.Value.Add(value); } } + { var listSize = obj.GetSfixed64Count(15); update.Field15 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.List()); - + for (var i = 0; i < listSize; i++) { var value = obj.IndexSfixed64(15, (uint) i); update.Field15.Value.Add(value); } } + { var listSize = obj.GetEntityIdCount(16); update.Field16 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.List()); - + for (var i = 0; i < listSize; i++) { var value = obj.IndexEntityIdStruct(16, (uint) i); update.Field16.Value.Add(value); } } + { var listSize = obj.GetObjectCount(17); update.Field17 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.List()); - + for (var i = 0; i < listSize; i++) { var value = global::Improbable.TestSchema.SomeType.Serialization.Deserialize(obj.IndexObject(17, (uint) i)); update.Field17.Value.Add(value); } } + { var listSize = obj.GetEnumCount(18); update.Field18 = new global::Improbable.Gdk.Core.Option>(new global::System.Collections.Generic.List()); - + for (var i = 0; i < listSize; i++) { var value = (global::Improbable.TestSchema.SomeEnum) obj.IndexEnum(18, (uint) i); update.Field18.Value.Add(value); } } + return update; } @@ -1766,182 +1933,200 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveRep component.Field1 = new global::System.Collections.Generic.List(); var list = component.Field1; var listLength = obj.GetBoolCount(1); - + for (var i = 0; i < listLength; i++) { list.Add(obj.IndexBool(1, (uint) i)); } } + { component.Field2 = new global::System.Collections.Generic.List(); var list = component.Field2; var listLength = obj.GetFloatCount(2); - + for (var i = 0; i < listLength; i++) { list.Add(obj.IndexFloat(2, (uint) i)); } } + { component.Field3 = new global::System.Collections.Generic.List(); var list = component.Field3; var listLength = obj.GetBytesCount(3); - + for (var i = 0; i < listLength; i++) { list.Add(obj.IndexBytes(3, (uint) i)); } } + { component.Field4 = new global::System.Collections.Generic.List(); var list = component.Field4; var listLength = obj.GetInt32Count(4); - + for (var i = 0; i < listLength; i++) { list.Add(obj.IndexInt32(4, (uint) i)); } } + { component.Field5 = new global::System.Collections.Generic.List(); var list = component.Field5; var listLength = obj.GetInt64Count(5); - + for (var i = 0; i < listLength; i++) { list.Add(obj.IndexInt64(5, (uint) i)); } } + { component.Field6 = new global::System.Collections.Generic.List(); var list = component.Field6; var listLength = obj.GetDoubleCount(6); - + for (var i = 0; i < listLength; i++) { list.Add(obj.IndexDouble(6, (uint) i)); } } + { component.Field7 = new global::System.Collections.Generic.List(); var list = component.Field7; var listLength = obj.GetStringCount(7); - + for (var i = 0; i < listLength; i++) { list.Add(obj.IndexString(7, (uint) i)); } } + { component.Field8 = new global::System.Collections.Generic.List(); var list = component.Field8; var listLength = obj.GetUint32Count(8); - + for (var i = 0; i < listLength; i++) { list.Add(obj.IndexUint32(8, (uint) i)); } } + { component.Field9 = new global::System.Collections.Generic.List(); var list = component.Field9; var listLength = obj.GetUint64Count(9); - + for (var i = 0; i < listLength; i++) { list.Add(obj.IndexUint64(9, (uint) i)); } } + { component.Field10 = new global::System.Collections.Generic.List(); var list = component.Field10; var listLength = obj.GetSint32Count(10); - + for (var i = 0; i < listLength; i++) { list.Add(obj.IndexSint32(10, (uint) i)); } } + { component.Field11 = new global::System.Collections.Generic.List(); var list = component.Field11; var listLength = obj.GetSint64Count(11); - + for (var i = 0; i < listLength; i++) { list.Add(obj.IndexSint64(11, (uint) i)); } } + { component.Field12 = new global::System.Collections.Generic.List(); var list = component.Field12; var listLength = obj.GetFixed32Count(12); - + for (var i = 0; i < listLength; i++) { list.Add(obj.IndexFixed32(12, (uint) i)); } } + { component.Field13 = new global::System.Collections.Generic.List(); var list = component.Field13; var listLength = obj.GetFixed64Count(13); - + for (var i = 0; i < listLength; i++) { list.Add(obj.IndexFixed64(13, (uint) i)); } } + { component.Field14 = new global::System.Collections.Generic.List(); var list = component.Field14; var listLength = obj.GetSfixed32Count(14); - + for (var i = 0; i < listLength; i++) { list.Add(obj.IndexSfixed32(14, (uint) i)); } } + { component.Field15 = new global::System.Collections.Generic.List(); var list = component.Field15; var listLength = obj.GetSfixed64Count(15); - + for (var i = 0; i < listLength; i++) { list.Add(obj.IndexSfixed64(15, (uint) i)); } } + { component.Field16 = new global::System.Collections.Generic.List(); var list = component.Field16; var listLength = obj.GetEntityIdCount(16); - + for (var i = 0; i < listLength; i++) { list.Add(obj.IndexEntityIdStruct(16, (uint) i)); } } + { component.Field17 = new global::System.Collections.Generic.List(); var list = component.Field17; var listLength = obj.GetObjectCount(17); - + for (var i = 0; i < listLength; i++) { list.Add(global::Improbable.TestSchema.SomeType.Serialization.Deserialize(obj.IndexObject(17, (uint) i))); } } + { component.Field18 = new global::System.Collections.Generic.List(); var list = component.Field18; var listLength = obj.GetEnumCount(18); - + for (var i = 0; i < listLength; i++) { list.Add((global::Improbable.TestSchema.SomeEnum) obj.IndexEnum(18, (uint) i)); } } + return component; } @@ -1951,286 +2136,303 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen { var listSize = obj.GetBoolCount(1); - + var isCleared = updateObj.IsFieldCleared(1); - + if (listSize > 0 || isCleared) { component.Field1.Clear(); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexBool(1, (uint) i); component.Field1.Add(value); } } + { var listSize = obj.GetFloatCount(2); - + var isCleared = updateObj.IsFieldCleared(2); - + if (listSize > 0 || isCleared) { component.Field2.Clear(); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexFloat(2, (uint) i); component.Field2.Add(value); } } + { var listSize = obj.GetBytesCount(3); - + var isCleared = updateObj.IsFieldCleared(3); - + if (listSize > 0 || isCleared) { component.Field3.Clear(); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexBytes(3, (uint) i); component.Field3.Add(value); } } + { var listSize = obj.GetInt32Count(4); - + var isCleared = updateObj.IsFieldCleared(4); - + if (listSize > 0 || isCleared) { component.Field4.Clear(); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexInt32(4, (uint) i); component.Field4.Add(value); } } + { var listSize = obj.GetInt64Count(5); - + var isCleared = updateObj.IsFieldCleared(5); - + if (listSize > 0 || isCleared) { component.Field5.Clear(); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexInt64(5, (uint) i); component.Field5.Add(value); } } + { var listSize = obj.GetDoubleCount(6); - + var isCleared = updateObj.IsFieldCleared(6); - + if (listSize > 0 || isCleared) { component.Field6.Clear(); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexDouble(6, (uint) i); component.Field6.Add(value); } } + { var listSize = obj.GetStringCount(7); - + var isCleared = updateObj.IsFieldCleared(7); - + if (listSize > 0 || isCleared) { component.Field7.Clear(); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexString(7, (uint) i); component.Field7.Add(value); } } + { var listSize = obj.GetUint32Count(8); - + var isCleared = updateObj.IsFieldCleared(8); - + if (listSize > 0 || isCleared) { component.Field8.Clear(); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexUint32(8, (uint) i); component.Field8.Add(value); } } + { var listSize = obj.GetUint64Count(9); - + var isCleared = updateObj.IsFieldCleared(9); - + if (listSize > 0 || isCleared) { component.Field9.Clear(); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexUint64(9, (uint) i); component.Field9.Add(value); } } + { var listSize = obj.GetSint32Count(10); - + var isCleared = updateObj.IsFieldCleared(10); - + if (listSize > 0 || isCleared) { component.Field10.Clear(); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexSint32(10, (uint) i); component.Field10.Add(value); } } + { var listSize = obj.GetSint64Count(11); - + var isCleared = updateObj.IsFieldCleared(11); - + if (listSize > 0 || isCleared) { component.Field11.Clear(); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexSint64(11, (uint) i); component.Field11.Add(value); } } + { var listSize = obj.GetFixed32Count(12); - + var isCleared = updateObj.IsFieldCleared(12); - + if (listSize > 0 || isCleared) { component.Field12.Clear(); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexFixed32(12, (uint) i); component.Field12.Add(value); } } + { var listSize = obj.GetFixed64Count(13); - + var isCleared = updateObj.IsFieldCleared(13); - + if (listSize > 0 || isCleared) { component.Field13.Clear(); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexFixed64(13, (uint) i); component.Field13.Add(value); } } + { var listSize = obj.GetSfixed32Count(14); - + var isCleared = updateObj.IsFieldCleared(14); - + if (listSize > 0 || isCleared) { component.Field14.Clear(); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexSfixed32(14, (uint) i); component.Field14.Add(value); } } + { var listSize = obj.GetSfixed64Count(15); - + var isCleared = updateObj.IsFieldCleared(15); - + if (listSize > 0 || isCleared) { component.Field15.Clear(); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexSfixed64(15, (uint) i); component.Field15.Add(value); } } + { var listSize = obj.GetEntityIdCount(16); - + var isCleared = updateObj.IsFieldCleared(16); - + if (listSize > 0 || isCleared) { component.Field16.Clear(); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexEntityIdStruct(16, (uint) i); component.Field16.Add(value); } } + { var listSize = obj.GetObjectCount(17); - + var isCleared = updateObj.IsFieldCleared(17); - + if (listSize > 0 || isCleared) { component.Field17.Clear(); } - + for (var i = 0; i < listSize; i++) { var value = global::Improbable.TestSchema.SomeType.Serialization.Deserialize(obj.IndexObject(17, (uint) i)); component.Field17.Add(value); } } + { var listSize = obj.GetEnumCount(18); - + var isCleared = updateObj.IsFieldCleared(18); - + if (listSize > 0 || isCleared) { component.Field18.Clear(); } - + for (var i = 0; i < listSize; i++) { var value = (global::Improbable.TestSchema.SomeEnum) obj.IndexEnum(18, (uint) i); @@ -2245,286 +2447,303 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen { var listSize = obj.GetBoolCount(1); - + var isCleared = updateObj.IsFieldCleared(1); - + if (listSize > 0 || isCleared) { snapshot.Field1.Clear(); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexBool(1, (uint) i); snapshot.Field1.Add(value); } } + { var listSize = obj.GetFloatCount(2); - + var isCleared = updateObj.IsFieldCleared(2); - + if (listSize > 0 || isCleared) { snapshot.Field2.Clear(); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexFloat(2, (uint) i); snapshot.Field2.Add(value); } } + { var listSize = obj.GetBytesCount(3); - + var isCleared = updateObj.IsFieldCleared(3); - + if (listSize > 0 || isCleared) { snapshot.Field3.Clear(); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexBytes(3, (uint) i); snapshot.Field3.Add(value); } } + { var listSize = obj.GetInt32Count(4); - + var isCleared = updateObj.IsFieldCleared(4); - + if (listSize > 0 || isCleared) { snapshot.Field4.Clear(); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexInt32(4, (uint) i); snapshot.Field4.Add(value); } } + { var listSize = obj.GetInt64Count(5); - + var isCleared = updateObj.IsFieldCleared(5); - + if (listSize > 0 || isCleared) { snapshot.Field5.Clear(); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexInt64(5, (uint) i); snapshot.Field5.Add(value); } } + { var listSize = obj.GetDoubleCount(6); - + var isCleared = updateObj.IsFieldCleared(6); - + if (listSize > 0 || isCleared) { snapshot.Field6.Clear(); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexDouble(6, (uint) i); snapshot.Field6.Add(value); } } + { var listSize = obj.GetStringCount(7); - + var isCleared = updateObj.IsFieldCleared(7); - + if (listSize > 0 || isCleared) { snapshot.Field7.Clear(); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexString(7, (uint) i); snapshot.Field7.Add(value); } } + { var listSize = obj.GetUint32Count(8); - + var isCleared = updateObj.IsFieldCleared(8); - + if (listSize > 0 || isCleared) { snapshot.Field8.Clear(); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexUint32(8, (uint) i); snapshot.Field8.Add(value); } } + { var listSize = obj.GetUint64Count(9); - + var isCleared = updateObj.IsFieldCleared(9); - + if (listSize > 0 || isCleared) { snapshot.Field9.Clear(); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexUint64(9, (uint) i); snapshot.Field9.Add(value); } } + { var listSize = obj.GetSint32Count(10); - + var isCleared = updateObj.IsFieldCleared(10); - + if (listSize > 0 || isCleared) { snapshot.Field10.Clear(); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexSint32(10, (uint) i); snapshot.Field10.Add(value); } } + { var listSize = obj.GetSint64Count(11); - + var isCleared = updateObj.IsFieldCleared(11); - + if (listSize > 0 || isCleared) { snapshot.Field11.Clear(); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexSint64(11, (uint) i); snapshot.Field11.Add(value); } } + { var listSize = obj.GetFixed32Count(12); - + var isCleared = updateObj.IsFieldCleared(12); - + if (listSize > 0 || isCleared) { snapshot.Field12.Clear(); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexFixed32(12, (uint) i); snapshot.Field12.Add(value); } } + { var listSize = obj.GetFixed64Count(13); - + var isCleared = updateObj.IsFieldCleared(13); - + if (listSize > 0 || isCleared) { snapshot.Field13.Clear(); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexFixed64(13, (uint) i); snapshot.Field13.Add(value); } } + { var listSize = obj.GetSfixed32Count(14); - + var isCleared = updateObj.IsFieldCleared(14); - + if (listSize > 0 || isCleared) { snapshot.Field14.Clear(); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexSfixed32(14, (uint) i); snapshot.Field14.Add(value); } } + { var listSize = obj.GetSfixed64Count(15); - + var isCleared = updateObj.IsFieldCleared(15); - + if (listSize > 0 || isCleared) { snapshot.Field15.Clear(); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexSfixed64(15, (uint) i); snapshot.Field15.Add(value); } } + { var listSize = obj.GetEntityIdCount(16); - + var isCleared = updateObj.IsFieldCleared(16); - + if (listSize > 0 || isCleared) { snapshot.Field16.Clear(); } - + for (var i = 0; i < listSize; i++) { var value = obj.IndexEntityIdStruct(16, (uint) i); snapshot.Field16.Add(value); } } + { var listSize = obj.GetObjectCount(17); - + var isCleared = updateObj.IsFieldCleared(17); - + if (listSize > 0 || isCleared) { snapshot.Field17.Clear(); } - + for (var i = 0; i < listSize; i++) { var value = global::Improbable.TestSchema.SomeType.Serialization.Deserialize(obj.IndexObject(17, (uint) i)); snapshot.Field17.Add(value); } } + { var listSize = obj.GetEnumCount(18); - + var isCleared = updateObj.IsFieldCleared(18); - + if (listSize > 0 || isCleared) { snapshot.Field18.Clear(); } - + for (var i = 0; i < listSize; i++) { var value = (global::Improbable.TestSchema.SomeEnum) obj.IndexEnum(18, (uint) i); @@ -2612,7 +2831,7 @@ private static Update SnapshotToUpdate(in Snapshot snapshot) Field15 = snapshot.Field15, Field16 = snapshot.Field16, Field17 = snapshot.Field17, - Field18 = snapshot.Field18, + Field18 = snapshot.Field18 }; return update; diff --git a/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveRepeatedComponentReaderWriter.cs b/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveRepeatedComponentReaderWriter.cs index 24ff0a141b..3575bb5a8d 100644 --- a/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveRepeatedComponentReaderWriter.cs +++ b/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveRepeatedComponentReaderWriter.cs @@ -910,7 +910,6 @@ public event Action OnUpdate } } - internal ExhaustiveRepeatedReader(World world, Entity entity, EntityId entityId) { Entity = entity; @@ -945,7 +944,6 @@ public void RemoveAllCallbacks() updateCallbackToCallbackKey.Clear(); } - if (field1UpdateCallbackToCallbackKey != null) { foreach (var callbackToKey in field1UpdateCallbackToCallbackKey) @@ -1232,7 +1230,6 @@ public void SendUpdate(ExhaustiveRepeated.Update update) EntityManager.SetComponentData(Entity, component); } - public void AcknowledgeAuthorityLoss() { ComponentUpdateSystem.AcknowledgeAuthorityLoss(EntityId, ExhaustiveRepeated.ComponentId); diff --git a/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveRepeatedUpdateSender.cs b/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveRepeatedUpdateSender.cs index e57fa5998c..3a60141a24 100644 --- a/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveRepeatedUpdateSender.cs +++ b/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveRepeatedUpdateSender.cs @@ -40,14 +40,12 @@ public void SendUpdates( var spatialOSEntityType = system.GetArchetypeChunkComponentType(true); var componentType = system.GetArchetypeChunkComponentType(); - var authorityType = system.GetArchetypeChunkSharedComponentType(); foreach (var chunk in chunkArray) { var entityIdArray = chunk.GetNativeArray(spatialOSEntityType); var componentArray = chunk.GetNativeArray(componentType); - var authorityIndex = chunk.GetSharedComponentIndex(authorityType); if (!entityManager.GetSharedComponentData(authorityIndex).HasAuthority) @@ -58,6 +56,7 @@ public void SendUpdates( for (var i = 0; i < componentArray.Length; i++) { var data = componentArray[i]; + if (data.IsDataDirty()) { Update update = new Update(); diff --git a/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveSingular.cs b/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveSingular.cs index 48aaa301dd..6baaee3616 100644 --- a/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveSingular.cs +++ b/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveSingular.cs @@ -27,9 +27,11 @@ public struct Component : IComponentData, ISpatialComponentData, ISnapshottable< public bool IsDataDirty() { var isDataDirty = false; + isDataDirty |= (dirtyBits0 != 0x0); isDataDirty |= (dirtyBits1 != 0x0); isDataDirty |= (dirtyBits2 != 0x0); + return isDataDirty; } @@ -45,6 +47,7 @@ component MyComponent In that case, val_a corresponds to propertyIndex 0 and val_b corresponds to propertyIndex 1 in this method. This method throws an InvalidOperationException in case your component doesn't contain properties. */ + public bool IsDataDirty(int propertyIndex) { if (propertyIndex < 0 || propertyIndex >= 18) @@ -60,8 +63,10 @@ public bool IsDataDirty(int propertyIndex) { case 0: return (dirtyBits0 & (0x1 << propertyIndex % 8)) != 0x0; + case 1: return (dirtyBits1 & (0x1 << propertyIndex % 8)) != 0x0; + case 2: return (dirtyBits2 & (0x1 << propertyIndex % 8)) != 0x0; } @@ -87,9 +92,11 @@ public void MarkDataDirty(int propertyIndex) case 0: dirtyBits0 |= (byte) (0x1 << propertyIndex % 8); break; + case 1: dirtyBits1 |= (byte) (0x1 << propertyIndex % 8); break; + case 2: dirtyBits2 |= (byte) (0x1 << propertyIndex % 8); break; @@ -424,28 +431,46 @@ public static class Serialization public static void SerializeComponent(global::Improbable.TestSchema.ExhaustiveSingular.Component component, global::Improbable.Worker.CInterop.SchemaObject obj, global::Unity.Entities.World world) { obj.AddBool(1, component.Field1); + obj.AddFloat(2, component.Field2); + obj.AddBytes(3, component.Field3); + obj.AddInt32(4, component.Field4); + obj.AddInt64(5, component.Field5); + obj.AddDouble(6, component.Field6); + obj.AddString(7, component.Field7); + obj.AddUint32(8, component.Field8); + obj.AddUint64(9, component.Field9); + obj.AddSint32(10, component.Field10); + obj.AddSint64(11, component.Field11); + obj.AddFixed32(12, component.Field12); + obj.AddFixed64(13, component.Field13); + obj.AddSfixed32(14, component.Field14); + obj.AddSfixed64(15, component.Field15); + obj.AddEntityId(16, component.Field16); + global::Improbable.TestSchema.SomeType.Serialization.Serialize(component.Field17, obj.AddObject(17)); + obj.AddEnum(18, (uint) component.Field18); } public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveSingular.Component component, global::Improbable.Worker.CInterop.SchemaComponentUpdate updateObj) { var obj = updateObj.GetFields(); + if (component.IsDataDirty(0)) { obj.AddBool(1, component.Field1); @@ -535,135 +560,170 @@ public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveSingu { obj.AddEnum(18, (uint) component.Field18); } - } public static void SerializeUpdate(global::Improbable.TestSchema.ExhaustiveSingular.Update update, global::Improbable.Worker.CInterop.SchemaComponentUpdate updateObj) { var obj = updateObj.GetFields(); + { if (update.Field1.HasValue) { var field = update.Field1.Value; + obj.AddBool(1, field); } } + { if (update.Field2.HasValue) { var field = update.Field2.Value; + obj.AddFloat(2, field); } } + { if (update.Field3.HasValue) { var field = update.Field3.Value; + obj.AddBytes(3, field); } } + { if (update.Field4.HasValue) { var field = update.Field4.Value; + obj.AddInt32(4, field); } } + { if (update.Field5.HasValue) { var field = update.Field5.Value; + obj.AddInt64(5, field); } } + { if (update.Field6.HasValue) { var field = update.Field6.Value; + obj.AddDouble(6, field); } } + { if (update.Field7.HasValue) { var field = update.Field7.Value; + obj.AddString(7, field); } } + { if (update.Field8.HasValue) { var field = update.Field8.Value; + obj.AddUint32(8, field); } } + { if (update.Field9.HasValue) { var field = update.Field9.Value; + obj.AddUint64(9, field); } } + { if (update.Field10.HasValue) { var field = update.Field10.Value; + obj.AddSint32(10, field); } } + { if (update.Field11.HasValue) { var field = update.Field11.Value; + obj.AddSint64(11, field); } } + { if (update.Field12.HasValue) { var field = update.Field12.Value; + obj.AddFixed32(12, field); } } + { if (update.Field13.HasValue) { var field = update.Field13.Value; + obj.AddFixed64(13, field); } } + { if (update.Field14.HasValue) { var field = update.Field14.Value; + obj.AddSfixed32(14, field); } } + { if (update.Field15.HasValue) { var field = update.Field15.Value; + obj.AddSfixed64(15, field); } } + { if (update.Field16.HasValue) { var field = update.Field16.Value; + obj.AddEntityId(16, field); } } + { if (update.Field17.HasValue) { var field = update.Field17.Value; + global::Improbable.TestSchema.SomeType.Serialization.Serialize(field, obj.AddObject(17)); } } + { if (update.Field18.HasValue) { var field = update.Field18.Value; + obj.AddEnum(18, (uint) field); } } @@ -706,7 +766,6 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveSin global::Improbable.TestSchema.SomeType.Serialization.Serialize(snapshot.Field17, obj.AddObject(17)); obj.AddEnum(18, (uint) snapshot.Field18); - } public static global::Improbable.TestSchema.ExhaustiveSingular.Component Deserialize(global::Improbable.Worker.CInterop.SchemaObject obj, global::Unity.Entities.World world) @@ -714,25 +773,45 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveSin var component = new global::Improbable.TestSchema.ExhaustiveSingular.Component(); component.Field1 = obj.GetBool(1); + component.Field2 = obj.GetFloat(2); + component.field3Handle = global::Improbable.TestSchema.ExhaustiveSingular.ReferenceTypeProviders.Field3Provider.Allocate(world); + component.Field3 = obj.GetBytes(3); + component.Field4 = obj.GetInt32(4); + component.Field5 = obj.GetInt64(5); + component.Field6 = obj.GetDouble(6); + component.field7Handle = global::Improbable.TestSchema.ExhaustiveSingular.ReferenceTypeProviders.Field7Provider.Allocate(world); + component.Field7 = obj.GetString(7); + component.Field8 = obj.GetUint32(8); + component.Field9 = obj.GetUint64(9); + component.Field10 = obj.GetSint32(10); + component.Field11 = obj.GetSint64(11); + component.Field12 = obj.GetFixed32(12); + component.Field13 = obj.GetFixed64(13); + component.Field14 = obj.GetSfixed32(14); + component.Field15 = obj.GetSfixed64(15); + component.Field16 = obj.GetEntityIdStruct(16); + component.Field17 = global::Improbable.TestSchema.SomeType.Serialization.Deserialize(obj.GetObject(17)); + component.Field18 = (global::Improbable.TestSchema.SomeEnum) obj.GetEnum(18); + return component; } @@ -745,74 +824,92 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveSin { update.Field1 = obj.GetBool(1); } + if (obj.GetFloatCount(2) == 1) { update.Field2 = obj.GetFloat(2); } + if (obj.GetBytesCount(3) == 1) { update.Field3 = obj.GetBytes(3); } + if (obj.GetInt32Count(4) == 1) { update.Field4 = obj.GetInt32(4); } + if (obj.GetInt64Count(5) == 1) { update.Field5 = obj.GetInt64(5); } + if (obj.GetDoubleCount(6) == 1) { update.Field6 = obj.GetDouble(6); } + if (obj.GetStringCount(7) == 1) { update.Field7 = obj.GetString(7); } + if (obj.GetUint32Count(8) == 1) { update.Field8 = obj.GetUint32(8); } + if (obj.GetUint64Count(9) == 1) { update.Field9 = obj.GetUint64(9); } + if (obj.GetSint32Count(10) == 1) { update.Field10 = obj.GetSint32(10); } + if (obj.GetSint64Count(11) == 1) { update.Field11 = obj.GetSint64(11); } + if (obj.GetFixed32Count(12) == 1) { update.Field12 = obj.GetFixed32(12); } + if (obj.GetFixed64Count(13) == 1) { update.Field13 = obj.GetFixed64(13); } + if (obj.GetSfixed32Count(14) == 1) { update.Field14 = obj.GetSfixed32(14); } + if (obj.GetSfixed64Count(15) == 1) { update.Field15 = obj.GetSfixed64(15); } + if (obj.GetEntityIdCount(16) == 1) { update.Field16 = obj.GetEntityIdStruct(16); } + if (obj.GetObjectCount(17) == 1) { update.Field17 = global::Improbable.TestSchema.SomeType.Serialization.Deserialize(obj.GetObject(17)); } + if (obj.GetEnumCount(18) == 1) { update.Field18 = (global::Improbable.TestSchema.SomeEnum) obj.GetEnum(18); } + return update; } @@ -822,23 +919,41 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveSin var obj = data.GetFields(); update.Field1 = obj.GetBool(1); + update.Field2 = obj.GetFloat(2); + update.Field3 = obj.GetBytes(3); + update.Field4 = obj.GetInt32(4); + update.Field5 = obj.GetInt64(5); + update.Field6 = obj.GetDouble(6); + update.Field7 = obj.GetString(7); + update.Field8 = obj.GetUint32(8); + update.Field9 = obj.GetUint64(9); + update.Field10 = obj.GetSint32(10); + update.Field11 = obj.GetSint64(11); + update.Field12 = obj.GetFixed32(12); + update.Field13 = obj.GetFixed64(13); + update.Field14 = obj.GetSfixed32(14); + update.Field15 = obj.GetSfixed64(15); + update.Field16 = obj.GetEntityIdStruct(16); + update.Field17 = global::Improbable.TestSchema.SomeType.Serialization.Deserialize(obj.GetObject(17)); + update.Field18 = (global::Improbable.TestSchema.SomeEnum) obj.GetEnum(18); + return update; } @@ -847,23 +962,41 @@ public static void SerializeSnapshot(global::Improbable.TestSchema.ExhaustiveSin var component = new global::Improbable.TestSchema.ExhaustiveSingular.Snapshot(); component.Field1 = obj.GetBool(1); + component.Field2 = obj.GetFloat(2); + component.Field3 = obj.GetBytes(3); + component.Field4 = obj.GetInt32(4); + component.Field5 = obj.GetInt64(5); + component.Field6 = obj.GetDouble(6); + component.Field7 = obj.GetString(7); + component.Field8 = obj.GetUint32(8); + component.Field9 = obj.GetUint64(9); + component.Field10 = obj.GetSint32(10); + component.Field11 = obj.GetSint64(11); + component.Field12 = obj.GetFixed32(12); + component.Field13 = obj.GetFixed64(13); + component.Field14 = obj.GetSfixed32(14); + component.Field15 = obj.GetSfixed64(15); + component.Field16 = obj.GetEntityIdStruct(16); + component.Field17 = global::Improbable.TestSchema.SomeType.Serialization.Deserialize(obj.GetObject(17)); + component.Field18 = (global::Improbable.TestSchema.SomeEnum) obj.GetEnum(18); + return component; } @@ -875,70 +1008,87 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen { component.Field1 = obj.GetBool(1); } + if (obj.GetFloatCount(2) == 1) { component.Field2 = obj.GetFloat(2); } + if (obj.GetBytesCount(3) == 1) { component.Field3 = obj.GetBytes(3); } + if (obj.GetInt32Count(4) == 1) { component.Field4 = obj.GetInt32(4); } + if (obj.GetInt64Count(5) == 1) { component.Field5 = obj.GetInt64(5); } + if (obj.GetDoubleCount(6) == 1) { component.Field6 = obj.GetDouble(6); } + if (obj.GetStringCount(7) == 1) { component.Field7 = obj.GetString(7); } + if (obj.GetUint32Count(8) == 1) { component.Field8 = obj.GetUint32(8); } + if (obj.GetUint64Count(9) == 1) { component.Field9 = obj.GetUint64(9); } + if (obj.GetSint32Count(10) == 1) { component.Field10 = obj.GetSint32(10); } + if (obj.GetSint64Count(11) == 1) { component.Field11 = obj.GetSint64(11); } + if (obj.GetFixed32Count(12) == 1) { component.Field12 = obj.GetFixed32(12); } + if (obj.GetFixed64Count(13) == 1) { component.Field13 = obj.GetFixed64(13); } + if (obj.GetSfixed32Count(14) == 1) { component.Field14 = obj.GetSfixed32(14); } + if (obj.GetSfixed64Count(15) == 1) { component.Field15 = obj.GetSfixed64(15); } + if (obj.GetEntityIdCount(16) == 1) { component.Field16 = obj.GetEntityIdStruct(16); } + if (obj.GetObjectCount(17) == 1) { component.Field17 = global::Improbable.TestSchema.SomeType.Serialization.Deserialize(obj.GetObject(17)); } + if (obj.GetEnumCount(18) == 1) { component.Field18 = (global::Improbable.TestSchema.SomeEnum) obj.GetEnum(18); @@ -953,70 +1103,87 @@ public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponen { snapshot.Field1 = obj.GetBool(1); } + if (obj.GetFloatCount(2) == 1) { snapshot.Field2 = obj.GetFloat(2); } + if (obj.GetBytesCount(3) == 1) { snapshot.Field3 = obj.GetBytes(3); } + if (obj.GetInt32Count(4) == 1) { snapshot.Field4 = obj.GetInt32(4); } + if (obj.GetInt64Count(5) == 1) { snapshot.Field5 = obj.GetInt64(5); } + if (obj.GetDoubleCount(6) == 1) { snapshot.Field6 = obj.GetDouble(6); } + if (obj.GetStringCount(7) == 1) { snapshot.Field7 = obj.GetString(7); } + if (obj.GetUint32Count(8) == 1) { snapshot.Field8 = obj.GetUint32(8); } + if (obj.GetUint64Count(9) == 1) { snapshot.Field9 = obj.GetUint64(9); } + if (obj.GetSint32Count(10) == 1) { snapshot.Field10 = obj.GetSint32(10); } + if (obj.GetSint64Count(11) == 1) { snapshot.Field11 = obj.GetSint64(11); } + if (obj.GetFixed32Count(12) == 1) { snapshot.Field12 = obj.GetFixed32(12); } + if (obj.GetFixed64Count(13) == 1) { snapshot.Field13 = obj.GetFixed64(13); } + if (obj.GetSfixed32Count(14) == 1) { snapshot.Field14 = obj.GetSfixed32(14); } + if (obj.GetSfixed64Count(15) == 1) { snapshot.Field15 = obj.GetSfixed64(15); } + if (obj.GetEntityIdCount(16) == 1) { snapshot.Field16 = obj.GetEntityIdStruct(16); } + if (obj.GetObjectCount(17) == 1) { snapshot.Field17 = global::Improbable.TestSchema.SomeType.Serialization.Deserialize(obj.GetObject(17)); } + if (obj.GetEnumCount(18) == 1) { snapshot.Field18 = (global::Improbable.TestSchema.SomeEnum) obj.GetEnum(18); @@ -1102,7 +1269,7 @@ private static Update SnapshotToUpdate(in Snapshot snapshot) Field15 = snapshot.Field15, Field16 = snapshot.Field16, Field17 = snapshot.Field17, - Field18 = snapshot.Field18, + Field18 = snapshot.Field18 }; return update; diff --git a/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveSingularComponentReaderWriter.cs b/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveSingularComponentReaderWriter.cs index a9834a46c6..4da3fd4b80 100644 --- a/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveSingularComponentReaderWriter.cs +++ b/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveSingularComponentReaderWriter.cs @@ -910,7 +910,6 @@ public event Action OnField15Update } } - internal ExhaustiveSingularReader(World world, Entity entity, EntityId entityId) { Entity = entity; @@ -945,7 +944,6 @@ public void RemoveAllCallbacks() updateCallbackToCallbackKey.Clear(); } - if (field1UpdateCallbackToCallbackKey != null) { foreach (var callbackToKey in field1UpdateCallbackToCallbackKey) @@ -1232,7 +1230,6 @@ public void SendUpdate(ExhaustiveSingular.Update update) EntityManager.SetComponentData(Entity, component); } - public void AcknowledgeAuthorityLoss() { ComponentUpdateSystem.AcknowledgeAuthorityLoss(EntityId, ExhaustiveSingular.ComponentId); diff --git a/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveSingularUpdateSender.cs b/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveSingularUpdateSender.cs index a24dac2b9f..14c4a6dbb3 100644 --- a/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveSingularUpdateSender.cs +++ b/test-project/Assets/Generated/Source/improbable/testschema/ExhaustiveSingularUpdateSender.cs @@ -40,14 +40,12 @@ public void SendUpdates( var spatialOSEntityType = system.GetArchetypeChunkComponentType(true); var componentType = system.GetArchetypeChunkComponentType(); - var authorityType = system.GetArchetypeChunkSharedComponentType(); foreach (var chunk in chunkArray) { var entityIdArray = chunk.GetNativeArray(spatialOSEntityType); var componentArray = chunk.GetNativeArray(componentType); - var authorityIndex = chunk.GetSharedComponentIndex(authorityType); if (!entityManager.GetSharedComponentData(authorityIndex).HasAuthority) @@ -58,6 +56,7 @@ public void SendUpdates( for (var i = 0; i < componentArray.Length; i++) { var data = componentArray[i]; + if (data.IsDataDirty()) { Update update = new Update(); diff --git a/workers/unity/Packages/io.improbable.gdk.core/.codegen/Source/CoreCodegenJob.cs b/workers/unity/Packages/io.improbable.gdk.core/.codegen/Source/CoreCodegenJob.cs index 6bc6c0e002..07f4dafff9 100644 --- a/workers/unity/Packages/io.improbable.gdk.core/.codegen/Source/CoreCodegenJob.cs +++ b/workers/unity/Packages/io.improbable.gdk.core/.codegen/Source/CoreCodegenJob.cs @@ -125,10 +125,6 @@ public CoreCodegenJob(string outputDir, IFileSystem fileSystem, DetailsStore sto protected override void RunImpl() { - logger.Info("Creating generators."); - var blittableComponentGenerator = new UnityComponentDataGenerator(); - var componentSenderGenerator = new UnityComponentSenderGenerator(); - logger.Trace("Starting code generation for enums."); foreach (var enumTarget in enumsToGenerate) { @@ -163,7 +159,7 @@ protected override void RunImpl() var package = componentTarget.Package; var componentFileName = Path.ChangeExtension(componentName, FileExtension); - var componentCode = blittableComponentGenerator.Generate(componentTarget.Content, package); + var componentCode = UnityComponentDataGenerator.Generate(componentTarget.Content, package); AddContent(Path.Combine(relativeOutputPath, componentFileName), componentCode); if (componentTarget.Content.CommandDetails.Count > 0) @@ -208,7 +204,7 @@ protected override void RunImpl() } var updateSenderFileName = Path.ChangeExtension($"{componentName}UpdateSender", FileExtension); - var updateSenderCode = componentSenderGenerator.Generate(componentTarget.Content, package); + var updateSenderCode = UnityComponentSenderGenerator.Generate(componentTarget.Content, package); AddContent(Path.Combine(relativeOutputPath, updateSenderFileName), updateSenderCode); var ecsViewManagerFileName = Path.ChangeExtension($"{componentName}EcsViewManager", FileExtension); diff --git a/workers/unity/Packages/io.improbable.gdk.core/.codegen/Source/Generators/Core/UnityComponentDataGenerator.cs b/workers/unity/Packages/io.improbable.gdk.core/.codegen/Source/Generators/Core/UnityComponentDataGenerator.cs new file mode 100644 index 0000000000..c670bd6c2d --- /dev/null +++ b/workers/unity/Packages/io.improbable.gdk.core/.codegen/Source/Generators/Core/UnityComponentDataGenerator.cs @@ -0,0 +1,556 @@ +using System.Collections.Generic; +using System.Linq; +using Improbable.Gdk.CodeGeneration.CodeWriter; +using Improbable.Gdk.CodeGeneration.CodeWriter.Scopes; +using Improbable.Gdk.CodeGeneration.Model.Details; +using NLog; + +namespace Improbable.Gdk.CodeGenerator +{ + public static class UnityComponentDataGenerator + { + private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); + + public static string Generate(UnityComponentDetails componentDetails, string qualifiedNamespace) + { + return CodeWriter.Populate(cgw => + { + cgw.UsingDirectives( + "Improbable.Gdk.Core", + "Improbable.Worker.CInterop", + "System", + "System.Collections.Generic", + "Unity.Entities" + ); + + cgw.Namespace(qualifiedNamespace, ns => + { + ns.Type($"public partial class {componentDetails.ComponentName}", partial => + { + partial.Line($"public const uint ComponentId = {componentDetails.ComponentId};"); + + partial.Type(GenerateComponentStruct(componentDetails, qualifiedNamespace)); + partial.Type(GenerateComponentAuthorityStruct(componentDetails, qualifiedNamespace)); + partial.Type(GenerateSnapshotStruct(componentDetails, qualifiedNamespace)); + partial.Type(GenerateSerializationClass(componentDetails, qualifiedNamespace)); + partial.Type(GenerateUpdateStruct(componentDetails, qualifiedNamespace)); + partial.Type(GenerateInternalDynamicClass(componentDetails, qualifiedNamespace)); + }); + }); + }).Format(); + } + + private static TypeBlock GenerateComponentStruct(UnityComponentDetails componentDetails, string qualifiedNamespace) + { + Logger.Trace($"Generating {qualifiedNamespace}.{componentDetails.ComponentName}.Component struct."); + + var fieldDetailsList = componentDetails.FieldDetails; + + return Scope.Type( + "public struct Component : IComponentData, ISpatialComponentData, ISnapshottable", + component => + { + component.Line($"public uint ComponentId => {componentDetails.ComponentId};"); + + component.Line(s => + { + s.AppendLine("// Bit masks for tracking which component properties were changed locally and need to be synced."); + s.AppendLine("// Each byte tracks 8 component properties."); + + for (var i = 0; i < (fieldDetailsList.Count / 8) + 1; i++) + { + s.AppendLine($"private byte dirtyBits{i};"); + } + }); + + component.Method("public bool IsDataDirty()", m => + { + m.Line("var isDataDirty = false;"); + + m.Line(s => + { + for (var i = 0; i < (fieldDetailsList.Count / 8) + 1; i++) + { + s.AppendLine($"isDataDirty |= (dirtyBits{i} != 0x0);"); + } + }); + + m.Return("isDataDirty"); + }); + + component.Line(@" +/* +The propertyIndex argument counts up from 0 in the order defined in your schema component. +It is not the schema field number itself. For example: +component MyComponent +{ + id = 1337; + bool val_a = 1; + bool val_b = 3; +} +In that case, val_a corresponds to propertyIndex 0 and val_b corresponds to propertyIndex 1 in this method. +This method throws an InvalidOperationException in case your component doesn't contain properties. +*/ +"); + component.Method("public bool IsDataDirty(int propertyIndex)", m => + { + if (fieldDetailsList.Count == 0) + { + m.Line("throw new InvalidOperationException(\"IsDataDirty(int propertyIndex) may not be called on components with no properties.\");"); + } + else + { + m.If($"propertyIndex < 0 || propertyIndex >= {fieldDetailsList.Count}", then => + { + then.Line($@" +throw new ArgumentException(""\""propertyIndex\"" argument out of range. Valid range is [0, {fieldDetailsList.Count - 1}]. "" + + ""Unless you are using custom component replication code, this is most likely caused by a code generation bug. "" + + ""Please contact SpatialOS support if you encounter this issue.""); +"); + }); + + m.Line(s => + { + s.AppendLine("// Retrieve the dirtyBits[0-n] field that tracks this property."); + s.AppendLine("var dirtyBitsByteIndex = propertyIndex / 8;"); + + s.AppendLine(Scope.Custom("switch (dirtyBitsByteIndex)", sw => + { + for (var i = 0; i < (fieldDetailsList.Count / 8) + 1; i++) + { + sw.Line($@" +case {i}: + return (dirtyBits{i} & (0x1 << propertyIndex % 8)) != 0x0; +"); + } + }).Format()); + }); + + m.Return("false"); + } + }); + + component.Method(@" +// Like the IsDataDirty() method above, the propertyIndex arguments starts counting from 0. +// This method throws an InvalidOperationException in case your component doesn't contain properties. +public void MarkDataDirty(int propertyIndex)", m => + { + if (fieldDetailsList.Count == 0) + { + m.Line("throw new InvalidOperationException(\"MarkDataDirty(int propertyIndex) may not be called on components with no properties.\");"); + } + else + { + m.Line($@" +if (propertyIndex < 0 || propertyIndex >= {fieldDetailsList.Count}) +{{ + throw new ArgumentException(""\""propertyIndex\"" argument out of range. Valid range is [0, {fieldDetailsList.Count - 1}]. "" + + ""Unless you are using custom component replication code, this is most likely caused by a code generation bug. "" + + ""Please contact SpatialOS support if you encounter this issue.""); +}} +"); + + m.Line(s => + { + s.AppendLine("// Retrieve the dirtyBits[0-n] field that tracks this property."); + s.AppendLine("var dirtyBitsByteIndex = propertyIndex / 8;"); + + s.AppendLine(Scope.Custom("switch (dirtyBitsByteIndex)", sw => + { + for (var i = 0; i < (fieldDetailsList.Count / 8) + 1; i++) + { + sw.Line($@" +case {i}: + dirtyBits{i} |= (byte) (0x1 << propertyIndex % 8); + break; +"); + } + }).Format()); + }); + } + }); + + component.Method("public void MarkDataClean()", m => + { + m.Line(s => + { + for (var i = 0; i < (fieldDetailsList.Count / 8) + 1; i++) + { + s.AppendLine($"dirtyBits{i} = 0x0;"); + } + }); + }); + + component.Line($@" +public Snapshot ToComponentSnapshot(global::Unity.Entities.World world) +{{ + var componentDataSchema = new ComponentData({componentDetails.ComponentId}, SchemaComponentData.Create()); + Serialization.SerializeComponent(this, componentDataSchema.SchemaData.Value.GetFields(), world); + var snapshot = Serialization.DeserializeSnapshot(componentDataSchema.SchemaData.Value.GetFields()); + + componentDataSchema.SchemaData?.Destroy(); + componentDataSchema.SchemaData = null; + + return snapshot; +}} +"); + + for (var i = 0; i < fieldDetailsList.Count; i++) + { + var fieldDetails = fieldDetailsList[i]; + if (fieldDetails.IsBlittable) + { + component.Line($@" +private {fieldDetails.Type} {fieldDetails.CamelCaseName}; + +public {fieldDetails.Type} {fieldDetails.PascalCaseName} +{{ + get => {fieldDetails.CamelCaseName}; + set + {{ + MarkDataDirty({i}); + this.{fieldDetails.CamelCaseName} = value; + }} +}} +"); + } + else + { + component.Line($@" +internal uint {fieldDetails.CamelCaseName}Handle; + +public {fieldDetails.Type} {fieldDetails.PascalCaseName} +{{ + get => global::{qualifiedNamespace}.{componentDetails.ComponentName}.ReferenceTypeProviders.{fieldDetails.PascalCaseName}Provider.Get({fieldDetails.CamelCaseName}Handle); + set + {{ + MarkDataDirty({i}); + global::{qualifiedNamespace}.{componentDetails.ComponentName}.ReferenceTypeProviders.{fieldDetails.PascalCaseName}Provider.Set({fieldDetails.CamelCaseName}Handle, value); + }} +}} +"); + } + } + }); + } + + private static TypeBlock GenerateComponentAuthorityStruct(UnityComponentDetails componentDetails, + string qualifiedNamespace) + { + Logger.Trace( + $"Generating {qualifiedNamespace}.{componentDetails.ComponentName}.ComponentAuthority struct."); + + return Scope.Type("public struct ComponentAuthority : ISharedComponentData, IEquatable", + t => + { + t.Line(@" +public bool HasAuthority; + +public ComponentAuthority(bool hasAuthority) +{ + HasAuthority = hasAuthority; +} + +// todo think about whether any of this is necessary +// Unity does a bitwise equality check so this is just for users reading the struct +public static readonly ComponentAuthority NotAuthoritative = new ComponentAuthority(false); +public static readonly ComponentAuthority Authoritative = new ComponentAuthority(true); + +public bool Equals(ComponentAuthority other) +{ + return this == other; +} + +public override bool Equals(object obj) +{ + return obj is ComponentAuthority auth && this == auth; +} + +public override int GetHashCode() +{ + return HasAuthority.GetHashCode(); +} + +public static bool operator ==(ComponentAuthority a, ComponentAuthority b) +{ + return a.HasAuthority == b.HasAuthority; +} + +public static bool operator !=(ComponentAuthority a, ComponentAuthority b) +{ + return !(a == b); +} +"); + }); + } + + private static TypeBlock GenerateSnapshotStruct(UnityComponentDetails componentDetails, string qualifiedNamespace) + { + Logger.Trace($"Generating {qualifiedNamespace}.{componentDetails.ComponentName}.Snapshot struct."); + + var fieldDetailsList = componentDetails.FieldDetails; + + return Scope.AnnotatedType("global::System.Serializable", + "public struct Snapshot : ISpatialComponentSnapshot", snapshot => + { + snapshot.Line($"public uint ComponentId => {componentDetails.ComponentId};"); + + snapshot.Line(fieldDetailsList.Select(fd => $"public {fd.Type} {fd.PascalCaseName};").ToList()); + + if (fieldDetailsList.Count > 0) + { + snapshot.Method($"public Snapshot({GetConstructorArgs(fieldDetailsList)})", () => + { + return fieldDetailsList.Select(fd => $"{fd.PascalCaseName} = {fd.CamelCaseName};"); + }); + } + }); + } + + private static TypeBlock GenerateSerializationClass(UnityComponentDetails componentDetails, string qualifiedNamespace) + { + Logger.Trace($"Generating {qualifiedNamespace}.{componentDetails.ComponentName}.Serialization static class."); + + var componentNamespace = $"global::{qualifiedNamespace}.{componentDetails.ComponentName}"; + var fieldDetailsList = componentDetails.FieldDetails; + var shouldGenerateClearedFieldsSet = ShouldGenerateClearedFieldsSet(fieldDetailsList); + + return Scope.Type("public static class Serialization", serialization => + { + serialization.Method($"public static void SerializeComponent({componentNamespace}.Component component, global::Improbable.Worker.CInterop.SchemaObject obj, global::Unity.Entities.World world)", + m => + { + foreach (var fieldDetails in fieldDetailsList) + { + m.Line(fieldDetails.GetSerializationString($"component.{fieldDetails.PascalCaseName}", "obj", 0)); + } + }); + + serialization.Method($"public static void SerializeUpdate({componentNamespace}.Component component, global::Improbable.Worker.CInterop.SchemaComponentUpdate updateObj)", + m => + { + m.Line("var obj = updateObj.GetFields();"); + + for (var i = 0; i < fieldDetailsList.Count; i++) + { + var fieldDetails = fieldDetailsList[i]; + + m.If($"component.IsDataDirty({i})", + then => + { + then.Line(fieldDetails.GetSerializationString($"component.{fieldDetails.PascalCaseName}", "obj", 0)); + + if (shouldGenerateClearedFieldsSet) + { + then.Line(fieldDetails.GetTrySetClearedFieldString($"component.{fieldDetails.PascalCaseName}", "updateObj", 0)); + } + }); + } + }); + + serialization.Method($"public static void SerializeUpdate({componentNamespace}.Update update, global::Improbable.Worker.CInterop.SchemaComponentUpdate updateObj)", + m => + { + m.Line("var obj = updateObj.GetFields();"); + + foreach (var fieldDetails in fieldDetailsList) + { + m.CustomScope(cs => + { + cs.If($"update.{fieldDetails.PascalCaseName}.HasValue", then => + { + then.Line($"var field = update.{fieldDetails.PascalCaseName}.Value;"); + then.Line(fieldDetails.GetSerializationString("field", "obj", 0)); + + if (shouldGenerateClearedFieldsSet) + { + then.Line(fieldDetails.GetTrySetClearedFieldString("field", "updateObj", 0)); + } + }); + }); + } + }); + + serialization.Method($"public static void SerializeSnapshot({componentNamespace}.Snapshot snapshot, global::Improbable.Worker.CInterop.SchemaObject obj)", + m => + { + foreach (var fieldDetails in fieldDetailsList) + { + m.Line(fieldDetails.GetSerializationString($"snapshot.{fieldDetails.PascalCaseName}", "obj", 0)); + } + }); + + serialization.Method($"public static {componentNamespace}.Component Deserialize(global::Improbable.Worker.CInterop.SchemaObject obj, global::Unity.Entities.World world)", + m => + { + m.Line($"var component = new {componentNamespace}.Component();"); + + foreach (var fieldDetails in fieldDetailsList) + { + if (!fieldDetails.IsBlittable) + { + m.Line($"component.{fieldDetails.CamelCaseName}Handle = global::{qualifiedNamespace}.{componentDetails.ComponentName}.ReferenceTypeProviders.{fieldDetails.PascalCaseName}Provider.Allocate(world);"); + } + + m.Line(fieldDetails.GetDeserializeString($"component.{fieldDetails.PascalCaseName}", "obj", 0)); + } + + m.Return("component"); + }); + + serialization.Method($"public static {componentNamespace}.Update DeserializeUpdate(global::Improbable.Worker.CInterop.SchemaComponentUpdate updateObj)", + m => + { + m.Line(new[] + { + $"var update = new {componentNamespace}.Update();", + "var obj = updateObj.GetFields();" + }); + + foreach (var fieldDetails in fieldDetailsList) + { + m.Line(fieldDetails.GetDeserializeUpdateIntoUpdateString($"update.{fieldDetails.PascalCaseName}", "obj", 0)); + } + + m.Return("update"); + }); + + serialization.Method($"public static {componentNamespace}.Update DeserializeUpdate(global::Improbable.Worker.CInterop.SchemaComponentData data)", + m => + { + m.Line(new[] + { + $"var update = new {componentNamespace}.Update();", + "var obj = data.GetFields();" + }); + + foreach (var fieldDetails in fieldDetailsList) + { + m.Line(fieldDetails.GetDeserializeDataIntoUpdateString($"update.{fieldDetails.PascalCaseName}", "obj", 0)); + } + + m.Return("update"); + }); + + serialization.Method($"public static {componentNamespace}.Snapshot DeserializeSnapshot(global::Improbable.Worker.CInterop.SchemaObject obj)", + m => + { + m.Line($"var component = new {componentNamespace}.Snapshot();"); + + foreach (var fieldDetails in fieldDetailsList) + { + m.Line(fieldDetails.GetDeserializeString($"component.{fieldDetails.PascalCaseName}", "obj", 0)); + } + + m.Return("component"); + }); + + serialization.Method($"public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponentUpdate updateObj, ref {componentNamespace}.Component component)", + m => + { + m.Line("var obj = updateObj.GetFields();"); + + foreach (var fieldDetails in fieldDetailsList) + { + m.Line(fieldDetails.GetDeserializeUpdateString($"component.{fieldDetails.PascalCaseName}", "obj", 0)); + } + }); + + serialization.Method($"public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponentUpdate updateObj, ref {componentNamespace}.Snapshot snapshot)", + m => + { + m.Line($"var obj = updateObj.GetFields();"); + + foreach (var fieldDetails in fieldDetailsList) + { + m.Line(fieldDetails.GetDeserializeUpdateString($"snapshot.{fieldDetails.PascalCaseName}", "obj", 0)); + } + }); + }); + } + + private static TypeBlock GenerateUpdateStruct(UnityComponentDetails componentDetails, string qualifiedNamespace) + { + Logger.Trace($"Generating {qualifiedNamespace}.{componentDetails.ComponentName}.Update struct."); + + return Scope.Type("public struct Update : ISpatialComponentUpdate", + update => + { + update.Line(componentDetails.FieldDetails.Select(fd => + $"public Option<{fd.Type}> {fd.PascalCaseName};").ToList()); + }); + } + + private static TypeBlock GenerateInternalDynamicClass(UnityComponentDetails componentDetails, string qualifiedNamespace) + { + Logger.Trace($"Generating {qualifiedNamespace}.{componentDetails.ComponentName}.{componentDetails.ComponentName}Dynamic internal class."); + + return Scope.Type($"internal class {componentDetails.ComponentName}Dynamic : IDynamicInvokable", + dynamic => + { + dynamic.Line($"public uint ComponentId => {componentDetails.ComponentName}.ComponentId;"); + + dynamic.Line(@" +internal static Dynamic.VTable VTable = new Dynamic.VTable +{ + DeserializeSnapshot = DeserializeSnapshot, + SerializeSnapshot = SerializeSnapshot, + DeserializeSnapshotRaw = Serialization.DeserializeSnapshot, + SerializeSnapshotRaw = Serialization.SerializeSnapshot, + ConvertSnapshotToUpdate = SnapshotToUpdate +}; + +private static Snapshot DeserializeSnapshot(ComponentData snapshot) +{ + var schemaDataOpt = snapshot.SchemaData; + if (!schemaDataOpt.HasValue) + { + throw new ArgumentException($""Can not deserialize an empty {nameof(ComponentData)}""); + } + + return Serialization.DeserializeSnapshot(schemaDataOpt.Value.GetFields()); +} + +private static void SerializeSnapshot(Snapshot snapshot, ComponentData data) +{ + var schemaDataOpt = data.SchemaData; + if (!schemaDataOpt.HasValue) + { + throw new ArgumentException($""Can not serialise an empty {nameof(ComponentData)}""); + } + + Serialization.SerializeSnapshot(snapshot, data.SchemaData.Value.GetFields()); +} +"); + dynamic.Method("private static Update SnapshotToUpdate(in Snapshot snapshot)", m => + { + m.Initializer("var update = new Update", () => + { + return componentDetails.FieldDetails.Select(fd => + $"{fd.PascalCaseName} = snapshot.{fd.PascalCaseName}"); + }); + + m.Return("update"); + }); + + dynamic.Line(@" +public void InvokeHandler(Dynamic.IHandler handler) +{ + handler.Accept(ComponentId, VTable); +} +"); + }); + } + + private static bool ShouldGenerateClearedFieldsSet(IEnumerable fieldDetailsList) + { + return fieldDetailsList.Any(fieldDetails => fieldDetails.CanBeEmpty); + } + + private static string GetConstructorArgs(IEnumerable fieldDetailsList) + { + var constructorArgsList = fieldDetailsList.Select(fieldDetails => $"{fieldDetails.Type} {fieldDetails.CamelCaseName}"); + return string.Join(", ", constructorArgsList); + } + } +} diff --git a/workers/unity/Packages/io.improbable.gdk.core/.codegen/Source/Generators/Core/UnityComponentSenderGenerator.cs b/workers/unity/Packages/io.improbable.gdk.core/.codegen/Source/Generators/Core/UnityComponentSenderGenerator.cs new file mode 100644 index 0000000000..1f53576f56 --- /dev/null +++ b/workers/unity/Packages/io.improbable.gdk.core/.codegen/Source/Generators/Core/UnityComponentSenderGenerator.cs @@ -0,0 +1,115 @@ +using Improbable.Gdk.CodeGeneration.CodeWriter; +using Improbable.Gdk.CodeGeneration.Model.Details; +using NLog; + +namespace Improbable.Gdk.CodeGenerator +{ + public static class UnityComponentSenderGenerator + { + private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); + + public static string Generate(UnityComponentDetails componentDetails, string qualifiedNamespace) + { + var componentNamespace = $"global::{qualifiedNamespace}.{componentDetails.ComponentName}"; + + Logger.Trace($"Generating {qualifiedNamespace}.{componentDetails.ComponentName}.ComponentReplicator internal class."); + + return CodeWriter.Populate(cgw => + { + cgw.UsingDirectives( + "System", + "System.Collections.Generic", + "UnityEngine", + "UnityEngine.Profiling", + "Unity.Mathematics", + "Unity.Entities", + "Unity.Collections", + "Improbable.Gdk.Core", + "Improbable.Gdk.Core.CodegenAdapters" + ); + + cgw.Namespace(qualifiedNamespace, ns => + { + ns.Type($"public partial class {componentDetails.ComponentName}", partial => + { + partial.Type("internal class ComponentReplicator : IComponentReplicationHandler", replicator => + { + replicator.Line($@" +public uint ComponentId => {componentDetails.ComponentId}; + +public EntityQueryDesc ComponentUpdateQuery => new EntityQueryDesc +{{ + All = new[] + {{ + ComponentType.ReadWrite<{componentNamespace}.Component>(), + ComponentType.ReadWrite<{componentNamespace}.ComponentAuthority>(), + ComponentType.ReadOnly() + }}, +}}; +"); + replicator.Method(@" +public void SendUpdates( + NativeArray chunkArray, + ComponentSystemBase system, + EntityManager entityManager, + ComponentUpdateSystem componentUpdateSystem) +", m => + { + m.ProfilerStart(componentDetails.ComponentName); + + m.Line(new[] + { + "var spatialOSEntityType = system.GetArchetypeChunkComponentType(true);", + $"var componentType = system.GetArchetypeChunkComponentType<{componentNamespace}.Component>();", + "var authorityType = system.GetArchetypeChunkSharedComponentType();" + }); + + m.Loop("foreach (var chunk in chunkArray)", outerLoop => + { + outerLoop.Line(new[] + { + "var entityIdArray = chunk.GetNativeArray(spatialOSEntityType);", + "var componentArray = chunk.GetNativeArray(componentType);", + "var authorityIndex = chunk.GetSharedComponentIndex(authorityType);", + }); + + outerLoop.If("!entityManager.GetSharedComponentData(authorityIndex).HasAuthority", () => new[] + { + "continue;" + }); + + outerLoop.Loop("for (var i = 0; i < componentArray.Length; i++)", innerLoop => + { + innerLoop.Line("var data = componentArray[i];"); + + innerLoop.If("data.IsDataDirty()", componentDirtyThen => + { + componentDirtyThen.Line("Update update = new Update();"); + for (var i = 0; i < componentDetails.FieldDetails.Count; i++) + { + var fieldDetails = componentDetails.FieldDetails[i]; + componentDirtyThen.If($"data.IsDataDirty({i})", () => new[] + { + $"update.{fieldDetails.PascalCaseName} = data.{fieldDetails.PascalCaseName};" + }); + } + + componentDirtyThen.Line(new[] + { + "componentUpdateSystem.SendUpdate(in update, entityIdArray[i].EntityId);", + "data.MarkDataClean();", + "componentArray[i] = data;" + }); + }); + }); + }); + + m.ProfilerEnd(); + }); + }); + }); + }); + }).Format(); + } + } +} diff --git a/workers/unity/Packages/io.improbable.gdk.core/.codegen/Source/Generators/Parts/UnityComponentDataGeneratorPart.cs b/workers/unity/Packages/io.improbable.gdk.core/.codegen/Source/Generators/Parts/UnityComponentDataGeneratorPart.cs deleted file mode 100644 index ada24a4563..0000000000 --- a/workers/unity/Packages/io.improbable.gdk.core/.codegen/Source/Generators/Parts/UnityComponentDataGeneratorPart.cs +++ /dev/null @@ -1,49 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using Improbable.Gdk.CodeGeneration.Model.Details; -using NLog; - -namespace Improbable.Gdk.CodeGenerator -{ - public partial class UnityComponentDataGenerator - { - private string qualifiedNamespace; - private UnityComponentDetails details; - - private Logger logger = LogManager.GetCurrentClassLogger(); - - public UnityComponentDataGenerator() - { - logger.Trace($"Constructing {GetType()}."); - } - - public string Generate(UnityComponentDetails details, string package) - { - qualifiedNamespace = package; - this.details = details; - - return TransformText(); - } - - private UnityComponentDetails GetComponentDetails() - { - return details; - } - - private IReadOnlyList GetFieldDetailsList() - { - return details.FieldDetails; - } - - private bool ShouldGenerateClearedFieldsSet() - { - return GetFieldDetailsList().Any(fieldDetails => fieldDetails.CanBeEmpty); - } - - private string GetConstructorArgs() - { - var constructorArgsList = GetFieldDetailsList().Select(fieldDetails => $"{fieldDetails.Type} {fieldDetails.CamelCaseName}"); - return string.Join(", ", constructorArgsList); - } - } -} diff --git a/workers/unity/Packages/io.improbable.gdk.core/.codegen/Source/Generators/Parts/UnityComponentSenderGeneratorPart.cs b/workers/unity/Packages/io.improbable.gdk.core/.codegen/Source/Generators/Parts/UnityComponentSenderGeneratorPart.cs deleted file mode 100644 index febf1c91df..0000000000 --- a/workers/unity/Packages/io.improbable.gdk.core/.codegen/Source/Generators/Parts/UnityComponentSenderGeneratorPart.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using Improbable.Gdk.CodeGeneration.Model.Details; -using NLog; - -namespace Improbable.Gdk.CodeGenerator -{ - /// - /// This class contains the data required to fill out the "UnityComponentSenderGenerator.tt" templates. - /// This template generates the component groups for creating component updates from ecs components. - /// - public partial class UnityComponentSenderGenerator - { - private string qualifiedNamespace; - private UnityComponentDetails details; - - private Logger logger = LogManager.GetCurrentClassLogger(); - - public UnityComponentSenderGenerator() - { - logger.Trace($"Constructing {GetType()}."); - } - - public string Generate(UnityComponentDetails details, string package) - { - qualifiedNamespace = package; - this.details = details; - - return TransformText(); - } - - private UnityComponentDetails GetComponentDetails() - { - return details; - } - - private IReadOnlyList GetFieldDetailsList() - { - return details.FieldDetails; - } - } -} diff --git a/workers/unity/Packages/io.improbable.gdk.core/.codegen/Templates/UnityComponentDataGenerator.tt b/workers/unity/Packages/io.improbable.gdk.core/.codegen/Templates/UnityComponentDataGenerator.tt deleted file mode 100644 index dae07eb7ee..0000000000 --- a/workers/unity/Packages/io.improbable.gdk.core/.codegen/Templates/UnityComponentDataGenerator.tt +++ /dev/null @@ -1,411 +0,0 @@ -<#@ template language="C#" #> -<#@ output extension=".cs" #> -<# - var fieldDetailsList = GetFieldDetailsList(); - var componentDetails = GetComponentDetails(); - var generatedHeader = CommonGeneratorUtils.GetGeneratedHeader(); - var componentNamespace = $"global::{qualifiedNamespace}.{componentDetails.ComponentName}"; -#> -<#= generatedHeader #> - -using Improbable.Gdk.Core; -using Improbable.Worker.CInterop; -using System; -using System.Collections.Generic; -using Unity.Entities; - -namespace <#= qualifiedNamespace #> -{ - public partial class <#= componentDetails.ComponentName #> - { - public const uint ComponentId = <#= componentDetails.ComponentId #>; - -<# - logger.Trace($"Generating {qualifiedNamespace}.{componentDetails.ComponentName}.Component struct."); -#> - public struct Component : IComponentData, ISpatialComponentData, ISnapshottable - { - public uint ComponentId => <#= componentDetails.ComponentId #>; - - // Bit masks for tracking which component properties were changed locally and need to be synced. - // Each byte tracks 8 component properties. -<# for (var i = 0; i < (fieldDetailsList.Count / 8) + 1; i++) { #> - private byte dirtyBits<#= i #>; -<# } #> - - public bool IsDataDirty() - { - var isDataDirty = false; -<# for (var i = 0; i < (fieldDetailsList.Count / 8) + 1; i++) { #> - isDataDirty |= (dirtyBits<#= i #> != 0x0); -<# } #> - return isDataDirty; - } - - /* - The propertyIndex argument counts up from 0 in the order defined in your schema component. - It is not the schema field number itself. For example: - component MyComponent - { - id = 1337; - bool val_a = 1; - bool val_b = 3; - } - In that case, val_a corresponds to propertyIndex 0 and val_b corresponds to propertyIndex 1 in this method. - This method throws an InvalidOperationException in case your component doesn't contain properties. - */ - public bool IsDataDirty(int propertyIndex) - { -<# if (fieldDetailsList.Count == 0) { #> - throw new InvalidOperationException("IsDataDirty(int propertyIndex) may not be called on components with no properties."); -<# } else { #> - if (propertyIndex < 0 || propertyIndex >= <#= fieldDetailsList.Count #>) - { - throw new ArgumentException("\"propertyIndex\" argument out of range. Valid range is [0, <#= fieldDetailsList.Count - 1#>]. " + - "Unless you are using custom component replication code, this is most likely caused by a code generation bug. " + - "Please contact SpatialOS support if you encounter this issue."); - } - - // Retrieve the dirtyBits[0-n] field that tracks this property. - var dirtyBitsByteIndex = propertyIndex / 8; - switch (dirtyBitsByteIndex) - { -<# for (var i = 0; i < (fieldDetailsList.Count / 8) + 1; i++) { #> - case <#= i #>: - return (dirtyBits<#= i #> & (0x1 << propertyIndex % 8)) != 0x0; -<# } #> - } - - return false; -<# } #> - } - - // Like the IsDataDirty() method above, the propertyIndex arguments starts counting from 0. - // This method throws an InvalidOperationException in case your component doesn't contain properties. - public void MarkDataDirty(int propertyIndex) - { -<# if (fieldDetailsList.Count == 0) { #> - throw new InvalidOperationException("MarkDataDirty(int propertyIndex) may not be called on components with no properties."); -<# } else { #> - if (propertyIndex < 0 || propertyIndex >= <#= fieldDetailsList.Count #>) - { - throw new ArgumentException("\"propertyIndex\" argument out of range. Valid range is [0, <#= fieldDetailsList.Count - 1#>]. " + - "Unless you are using custom component replication code, this is most likely caused by a code generation bug. " + - "Please contact SpatialOS support if you encounter this issue."); - } - - // Retrieve the dirtyBits[0-n] field that tracks this property. - var dirtyBitsByteIndex = propertyIndex / 8; - switch (dirtyBitsByteIndex) - { -<# for (var i = 0; i < (fieldDetailsList.Count / 8) + 1; i++) { #> - case <#= i #>: - dirtyBits<#= i #> |= (byte) (0x1 << propertyIndex % 8); - break; -<# } #> - } -<# } #> - } - - public void MarkDataClean() - { -<# for (var i = 0; i < (fieldDetailsList.Count / 8) + 1; i++) { #> - dirtyBits<#= i #> = 0x0; -<# } #> - } - - public Snapshot ToComponentSnapshot(global::Unity.Entities.World world) - { - var componentDataSchema = new ComponentData(<#= componentDetails.ComponentId #>, SchemaComponentData.Create()); - Serialization.SerializeComponent(this, componentDataSchema.SchemaData.Value.GetFields(), world); - var snapshot = Serialization.DeserializeSnapshot(componentDataSchema.SchemaData.Value.GetFields()); - - componentDataSchema.SchemaData?.Destroy(); - componentDataSchema.SchemaData = null; - - return snapshot; - } -<# for (var i = 0; i < fieldDetailsList.Count; i++) { -var fieldDetails = fieldDetailsList[i]; #> -<# if (fieldDetails.IsBlittable) { #> - - private <#= fieldDetails.Type #> <#= fieldDetails.CamelCaseName #>; - - public <#= fieldDetails.Type #> <#= fieldDetails.PascalCaseName #> - { - get => <#= fieldDetails.CamelCaseName #>; - set - { - MarkDataDirty(<#= i #>); - this.<#= fieldDetails.CamelCaseName #> = value; - } - } -<# } else { #> - - internal uint <#= fieldDetails.CamelCaseName #>Handle; - - public <#= fieldDetails.Type #> <#= fieldDetails.PascalCaseName #> - { - get => global::<#= qualifiedNamespace #>.<#= componentDetails.ComponentName #>.ReferenceTypeProviders.<#= fieldDetails.PascalCaseName #>Provider.Get(<#= fieldDetails.CamelCaseName #>Handle); - set - { - MarkDataDirty(<#= i #>); - global::<#= qualifiedNamespace #>.<#= componentDetails.ComponentName #>.ReferenceTypeProviders.<#= fieldDetails.PascalCaseName #>Provider.Set(<#= fieldDetails.CamelCaseName #>Handle, value); - } - } -<# } #> -<# } #> - } - -<# - logger.Trace($"Generating {qualifiedNamespace}.{componentDetails.ComponentName}.ComponentAuthority struct."); -#> - public struct ComponentAuthority : ISharedComponentData, IEquatable - { - public bool HasAuthority; - - public ComponentAuthority(bool hasAuthority) - { - HasAuthority = hasAuthority; - } - - // todo think about whether any of this is necessary - // Unity does a bitwise equality check so this is just for users reading the struct - public static readonly ComponentAuthority NotAuthoritative = new ComponentAuthority(false); - public static readonly ComponentAuthority Authoritative = new ComponentAuthority(true); - - public bool Equals(ComponentAuthority other) - { - return this == other; - } - - public override bool Equals(object obj) - { - return obj is ComponentAuthority auth && this == auth; - } - - public override int GetHashCode() - { - return HasAuthority.GetHashCode(); - } - - public static bool operator ==(ComponentAuthority a, ComponentAuthority b) - { - return a.HasAuthority == b.HasAuthority; - } - - public static bool operator !=(ComponentAuthority a, ComponentAuthority b) - { - return !(a == b); - } - } - -<# - logger.Trace($"Generating {qualifiedNamespace}.{componentDetails.ComponentName}.Snapshot struct."); -#> - [global::System.Serializable] - public struct Snapshot : ISpatialComponentSnapshot - { - public uint ComponentId => <#= componentDetails.ComponentId #>; - -<# foreach(var fieldDetails in fieldDetailsList) { #> - public <#= fieldDetails.Type #> <#= fieldDetails.PascalCaseName #>; -<# } #> -<# if (fieldDetailsList.Count > 0) { #> - - public Snapshot(<#= GetConstructorArgs() #>) - { -<# foreach(var fieldDetails in fieldDetailsList) { #> - <#= fieldDetails.PascalCaseName #> = <#= fieldDetails.CamelCaseName #>; -<# } #> - } -<# } #> - } - -<# - logger.Trace($"Generating {qualifiedNamespace}.{componentDetails.ComponentName}.Serialization static class."); -#> - public static class Serialization - { - public static void SerializeComponent(<#= componentNamespace #>.Component component, global::Improbable.Worker.CInterop.SchemaObject obj, global::Unity.Entities.World world) - { -<# for (var i = 0; i < fieldDetailsList.Count; i++) { -var fieldDetails = fieldDetailsList[i]; #> - <#= fieldDetails.GetSerializationString("component." + fieldDetails.PascalCaseName, "obj", 4) #> -<# } #> - } - - public static void SerializeUpdate(<#= componentNamespace #>.Component component, global::Improbable.Worker.CInterop.SchemaComponentUpdate updateObj) - { - var obj = updateObj.GetFields(); -<# for (var i = 0; i < fieldDetailsList.Count; i++) { -var fieldDetails = fieldDetailsList[i]; #> - if (component.IsDataDirty(<#= i #>)) - { - <#= fieldDetails.GetSerializationString("component." + fieldDetails.PascalCaseName, "obj", 5) #> -<# if (ShouldGenerateClearedFieldsSet()) { #> - <#= fieldDetails.GetTrySetClearedFieldString("component." + fieldDetails.PascalCaseName, "updateObj", 5) #> -<# } #> - } - -<# } #> - } - - public static void SerializeUpdate(<#= componentNamespace #>.Update update, global::Improbable.Worker.CInterop.SchemaComponentUpdate updateObj) - { - var obj = updateObj.GetFields(); -<# for (var i = 0; i < fieldDetailsList.Count; i++) { -var fieldDetails = fieldDetailsList[i]; #> - { - if (update.<#= fieldDetails.PascalCaseName #>.HasValue) - { - var field = update.<#= fieldDetails.PascalCaseName #>.Value; - <#= fieldDetails.GetSerializationString("field", "obj", 6) #> -<# if (ShouldGenerateClearedFieldsSet()) { #> - <#= fieldDetails.GetTrySetClearedFieldString("field", "updateObj", 6) #> -<# } #> - } - } -<# } #> - } - - public static void SerializeSnapshot(<#= componentNamespace #>.Snapshot snapshot, global::Improbable.Worker.CInterop.SchemaObject obj) - { -<# for (var i = 0; i < fieldDetailsList.Count; i++) { -var fieldDetails = fieldDetailsList[i]; #> - <#= fieldDetails.GetSerializationString("snapshot." + fieldDetails.PascalCaseName, "obj", 4) #> - -<# } #> - } - - public static <#= componentNamespace #>.Component Deserialize(global::Improbable.Worker.CInterop.SchemaObject obj, global::Unity.Entities.World world) - { - var component = new <#= componentNamespace #>.Component(); - -<# foreach (var fieldDetails in fieldDetailsList) { #> -<# if (!fieldDetails.IsBlittable) { #> - component.<#= fieldDetails.CamelCaseName#>Handle = global::<#= qualifiedNamespace #>.<#= componentDetails.ComponentName #>.ReferenceTypeProviders.<#= fieldDetails.PascalCaseName #>Provider.Allocate(world); -<# } #> - <#= fieldDetails.GetDeserializeString("component." + fieldDetails.PascalCaseName, "obj", 4) #> -<# } #> - return component; - } - - public static <#= componentNamespace #>.Update DeserializeUpdate(global::Improbable.Worker.CInterop.SchemaComponentUpdate updateObj) - { - var update = new <#= componentNamespace #>.Update(); - var obj = updateObj.GetFields(); - -<# foreach (var fieldDetails in fieldDetailsList) { #> - <#= fieldDetails.GetDeserializeUpdateIntoUpdateString("update." + fieldDetails.PascalCaseName, "obj", 4) #> -<# } #> - return update; - } - - public static <#= componentNamespace #>.Update DeserializeUpdate(global::Improbable.Worker.CInterop.SchemaComponentData data) - { - var update = new <#= componentNamespace #>.Update(); - var obj = data.GetFields(); - -<# foreach (var fieldDetails in fieldDetailsList) { #> - <#= fieldDetails.GetDeserializeDataIntoUpdateString("update." + fieldDetails.PascalCaseName, "obj", 4) #> -<# } #> - return update; - } - - public static <#= componentNamespace #>.Snapshot DeserializeSnapshot(global::Improbable.Worker.CInterop.SchemaObject obj) - { - var component = new <#= componentNamespace #>.Snapshot(); - -<# foreach (var fieldDetails in fieldDetailsList) { #> - <#= fieldDetails.GetDeserializeString("component." + fieldDetails.PascalCaseName, "obj", 4) #> -<# } #> - return component; - } - - public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponentUpdate updateObj, ref <#= componentNamespace #>.Component component) - { - var obj = updateObj.GetFields(); - -<# foreach (var fieldDetails in fieldDetailsList) { #> - <#= fieldDetails.GetDeserializeUpdateString("component." + fieldDetails.PascalCaseName, "obj", 4) #> -<# } #> - } - - public static void ApplyUpdate(global::Improbable.Worker.CInterop.SchemaComponentUpdate updateObj, ref <#= componentNamespace #>.Snapshot snapshot) - { - var obj = updateObj.GetFields(); - -<# foreach (var fieldDetails in fieldDetailsList) { #> - <#= fieldDetails.GetDeserializeUpdateString("snapshot." + fieldDetails.PascalCaseName, "obj", 4) #> -<# } #> - } - } - -<# - logger.Trace($"Generating {qualifiedNamespace}.{componentDetails.ComponentName}.Update struct."); -#> - public struct Update : ISpatialComponentUpdate - { -<# foreach(var fieldDetails in fieldDetailsList) { #> - public Option<<#= fieldDetails.Type #>> <#= fieldDetails.PascalCaseName #>; -<# } #> - } - -<# - logger.Trace($"Generating {qualifiedNamespace}.{componentDetails.ComponentName}.{componentDetails.ComponentName}Dynamic internal class."); -#> - internal class <#= componentDetails.ComponentName #>Dynamic : IDynamicInvokable - { - public uint ComponentId => <#= componentDetails.ComponentName #>.ComponentId; - - internal static Dynamic.VTable VTable = new Dynamic.VTable - { - DeserializeSnapshot = DeserializeSnapshot, - SerializeSnapshot = SerializeSnapshot, - DeserializeSnapshotRaw = Serialization.DeserializeSnapshot, - SerializeSnapshotRaw = Serialization.SerializeSnapshot, - ConvertSnapshotToUpdate = SnapshotToUpdate - }; - - private static Snapshot DeserializeSnapshot(ComponentData snapshot) - { - var schemaDataOpt = snapshot.SchemaData; - if (!schemaDataOpt.HasValue) - { - throw new ArgumentException($"Can not deserialize an empty {nameof(ComponentData)}"); - } - - return Serialization.DeserializeSnapshot(schemaDataOpt.Value.GetFields()); - } - - private static void SerializeSnapshot(Snapshot snapshot, ComponentData data) - { - var schemaDataOpt = data.SchemaData; - if (!schemaDataOpt.HasValue) - { - throw new ArgumentException($"Can not serialise an empty {nameof(ComponentData)}"); - } - - Serialization.SerializeSnapshot(snapshot, data.SchemaData.Value.GetFields()); - } - - private static Update SnapshotToUpdate(in Snapshot snapshot) - { - var update = new Update - { -<# foreach (var field in fieldDetailsList) { #> - <#= field.PascalCaseName #> = snapshot.<#= field.PascalCaseName #>, -<# } #> - }; - - return update; - } - - public void InvokeHandler(Dynamic.IHandler handler) - { - handler.Accept(ComponentId, VTable); - } - } - } -} diff --git a/workers/unity/Packages/io.improbable.gdk.core/.codegen/Templates/UnityComponentSenderGenerator.tt b/workers/unity/Packages/io.improbable.gdk.core/.codegen/Templates/UnityComponentSenderGenerator.tt deleted file mode 100644 index 57b37f079a..0000000000 --- a/workers/unity/Packages/io.improbable.gdk.core/.codegen/Templates/UnityComponentSenderGenerator.tt +++ /dev/null @@ -1,95 +0,0 @@ -<#@ template language="C#" #> -<#@ output extension=".cs" #> -<# - var componentDetails = GetComponentDetails(); - var fieldDetailsList = GetFieldDetailsList(); - var generatedHeader = CommonGeneratorUtils.GetGeneratedHeader(); - var componentNamespace = $"global::{qualifiedNamespace}.{componentDetails.ComponentName}"; - var profilingStart = $"Profiler.BeginSample(\"{componentDetails.ComponentName}\");"; - var profilingEnd = "Profiler.EndSample();"; -#> -<#= generatedHeader #> - -using System; -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.Profiling; -using Unity.Mathematics; -using Unity.Entities; -using Unity.Collections; -using Improbable.Gdk.Core; -using Improbable.Gdk.Core.CodegenAdapters; - -namespace <#= qualifiedNamespace #> -{ - public partial class <#= componentDetails.ComponentName #> - { -<# - logger.Trace($"Generating {qualifiedNamespace}.{componentDetails.ComponentName}.ComponentReplicator internal class."); -#> - internal class ComponentReplicator : IComponentReplicationHandler - { - public uint ComponentId => <#= componentDetails.ComponentId #>; - - public EntityQueryDesc ComponentUpdateQuery => new EntityQueryDesc - { - All = new[] - { - ComponentType.ReadWrite<<#= componentNamespace #>.Component>(), - ComponentType.ReadWrite<<#= componentNamespace #>.ComponentAuthority>(), - ComponentType.ReadOnly() - }, - }; - - public void SendUpdates( - NativeArray chunkArray, - ComponentSystemBase system, - EntityManager entityManager, - ComponentUpdateSystem componentUpdateSystem) - { - <#= profilingStart #> - - var spatialOSEntityType = system.GetArchetypeChunkComponentType(true); - var componentType = system.GetArchetypeChunkComponentType<<#= componentNamespace #>.Component>(); - - var authorityType = system.GetArchetypeChunkSharedComponentType(); - - foreach (var chunk in chunkArray) - { - var entityIdArray = chunk.GetNativeArray(spatialOSEntityType); - var componentArray = chunk.GetNativeArray(componentType); - - var authorityIndex = chunk.GetSharedComponentIndex(authorityType); - - if (!entityManager.GetSharedComponentData(authorityIndex).HasAuthority) - { - continue; - } - - for (var i = 0; i < componentArray.Length; i++) - { - var data = componentArray[i]; - if (data.IsDataDirty()) - { - Update update = new Update(); -<# for (var i = 0; i < fieldDetailsList.Count; i++) { -var fieldDetails = fieldDetailsList[i]; #> - - if (data.IsDataDirty(<#= i #>)) - { - update.<#= fieldDetails.PascalCaseName #> = data.<#= fieldDetails.PascalCaseName #>; - } -<# } #> - - componentUpdateSystem.SendUpdate(in update, entityIdArray[i].EntityId); - data.MarkDataClean(); - componentArray[i] = data; - } - } - } - - <#= profilingEnd #> - } - } - } -} diff --git a/workers/unity/Packages/io.improbable.gdk.gameobjectcreation/.codegen/Source/Generators/GameObjectCreation/UnityCommandSenderReceiverGenerator.cs b/workers/unity/Packages/io.improbable.gdk.gameobjectcreation/.codegen/Source/Generators/GameObjectCreation/UnityCommandSenderReceiverGenerator.cs index 1488e61a61..c9936d5cec 100644 --- a/workers/unity/Packages/io.improbable.gdk.gameobjectcreation/.codegen/Source/Generators/GameObjectCreation/UnityCommandSenderReceiverGenerator.cs +++ b/workers/unity/Packages/io.improbable.gdk.gameobjectcreation/.codegen/Source/Generators/GameObjectCreation/UnityCommandSenderReceiverGenerator.cs @@ -350,9 +350,9 @@ private static TypeBlock GenerateCommandSender(UnityComponentDetails componentDe c.Line(@" public void RemoveAllCallbacks() -{{ +{ ++callbackEpoch; -}} +} "); }); } diff --git a/workers/unity/Packages/io.improbable.gdk.tools/.CodeGenTemplate/CodeGen/CodeGen.csproj b/workers/unity/Packages/io.improbable.gdk.tools/.CodeGenTemplate/CodeGen/CodeGen.csproj index 4a7c846d72..8f9881d59d 100644 --- a/workers/unity/Packages/io.improbable.gdk.tools/.CodeGenTemplate/CodeGen/CodeGen.csproj +++ b/workers/unity/Packages/io.improbable.gdk.tools/.CodeGenTemplate/CodeGen/CodeGen.csproj @@ -22,12 +22,4 @@ - - - - - - - -