public override void OnComponentUpdate(ComponentUpdateOp op) { var entity = TryGetEntityFromEntityId(new EntityId(op.EntityId)); Profiler.BeginSample("Connection"); if (entityManager.HasComponent <NotAuthoritative <Improbable.Gdk.Tests.AlternateSchemaSyntax.Connection.Component> >(entity)) { var data = entityManager.GetComponentData <Improbable.Gdk.Tests.AlternateSchemaSyntax.Connection.Component>(entity); Improbable.Gdk.Tests.AlternateSchemaSyntax.Connection.Serialization.ApplyUpdate(op.Update.SchemaData.Value, ref data); data.MarkDataClean(); entityManager.SetComponentData(entity, data); } var update = Improbable.Gdk.Tests.AlternateSchemaSyntax.Connection.Serialization.DeserializeUpdate(op.Update.SchemaData.Value); List <Improbable.Gdk.Tests.AlternateSchemaSyntax.Connection.Update> updates; if (entityManager.HasComponent <Improbable.Gdk.Tests.AlternateSchemaSyntax.Connection.ReceivedUpdates>(entity)) { updates = entityManager.GetComponentData <Improbable.Gdk.Tests.AlternateSchemaSyntax.Connection.ReceivedUpdates>(entity).Updates; } else { updates = Improbable.Gdk.Tests.AlternateSchemaSyntax.Connection.Update.Pool.Count > 0 ? Improbable.Gdk.Tests.AlternateSchemaSyntax.Connection.Update.Pool.Pop() : new List <Improbable.Gdk.Tests.AlternateSchemaSyntax.Connection.Update>(); var updatesComponent = new Improbable.Gdk.Tests.AlternateSchemaSyntax.Connection.ReceivedUpdates { handle = ReferenceTypeProviders.UpdatesProvider.Allocate(World) }; ReferenceTypeProviders.UpdatesProvider.Set(updatesComponent.handle, updates); entityManager.AddComponentData(entity, updatesComponent); } updates.Add(update); var eventsObject = op.Update.SchemaData.Value.GetEvents(); { var eventCount = eventsObject.GetObjectCount(1); if (eventCount > 0) { // Create component to hold received events ReceivedEvents.MyEvent eventsReceived; List <global::Improbable.Gdk.Tests.AlternateSchemaSyntax.RandomDataType> eventList; if (!entityManager.HasComponent <ReceivedEvents.MyEvent>(entity)) { eventsReceived = new ReceivedEvents.MyEvent() { handle = ReferenceTypeProviders.MyEventProvider.Allocate(World) }; eventList = new List <global::Improbable.Gdk.Tests.AlternateSchemaSyntax.RandomDataType>((int)eventCount); ReferenceTypeProviders.MyEventProvider.Set(eventsReceived.handle, eventList); entityManager.AddComponentData(entity, eventsReceived); } else { eventsReceived = entityManager.GetComponentData <ReceivedEvents.MyEvent>(entity); eventList = eventsReceived.Events; } // Deserialize events onto component for (uint i = 0; i < eventCount; i++) { var e = global::Improbable.Gdk.Tests.AlternateSchemaSyntax.RandomDataType.Serialization.Deserialize(eventsObject.IndexObject(1, i)); eventList.Add(e); } } } Profiler.EndSample(); }
public override void OnComponentUpdate(ComponentUpdateOp op) { if (!IsValidEntityId(op.EntityId, "OnComponentUpdate", out var entity)) { return; } var data = entityManager.GetComponentData <SpatialOSConnection>(entity); var update = global::Generated.Improbable.Gdk.Tests.AlternateSchemaSyntax.SpatialOSConnection.Serialization.GetAndApplyUpdate(op.Update.SchemaData.Value.GetFields(), ref data); List <SpatialOSConnection.Update> updates; if (entityManager.HasComponent <SpatialOSConnection.ReceivedUpdates>(entity)) { updates = entityManager.GetComponentData <SpatialOSConnection.ReceivedUpdates>(entity).Updates; } else { var updatesComponent = new SpatialOSConnection.ReceivedUpdates { handle = ReferenceTypeProviders.UpdatesProvider.Allocate(World) }; ReferenceTypeProviders.UpdatesProvider.Set(updatesComponent.handle, new List <SpatialOSConnection.Update>()); updates = updatesComponent.Updates; entityManager.AddComponentData(entity, updatesComponent); } updates.Add(update); var eventsObject = op.Update.SchemaData.Value.GetEvents(); { var eventCount = eventsObject.GetObjectCount(1); if (eventCount > 0) { // Create component to hold received events ReceivedEvents.MyEvent eventsReceived; List <global::Generated.Improbable.Gdk.Tests.AlternateSchemaSyntax.RandomDataType> eventList; if (!entityManager.HasComponent <ReceivedEvents.MyEvent>(entity)) { eventsReceived = new ReceivedEvents.MyEvent() { handle = ReferenceTypeProviders.MyEventProvider.Allocate(World) }; eventList = new List <global::Generated.Improbable.Gdk.Tests.AlternateSchemaSyntax.RandomDataType>((int)eventCount); ReferenceTypeProviders.MyEventProvider.Set(eventsReceived.handle, eventList); entityManager.AddComponentData(entity, eventsReceived); } else { eventsReceived = entityManager.GetComponentData <ReceivedEvents.MyEvent>(entity); eventList = eventsReceived.Events; } // Deserialize events onto component for (var i = 0; i < eventCount; i++) { var e = global::Generated.Improbable.Gdk.Tests.AlternateSchemaSyntax.RandomDataType.Serialization.Deserialize(eventsObject.GetObject(1)); eventList.Add(e); } } } data.DirtyBit = false; entityManager.SetComponentData(entity, data); }