Ejemplo n.º 1
0
        public void SetupSystem(ISystem system)
        {
            var processEntityFunction     = CreateEntityProcessorFunction(system);
            var entityChangeSubscriptions = new CompositeDisposable();

            SystemSubscriptions.Add(system, entityChangeSubscriptions);

            var entitySubscriptions = new Dictionary <int, IDisposable>();

            EntitySubscriptions.Add(system, entitySubscriptions);

            var observableGroup = EntityCollectionManager.GetObservableGroup(system.Group);

            entityChangeSubscriptions.Add(
                observableGroup.EntityAdded.Subscribe(x =>
            {
                var subscription = processEntityFunction(x);
                entitySubscriptions.Add(x.Id, subscription);
            })
                );

            entityChangeSubscriptions.Add(
                observableGroup.EntityRemoved.Subscribe(x => entitySubscriptions.RemoveAndDispose(x.Id))
                );

            foreach (var entity in observableGroup)
            {
                var subscription = processEntityFunction(entity);
                entitySubscriptions.Add(entity.Id, subscription);
            }
        }
Ejemplo n.º 2
0
        public void SetupSystem(ISystem system)
        {
            var observableGroup           = EntityCollectionManager.GetObservableGroup(system.Group);
            var entitySubscriptions       = new Dictionary <int, IDisposable>();
            var entityChangeSubscriptions = new CompositeDisposable();

            SystemSubscriptions.Add(system, entityChangeSubscriptions);

            var castSystem = (IReactToEntitySystem)system;

            entityChangeSubscriptions.Add(
                observableGroup.EntityAdded
                .Subscribe(entity =>
            {
                var entitySubscription = ProcessEntity(castSystem, entity);
                entitySubscriptions.Add(entity.Id, entitySubscription);
            })
                );

            entityChangeSubscriptions.Add(
                observableGroup.EntityRemoved
                .Subscribe(entity =>
            {
                entitySubscriptions.RemoveAndDispose(entity.Id);
            })
                );

            foreach (var entity in observableGroup)
            {
                var entitySubscription = ProcessEntity(castSystem, entity);
                entitySubscriptions.Add(entity.Id, entitySubscription);
            }

            EntitySubscriptions.Add(system, entitySubscriptions);
        }
Ejemplo n.º 3
0
        public void TeardownSystem(ISystem system)
        {
            SystemSubscriptions.RemoveAndDispose(system);

            var entitySubscriptions = EntitySubscriptions[system];

            entitySubscriptions.Values.DisposeAll();
            entitySubscriptions.Clear();

            EntitySubscriptions.Remove(system);
        }
Ejemplo n.º 4
0
        public void Dispose()
        {
            entityAdded.Dispose();
            entityRemoved.Dispose();
            entityComponentsAdded.Dispose();
            entityComponentsRemoving.Dispose();
            entityComponentsRemoved.Dispose();

            EntityLookup.Clear();
            EntitySubscriptions.RemoveAndDisposeAll();
        }
Ejemplo n.º 5
0
        public void Dispose()
        {
            SystemSubscriptions.DisposeAll();

            foreach (var entitySubscriptions in EntitySubscriptions.Values)
            {
                entitySubscriptions.Values.DisposeAll();
                entitySubscriptions.Clear();
            }

            EntitySubscriptions.Clear();
        }
Ejemplo n.º 6
0
        public void SubscribeToEntity(IEntity entity)
        {
            var disposer = new CompositeDisposable
            {
                entity.ComponentsAdded.Subscribe(ids =>
                                                 entityComponentsAdded.OnNext(new ComponentsChangedEvent(entity, this, ids))
                                                 ),
                entity.ComponentsRemoving.Subscribe(ids =>
                                                    entityComponentsRemoving.OnNext(new ComponentsChangedEvent(entity, this, ids))
                                                    ),
                entity.ComponentsRemoved.Subscribe(ids =>
                                                   entityComponentsRemoved.OnNext(new ComponentsChangedEvent(entity, this, ids))
                                                   )
            };

            EntitySubscriptions.Add(entity.Id, disposer);
        }
Ejemplo n.º 7
0
        public void SetupSystem(ISystem system)
        {
            var entitySubscriptions = new Dictionary <int, IDisposable>();

            EntitySubscriptions.Add(system, entitySubscriptions);

            var entityChangeSubscriptions = new CompositeDisposable();

            SystemSubscriptions.Add(system, entityChangeSubscriptions);

            var castSystem      = (ISetupSystem)system;
            var observableGroup = EntityCollectionManager.GetObservableGroup(system.Group);

            entityChangeSubscriptions.Add(
                observableGroup.EntityAdded.Subscribe(entity =>
            {
                var possibleSubscription = ProcessEntity(castSystem, entity);

                if (possibleSubscription != null)
                {
                    entitySubscriptions.Add(entity.Id, possibleSubscription);
                }
            })
                );

            entityChangeSubscriptions.Add(
                observableGroup.EntityRemoved
                .Subscribe(entity =>
            {
                if (entitySubscriptions.ContainsKey(entity.Id))
                {
                    entitySubscriptions.RemoveAndDispose(entity.Id);
                }
            })
                );

            foreach (var entity in observableGroup)
            {
                var possibleSubscription = ProcessEntity(castSystem, entity);

                if (null != possibleSubscription)
                {
                    entitySubscriptions.Add(entity.Id, possibleSubscription);
                }
            }
        }
Ejemplo n.º 8
0
 public void UnsubscribeFromEntity(int entityId) => EntitySubscriptions.RemoveAndDispose(entityId);