public override void CleanComponents(NativeArray <ArchetypeChunk> chunkArray, ComponentSystemBase system, EntityCommandBuffer buffer) { var entityType = system.GetArchetypeChunkEntityType(); var componentAddedType = system.GetArchetypeChunkComponentType <ComponentAdded <global::Improbable.Gdk.PlayerLifecycle.OwningWorker.Component> >(); var componentRemovedType = system.GetArchetypeChunkComponentType <ComponentRemoved <global::Improbable.Gdk.PlayerLifecycle.OwningWorker.Component> >(); var receivedUpdateType = system.GetArchetypeChunkComponentType <global::Improbable.Gdk.PlayerLifecycle.OwningWorker.ReceivedUpdates>(); var authorityChangeType = system.GetArchetypeChunkComponentType <AuthorityChanges <global::Improbable.Gdk.PlayerLifecycle.OwningWorker.Component> >(); foreach (var chunk in chunkArray) { var entities = chunk.GetNativeArray(entityType); // Updates if (chunk.Has(receivedUpdateType)) { var updateArray = chunk.GetNativeArray(receivedUpdateType); for (int i = 0; i < entities.Length; ++i) { buffer.RemoveComponent <global::Improbable.Gdk.PlayerLifecycle.OwningWorker.ReceivedUpdates>(entities[i]); var updateList = updateArray[i].Updates; // Pool update lists to avoid excessive allocation updateList.Clear(); global::Improbable.Gdk.PlayerLifecycle.OwningWorker.Update.Pool.Push(updateList); ReferenceTypeProviders.UpdatesProvider.Free(updateArray[i].handle); } } // Component Added if (chunk.Has(componentAddedType)) { for (int i = 0; i < entities.Length; ++i) { buffer.RemoveComponent <ComponentAdded <global::Improbable.Gdk.PlayerLifecycle.OwningWorker.Component> >(entities[i]); } } // Component Removed if (chunk.Has(componentRemovedType)) { for (int i = 0; i < entities.Length; ++i) { buffer.RemoveComponent <ComponentRemoved <global::Improbable.Gdk.PlayerLifecycle.OwningWorker.Component> >(entities[i]); } } // Authority if (chunk.Has(authorityChangeType)) { var authorityChangeArray = chunk.GetNativeArray(authorityChangeType); for (int i = 0; i < entities.Length; ++i) { buffer.RemoveComponent <AuthorityChanges <global::Improbable.Gdk.PlayerLifecycle.OwningWorker.Component> >(entities[i]); AuthorityChangesProvider.Free(authorityChangeArray[i].Handle); } } } }
public override void CleanupAuthChanges(ComponentGroup authorityChangeGroup, ref EntityCommandBuffer buffer) { var entities = authorityChangeGroup.GetEntityArray(); var data = authorityChangeGroup.GetComponentDataArray <AuthorityChanges <Improbable.Gdk.Tests.ExhaustiveOptional.Component> >(); for (var i = 0; i < entities.Length; i++) { buffer.RemoveComponent <AuthorityChanges <Improbable.Gdk.Tests.ExhaustiveOptional.Component> >(entities[i]); AuthorityChangesProvider.Free(data[i].Handle); } }
public override void CleanupAuthChanges(ComponentGroup authorityChangeGroup, ref EntityCommandBuffer buffer) { var entities = authorityChangeGroup.GetEntityArray(); var data = authorityChangeGroup.GetComponentDataArray <AuthorityChanges <SpatialOSExhaustiveSingular> >(); for (var i = 0; i < entities.Length; i++) { buffer.RemoveComponent <AuthorityChanges <SpatialOSExhaustiveSingular> >(entities[i]); AuthorityChangesProvider.Free(data[i].Handle); } }
public override void CleanupAuthChanges(ComponentGroup authorityChangeGroup, ref EntityCommandBuffer buffer) { var entities = authorityChangeGroup.GetEntityArray(); var data = authorityChangeGroup.GetComponentDataArray <AuthorityChanges <Generated.Improbable.Gdk.Tests.AlternateSchemaSyntax.Connection.Component> >(); for (var i = 0; i < entities.Length; i++) { buffer.RemoveComponent <AuthorityChanges <Generated.Improbable.Gdk.Tests.AlternateSchemaSyntax.Connection.Component> >(entities[i]); AuthorityChangesProvider.Free(data[i].Handle); } }
private void ApplyAuthorityChange(Unity.Entities.Entity entity, Authority authority, global::Improbable.Worker.EntityId entityId) { switch (authority) { case Authority.Authoritative: if (!entityManager.HasComponent <NotAuthoritative <Improbable.Gdk.Tests.ExhaustiveOptional.Component> >(entity)) { LogInvalidAuthorityTransition(Authority.Authoritative, Authority.NotAuthoritative, entityId); return; } entityManager.RemoveComponent <NotAuthoritative <Improbable.Gdk.Tests.ExhaustiveOptional.Component> >(entity); entityManager.AddComponent(entity, ComponentType.Create <Authoritative <Improbable.Gdk.Tests.ExhaustiveOptional.Component> >()); // Add event senders break; case Authority.AuthorityLossImminent: if (!entityManager.HasComponent <Authoritative <Improbable.Gdk.Tests.ExhaustiveOptional.Component> >(entity)) { LogInvalidAuthorityTransition(Authority.AuthorityLossImminent, Authority.Authoritative, entityId); return; } entityManager.AddComponent(entity, ComponentType.Create <AuthorityLossImminent <Improbable.Gdk.Tests.ExhaustiveOptional.Component> >()); break; case Authority.NotAuthoritative: if (!entityManager.HasComponent <Authoritative <Improbable.Gdk.Tests.ExhaustiveOptional.Component> >(entity)) { LogInvalidAuthorityTransition(Authority.NotAuthoritative, Authority.Authoritative, entityId); return; } if (entityManager.HasComponent <AuthorityLossImminent <Improbable.Gdk.Tests.ExhaustiveOptional.Component> >(entity)) { entityManager.RemoveComponent <AuthorityLossImminent <Improbable.Gdk.Tests.ExhaustiveOptional.Component> >(entity); } entityManager.RemoveComponent <Authoritative <Improbable.Gdk.Tests.ExhaustiveOptional.Component> >(entity); entityManager.AddComponent(entity, ComponentType.Create <NotAuthoritative <Improbable.Gdk.Tests.ExhaustiveOptional.Component> >()); // Remove event senders break; } List <Authority> authorityChanges; if (entityManager.HasComponent <AuthorityChanges <Improbable.Gdk.Tests.ExhaustiveOptional.Component> >(entity)) { authorityChanges = entityManager.GetComponentData <AuthorityChanges <Improbable.Gdk.Tests.ExhaustiveOptional.Component> >(entity).Changes; } else { var changes = new AuthorityChanges <Improbable.Gdk.Tests.ExhaustiveOptional.Component> { Handle = AuthorityChangesProvider.Allocate(World) }; AuthorityChangesProvider.Set(changes.Handle, new List <Authority>()); authorityChanges = changes.Changes; entityManager.AddComponentData(entity, changes); } authorityChanges.Add(authority); }
private void ApplyAuthorityChange(Unity.Entities.Entity entity, Authority authority, global::Improbable.Worker.EntityId entityId) { switch (authority) { case Authority.Authoritative: if (!entityManager.HasComponent <NotAuthoritative <Improbable.Gdk.Tests.ComponentsWithNoFields.ComponentWithNoFieldsWithEvents.Component> >(entity)) { LogInvalidAuthorityTransition(Authority.Authoritative, Authority.NotAuthoritative, entityId); return; } entityManager.RemoveComponent <NotAuthoritative <Improbable.Gdk.Tests.ComponentsWithNoFields.ComponentWithNoFieldsWithEvents.Component> >(entity); entityManager.AddComponent(entity, ComponentType.Create <Authoritative <Improbable.Gdk.Tests.ComponentsWithNoFields.ComponentWithNoFieldsWithEvents.Component> >()); // Add event senders { var eventSender = new EventSender.Evt() { handle = ReferenceTypeProviders.EvtProvider.Allocate(World) }; ReferenceTypeProviders.EvtProvider.Set(eventSender.handle, new List <global::Improbable.Gdk.Tests.ComponentsWithNoFields.Empty>()); entityManager.AddComponentData(entity, eventSender); } break; case Authority.AuthorityLossImminent: if (!entityManager.HasComponent <Authoritative <Improbable.Gdk.Tests.ComponentsWithNoFields.ComponentWithNoFieldsWithEvents.Component> >(entity)) { LogInvalidAuthorityTransition(Authority.AuthorityLossImminent, Authority.Authoritative, entityId); return; } entityManager.AddComponent(entity, ComponentType.Create <AuthorityLossImminent <Improbable.Gdk.Tests.ComponentsWithNoFields.ComponentWithNoFieldsWithEvents.Component> >()); break; case Authority.NotAuthoritative: if (!entityManager.HasComponent <Authoritative <Improbable.Gdk.Tests.ComponentsWithNoFields.ComponentWithNoFieldsWithEvents.Component> >(entity)) { LogInvalidAuthorityTransition(Authority.NotAuthoritative, Authority.Authoritative, entityId); return; } if (entityManager.HasComponent <AuthorityLossImminent <Improbable.Gdk.Tests.ComponentsWithNoFields.ComponentWithNoFieldsWithEvents.Component> >(entity)) { entityManager.RemoveComponent <AuthorityLossImminent <Improbable.Gdk.Tests.ComponentsWithNoFields.ComponentWithNoFieldsWithEvents.Component> >(entity); } entityManager.RemoveComponent <Authoritative <Improbable.Gdk.Tests.ComponentsWithNoFields.ComponentWithNoFieldsWithEvents.Component> >(entity); entityManager.AddComponent(entity, ComponentType.Create <NotAuthoritative <Improbable.Gdk.Tests.ComponentsWithNoFields.ComponentWithNoFieldsWithEvents.Component> >()); // Remove event senders { var eventSender = entityManager.GetComponentData <EventSender.Evt>(entity); ReferenceTypeProviders.EvtProvider.Free(eventSender.handle); entityManager.RemoveComponent <EventSender.Evt>(entity); } break; } List <Authority> authorityChanges; if (entityManager.HasComponent <AuthorityChanges <Improbable.Gdk.Tests.ComponentsWithNoFields.ComponentWithNoFieldsWithEvents.Component> >(entity)) { authorityChanges = entityManager.GetComponentData <AuthorityChanges <Improbable.Gdk.Tests.ComponentsWithNoFields.ComponentWithNoFieldsWithEvents.Component> >(entity).Changes; } else { var changes = new AuthorityChanges <Improbable.Gdk.Tests.ComponentsWithNoFields.ComponentWithNoFieldsWithEvents.Component> { Handle = AuthorityChangesProvider.Allocate(World) }; AuthorityChangesProvider.Set(changes.Handle, new List <Authority>()); authorityChanges = changes.Changes; entityManager.AddComponentData(entity, changes); } authorityChanges.Add(authority); }
public override void CleanComponents(ComponentGroup group, ComponentSystemBase system, EntityCommandBuffer buffer) { var entityType = system.GetArchetypeChunkEntityType(); var componentAddedType = system.GetArchetypeChunkComponentType <ComponentAdded <Improbable.Gdk.Tests.NestedComponent.Component> >(); var componentRemovedType = system.GetArchetypeChunkComponentType <ComponentRemoved <Improbable.Gdk.Tests.NestedComponent.Component> >(); var receivedUpdateType = system.GetArchetypeChunkComponentType <Improbable.Gdk.Tests.NestedComponent.ReceivedUpdates>(); var authorityChangeType = system.GetArchetypeChunkComponentType <AuthorityChanges <Improbable.Gdk.Tests.NestedComponent.Component> >(); var chunkArray = group.CreateArchetypeChunkArray(Allocator.TempJob); foreach (var chunk in chunkArray) { var entities = chunk.GetNativeArray(entityType); // Updates if (chunk.Has(receivedUpdateType)) { var updateArray = chunk.GetNativeArray(receivedUpdateType); for (int i = 0; i < entities.Length; ++i) { buffer.RemoveComponent <Improbable.Gdk.Tests.NestedComponent.ReceivedUpdates>(entities[i]); var updateList = updateArray[i].Updates; // Pool update lists to avoid excessive allocation updateList.Clear(); Improbable.Gdk.Tests.NestedComponent.Update.Pool.Push(updateList); ReferenceTypeProviders.UpdatesProvider.Free(updateArray[i].handle); } } // Component Added if (chunk.Has(componentAddedType)) { for (int i = 0; i < entities.Length; ++i) { buffer.RemoveComponent <ComponentAdded <Improbable.Gdk.Tests.NestedComponent.Component> >(entities[i]); } } // Component Removed if (chunk.Has(componentRemovedType)) { for (int i = 0; i < entities.Length; ++i) { buffer.RemoveComponent <ComponentRemoved <Improbable.Gdk.Tests.NestedComponent.Component> >(entities[i]); } } // Authority if (chunk.Has(authorityChangeType)) { var authorityChangeArray = chunk.GetNativeArray(authorityChangeType); for (int i = 0; i < entities.Length; ++i) { buffer.RemoveComponent <AuthorityChanges <Improbable.Gdk.Tests.NestedComponent.Component> >(entities[i]); AuthorityChangesProvider.Free(authorityChangeArray[i].Handle); } } } chunkArray.Dispose(); }
public override void CleanComponents(NativeArray <ArchetypeChunk> chunkArray, ComponentSystemBase system, EntityCommandBuffer buffer) { var entityType = system.GetArchetypeChunkEntityType(); var componentAddedType = system.GetArchetypeChunkComponentType <ComponentAdded <Improbable.Gdk.Tests.AlternateSchemaSyntax.Connection.Component> >(); var componentRemovedType = system.GetArchetypeChunkComponentType <ComponentRemoved <Improbable.Gdk.Tests.AlternateSchemaSyntax.Connection.Component> >(); var receivedUpdateType = system.GetArchetypeChunkComponentType <Improbable.Gdk.Tests.AlternateSchemaSyntax.Connection.ReceivedUpdates>(); var authorityChangeType = system.GetArchetypeChunkComponentType <AuthorityChanges <Improbable.Gdk.Tests.AlternateSchemaSyntax.Connection.Component> >(); var myEventEventType = system.GetArchetypeChunkComponentType <ReceivedEvents.MyEvent>(); foreach (var chunk in chunkArray) { var entities = chunk.GetNativeArray(entityType); // Updates if (chunk.Has(receivedUpdateType)) { var updateArray = chunk.GetNativeArray(receivedUpdateType); for (int i = 0; i < entities.Length; ++i) { buffer.RemoveComponent <Improbable.Gdk.Tests.AlternateSchemaSyntax.Connection.ReceivedUpdates>(entities[i]); var updateList = updateArray[i].Updates; // Pool update lists to avoid excessive allocation updateList.Clear(); Improbable.Gdk.Tests.AlternateSchemaSyntax.Connection.Update.Pool.Push(updateList); ReferenceTypeProviders.UpdatesProvider.Free(updateArray[i].handle); } } // Component Added if (chunk.Has(componentAddedType)) { for (int i = 0; i < entities.Length; ++i) { buffer.RemoveComponent <ComponentAdded <Improbable.Gdk.Tests.AlternateSchemaSyntax.Connection.Component> >(entities[i]); } } // Component Removed if (chunk.Has(componentRemovedType)) { for (int i = 0; i < entities.Length; ++i) { buffer.RemoveComponent <ComponentRemoved <Improbable.Gdk.Tests.AlternateSchemaSyntax.Connection.Component> >(entities[i]); } } // Authority if (chunk.Has(authorityChangeType)) { var authorityChangeArray = chunk.GetNativeArray(authorityChangeType); for (int i = 0; i < entities.Length; ++i) { buffer.RemoveComponent <AuthorityChanges <Improbable.Gdk.Tests.AlternateSchemaSyntax.Connection.Component> >(entities[i]); AuthorityChangesProvider.Free(authorityChangeArray[i].Handle); } } // MyEvent Event if (chunk.Has(myEventEventType)) { var myEventEventArray = chunk.GetNativeArray(myEventEventType); for (int i = 0; i < entities.Length; ++i) { buffer.RemoveComponent <ReceivedEvents.MyEvent>(entities[i]); ReferenceTypeProviders.MyEventProvider.Free(myEventEventArray[i].handle); } } } }
public override void CleanComponents(NativeArray <ArchetypeChunk> chunkArray, ComponentSystemBase system, EntityCommandBuffer buffer) { var entityType = system.GetArchetypeChunkEntityType(); var componentAddedType = system.GetArchetypeChunkComponentType <ComponentAdded <Improbable.Gdk.Tests.NonblittableTypes.NonBlittableComponent.Component> >(); var componentRemovedType = system.GetArchetypeChunkComponentType <ComponentRemoved <Improbable.Gdk.Tests.NonblittableTypes.NonBlittableComponent.Component> >(); var receivedUpdateType = system.GetArchetypeChunkComponentType <Improbable.Gdk.Tests.NonblittableTypes.NonBlittableComponent.ReceivedUpdates>(); var authorityChangeType = system.GetArchetypeChunkComponentType <AuthorityChanges <Improbable.Gdk.Tests.NonblittableTypes.NonBlittableComponent.Component> >(); var firstEventEventType = system.GetArchetypeChunkComponentType <ReceivedEvents.FirstEvent>(); var secondEventEventType = system.GetArchetypeChunkComponentType <ReceivedEvents.SecondEvent>(); var firstCommandRequestType = system.GetArchetypeChunkComponentType <CommandRequests.FirstCommand>(); var firstCommandResponseType = system.GetArchetypeChunkComponentType <CommandResponses.FirstCommand>(); var secondCommandRequestType = system.GetArchetypeChunkComponentType <CommandRequests.SecondCommand>(); var secondCommandResponseType = system.GetArchetypeChunkComponentType <CommandResponses.SecondCommand>(); foreach (var chunk in chunkArray) { var entities = chunk.GetNativeArray(entityType); // Updates if (chunk.Has(receivedUpdateType)) { var updateArray = chunk.GetNativeArray(receivedUpdateType); for (int i = 0; i < entities.Length; ++i) { buffer.RemoveComponent <Improbable.Gdk.Tests.NonblittableTypes.NonBlittableComponent.ReceivedUpdates>(entities[i]); var updateList = updateArray[i].Updates; // Pool update lists to avoid excessive allocation updateList.Clear(); Improbable.Gdk.Tests.NonblittableTypes.NonBlittableComponent.Update.Pool.Push(updateList); ReferenceTypeProviders.UpdatesProvider.Free(updateArray[i].handle); } } // Component Added if (chunk.Has(componentAddedType)) { for (int i = 0; i < entities.Length; ++i) { buffer.RemoveComponent <ComponentAdded <Improbable.Gdk.Tests.NonblittableTypes.NonBlittableComponent.Component> >(entities[i]); } } // Component Removed if (chunk.Has(componentRemovedType)) { for (int i = 0; i < entities.Length; ++i) { buffer.RemoveComponent <ComponentRemoved <Improbable.Gdk.Tests.NonblittableTypes.NonBlittableComponent.Component> >(entities[i]); } } // Authority if (chunk.Has(authorityChangeType)) { var authorityChangeArray = chunk.GetNativeArray(authorityChangeType); for (int i = 0; i < entities.Length; ++i) { buffer.RemoveComponent <AuthorityChanges <Improbable.Gdk.Tests.NonblittableTypes.NonBlittableComponent.Component> >(entities[i]); AuthorityChangesProvider.Free(authorityChangeArray[i].Handle); } } // FirstEvent Event if (chunk.Has(firstEventEventType)) { var firstEventEventArray = chunk.GetNativeArray(firstEventEventType); for (int i = 0; i < entities.Length; ++i) { buffer.RemoveComponent <ReceivedEvents.FirstEvent>(entities[i]); ReferenceTypeProviders.FirstEventProvider.Free(firstEventEventArray[i].handle); } } // SecondEvent Event if (chunk.Has(secondEventEventType)) { var secondEventEventArray = chunk.GetNativeArray(secondEventEventType); for (int i = 0; i < entities.Length; ++i) { buffer.RemoveComponent <ReceivedEvents.SecondEvent>(entities[i]); ReferenceTypeProviders.SecondEventProvider.Free(secondEventEventArray[i].handle); } } // FirstCommand Command if (chunk.Has(firstCommandRequestType)) { var firstCommandRequestArray = chunk.GetNativeArray(firstCommandRequestType); for (int i = 0; i < entities.Length; ++i) { buffer.RemoveComponent <CommandRequests.FirstCommand>(entities[i]); ReferenceTypeProviders.FirstCommandRequestsProvider.Free(firstCommandRequestArray[i].CommandListHandle); } } if (chunk.Has(firstCommandResponseType)) { var firstCommandResponseArray = chunk.GetNativeArray(firstCommandResponseType); for (int i = 0; i < entities.Length; ++i) { buffer.RemoveComponent <CommandResponses.FirstCommand>(entities[i]); ReferenceTypeProviders.FirstCommandResponsesProvider.Free(firstCommandResponseArray[i].CommandListHandle); } } // SecondCommand Command if (chunk.Has(secondCommandRequestType)) { var secondCommandRequestArray = chunk.GetNativeArray(secondCommandRequestType); for (int i = 0; i < entities.Length; ++i) { buffer.RemoveComponent <CommandRequests.SecondCommand>(entities[i]); ReferenceTypeProviders.SecondCommandRequestsProvider.Free(secondCommandRequestArray[i].CommandListHandle); } } if (chunk.Has(secondCommandResponseType)) { var secondCommandResponseArray = chunk.GetNativeArray(secondCommandResponseType); for (int i = 0; i < entities.Length; ++i) { buffer.RemoveComponent <CommandResponses.SecondCommand>(entities[i]); ReferenceTypeProviders.SecondCommandResponsesProvider.Free(secondCommandResponseArray[i].CommandListHandle); } } } }
private void ApplyAuthorityChange(Unity.Entities.Entity entity, Authority authority, global::Improbable.Worker.EntityId entityId) { switch (authority) { case Authority.Authoritative: if (!entityManager.HasComponent <NotAuthoritative <SpatialOSConnection> >(entity)) { LogInvalidAuthorityTransition(Authority.Authoritative, Authority.NotAuthoritative, entityId); return; } entityManager.RemoveComponent <NotAuthoritative <SpatialOSConnection> >(entity); entityManager.AddComponentData(entity, new Authoritative <SpatialOSConnection>()); // Add event senders { var eventSender = new EventSender.MyEvent() { handle = ReferenceTypeProviders.MyEventProvider.Allocate(World) }; ReferenceTypeProviders.MyEventProvider.Set(eventSender.handle, new List <global::Generated.Improbable.Gdk.Tests.AlternateSchemaSyntax.RandomDataType>()); entityManager.AddComponentData(entity, eventSender); } break; case Authority.AuthorityLossImminent: if (!entityManager.HasComponent <Authoritative <SpatialOSConnection> >(entity)) { LogInvalidAuthorityTransition(Authority.AuthorityLossImminent, Authority.Authoritative, entityId); return; } entityManager.AddComponentData(entity, new AuthorityLossImminent <SpatialOSConnection>()); break; case Authority.NotAuthoritative: if (!entityManager.HasComponent <Authoritative <SpatialOSConnection> >(entity)) { LogInvalidAuthorityTransition(Authority.NotAuthoritative, Authority.Authoritative, entityId); return; } if (entityManager.HasComponent <AuthorityLossImminent <SpatialOSConnection> >(entity)) { entityManager.RemoveComponent <AuthorityLossImminent <SpatialOSConnection> >(entity); } entityManager.RemoveComponent <Authoritative <SpatialOSConnection> >(entity); entityManager.AddComponentData(entity, new NotAuthoritative <SpatialOSConnection>()); // Remove event senders { var eventSender = entityManager.GetComponentData <EventSender.MyEvent>(entity); ReferenceTypeProviders.MyEventProvider.Free(eventSender.handle); entityManager.RemoveComponent <EventSender.MyEvent>(entity); } break; } List <Authority> authorityChanges; if (entityManager.HasComponent <AuthorityChanges <SpatialOSConnection> >(entity)) { authorityChanges = entityManager.GetComponentData <AuthorityChanges <SpatialOSConnection> >(entity).Changes; } else { var changes = new AuthorityChanges <SpatialOSConnection> { Handle = AuthorityChangesProvider.Allocate(World) }; AuthorityChangesProvider.Set(changes.Handle, new List <Authority>()); authorityChanges = changes.Changes; entityManager.AddComponentData(entity, changes); } authorityChanges.Add(authority); }
public override void CleanComponents(NativeArray <ArchetypeChunk> chunkArray, ComponentSystemBase system, EntityCommandBuffer buffer) { var entityType = system.GetArchetypeChunkEntityType(); var componentAddedType = system.GetArchetypeChunkComponentType <ComponentAdded <Improbable.Gdk.Health.HealthComponent.Component> >(); var componentRemovedType = system.GetArchetypeChunkComponentType <ComponentRemoved <Improbable.Gdk.Health.HealthComponent.Component> >(); var receivedUpdateType = system.GetArchetypeChunkComponentType <Improbable.Gdk.Health.HealthComponent.ReceivedUpdates>(); var authorityChangeType = system.GetArchetypeChunkComponentType <AuthorityChanges <Improbable.Gdk.Health.HealthComponent.Component> >(); var healthModifiedEventType = system.GetArchetypeChunkComponentType <ReceivedEvents.HealthModified>(); var respawnEventType = system.GetArchetypeChunkComponentType <ReceivedEvents.Respawn>(); var modifyHealthRequestType = system.GetArchetypeChunkComponentType <CommandRequests.ModifyHealth>(); var modifyHealthResponseType = system.GetArchetypeChunkComponentType <CommandResponses.ModifyHealth>(); var requestRespawnRequestType = system.GetArchetypeChunkComponentType <CommandRequests.RequestRespawn>(); var requestRespawnResponseType = system.GetArchetypeChunkComponentType <CommandResponses.RequestRespawn>(); foreach (var chunk in chunkArray) { var entities = chunk.GetNativeArray(entityType); // Updates if (chunk.Has(receivedUpdateType)) { var updateArray = chunk.GetNativeArray(receivedUpdateType); for (int i = 0; i < entities.Length; ++i) { buffer.RemoveComponent <Improbable.Gdk.Health.HealthComponent.ReceivedUpdates>(entities[i]); var updateList = updateArray[i].Updates; // Pool update lists to avoid excessive allocation updateList.Clear(); Improbable.Gdk.Health.HealthComponent.Update.Pool.Push(updateList); ReferenceTypeProviders.UpdatesProvider.Free(updateArray[i].handle); } } // Component Added if (chunk.Has(componentAddedType)) { for (int i = 0; i < entities.Length; ++i) { buffer.RemoveComponent <ComponentAdded <Improbable.Gdk.Health.HealthComponent.Component> >(entities[i]); } } // Component Removed if (chunk.Has(componentRemovedType)) { for (int i = 0; i < entities.Length; ++i) { buffer.RemoveComponent <ComponentRemoved <Improbable.Gdk.Health.HealthComponent.Component> >(entities[i]); } } // Authority if (chunk.Has(authorityChangeType)) { var authorityChangeArray = chunk.GetNativeArray(authorityChangeType); for (int i = 0; i < entities.Length; ++i) { buffer.RemoveComponent <AuthorityChanges <Improbable.Gdk.Health.HealthComponent.Component> >(entities[i]); AuthorityChangesProvider.Free(authorityChangeArray[i].Handle); } } // HealthModified Event if (chunk.Has(healthModifiedEventType)) { var healthModifiedEventArray = chunk.GetNativeArray(healthModifiedEventType); for (int i = 0; i < entities.Length; ++i) { buffer.RemoveComponent <ReceivedEvents.HealthModified>(entities[i]); ReferenceTypeProviders.HealthModifiedProvider.Free(healthModifiedEventArray[i].handle); } } // Respawn Event if (chunk.Has(respawnEventType)) { var respawnEventArray = chunk.GetNativeArray(respawnEventType); for (int i = 0; i < entities.Length; ++i) { buffer.RemoveComponent <ReceivedEvents.Respawn>(entities[i]); ReferenceTypeProviders.RespawnProvider.Free(respawnEventArray[i].handle); } } // ModifyHealth Command if (chunk.Has(modifyHealthRequestType)) { var modifyHealthRequestArray = chunk.GetNativeArray(modifyHealthRequestType); for (int i = 0; i < entities.Length; ++i) { buffer.RemoveComponent <CommandRequests.ModifyHealth>(entities[i]); ReferenceTypeProviders.ModifyHealthRequestsProvider.Free(modifyHealthRequestArray[i].CommandListHandle); } } if (chunk.Has(modifyHealthResponseType)) { var modifyHealthResponseArray = chunk.GetNativeArray(modifyHealthResponseType); for (int i = 0; i < entities.Length; ++i) { buffer.RemoveComponent <CommandResponses.ModifyHealth>(entities[i]); ReferenceTypeProviders.ModifyHealthResponsesProvider.Free(modifyHealthResponseArray[i].CommandListHandle); } } // RequestRespawn Command if (chunk.Has(requestRespawnRequestType)) { var requestRespawnRequestArray = chunk.GetNativeArray(requestRespawnRequestType); for (int i = 0; i < entities.Length; ++i) { buffer.RemoveComponent <CommandRequests.RequestRespawn>(entities[i]); ReferenceTypeProviders.RequestRespawnRequestsProvider.Free(requestRespawnRequestArray[i].CommandListHandle); } } if (chunk.Has(requestRespawnResponseType)) { var requestRespawnResponseArray = chunk.GetNativeArray(requestRespawnResponseType); for (int i = 0; i < entities.Length; ++i) { buffer.RemoveComponent <CommandResponses.RequestRespawn>(entities[i]); ReferenceTypeProviders.RequestRespawnResponsesProvider.Free(requestRespawnResponseArray[i].CommandListHandle); } } } }