Example #1
0
            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);
            }
Example #7
0
            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();
            }
Example #8
0
            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);
                        }
                    }
                }
            }
Example #9
0
            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);
                        }
                    }
                }
            }
Example #10
0
            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);
            }
Example #11
0
            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);
                        }
                    }
                }
            }