예제 #1
0
        ReactiveSystem(Pool pool, IReactiveExecuteSystem subSystem, TriggerOnEvent[] triggers)
        {
            _subsystem = subSystem;
            var ensureComponents = subSystem as IEnsureComponents;

            if (ensureComponents != null)
            {
                _ensureComponents = ensureComponents.ensureComponents;
            }
            var excludeComponents = subSystem as IExcludeComponents;

            if (excludeComponents != null)
            {
                _excludeComponents = excludeComponents.excludeComponents;
            }

            _clearAfterExecute = (subSystem as IClearReactiveSystem) != null;

            var triggersLength = triggers.Length;
            var groups         = new Group[triggersLength];
            var eventTypes     = new GroupEventType[triggersLength];

            for (int i = 0; i < triggersLength; i++)
            {
                var trigger = triggers[i];
                groups[i]     = pool.GetGroup(trigger.trigger);
                eventTypes[i] = trigger.eventType;
            }
            _observer = new GroupObserver(groups, eventTypes);
            _buffer   = new List <Entity>();
        }
예제 #2
0
        /// This is the recommended way to create systems.
        /// It will inject the pool if ISetPool is implemented.
        /// It will inject the pools if ISetPools is implemented.
        /// It will automatically create a ReactiveSystem if it is a
        /// IReactiveSystem, IMultiReactiveSystem or IEntityCollectorSystem.
        public static ISystem CreateSystem(this Pool pool,
                                           IReactiveExecuteSystem system,
                                           Pools pools)
        {
            SetPool(system, pool);
            SetPools(system, pools);

            var reactiveSystem = system as IReactiveSystem;

            if (reactiveSystem != null)
            {
                return(new ReactiveSystem(pool, reactiveSystem));
            }
            var multiReactiveSystem = system as IMultiReactiveSystem;

            if (multiReactiveSystem != null)
            {
                return(new ReactiveSystem(pool, multiReactiveSystem));
            }
            var entityCollectorSystem = system as IEntityCollectorSystem;

            if (entityCollectorSystem != null)
            {
                return(new ReactiveSystem(entityCollectorSystem));
            }

            throw new EntitasException(
                      "Could not create ReactiveSystem for " + system + "!",
                      "The system has to implement IReactiveSystem, " +
                      "IMultiReactiveSystem or IEntityCollectorSystem."
                      );
        }
예제 #3
0
        ReactiveSystem(Pool pool, IReactiveExecuteSystem subSystem, TriggerOnEvent[] triggers)
        {
            _subsystem = subSystem;
            var ensureComponents = subSystem as IEnsureComponents;
            if (ensureComponents != null) {
                _ensureComponents = ensureComponents.ensureComponents;
            }
            var excludeComponents = subSystem as IExcludeComponents;
            if (excludeComponents != null) {
                _excludeComponents = excludeComponents.excludeComponents;
            }

            _clearAfterExecute = (subSystem as IClearReactiveSystem) != null;

            var triggersLength = triggers.Length;
            var groups = new Group[triggersLength];
            var eventTypes = new GroupEventType[triggersLength];
            for (int i = 0; i < triggersLength; i++) {
                var trigger = triggers[i];
                groups[i] = pool.GetGroup(trigger.trigger);
                eventTypes[i] = trigger.eventType;
            }
            _observer = new GroupObserver(groups, eventTypes);
            _buffer = new List<Entity>();
        }
예제 #4
0
 ReactiveSystem(Pool pool, IReactiveExecuteSystem subSystem, IMatcher[] triggers, GroupEventType[] eventTypes)
 {
     _subsystem = subSystem;
     var groups = new Group[triggers.Length];
     for (int i = 0, triggersLength = triggers.Length; i < triggersLength; i++) {
         groups[i] = pool.GetGroup(triggers[i]);
     }
     _observer = new GroupObserver(groups, eventTypes);
     _buffer = new List<Entity>();
 }
예제 #5
0
        ReactiveSystem(Pool pool, IReactiveExecuteSystem subSystem, IMatcher[] triggers, GroupEventType[] eventTypes)
        {
            _subsystem = subSystem;
            var groups = new Group[triggers.Length];

            for (int i = 0, triggersLength = triggers.Length; i < triggersLength; i++)
            {
                groups[i] = pool.GetGroup(triggers[i]);
            }
            _observer = new GroupObserver(groups, eventTypes);
            _buffer   = new List <Entity>();
        }
예제 #6
0
        /// This is the recommended way to create systems.
        /// It will inject the pools if ISetPools is implemented.
        /// It will automatically create a ReactiveSystem if it is a IEntityCollectorSystem.
        public static ISystem CreateSystem(this Pools pools, IReactiveExecuteSystem system)
        {
            SetPools(system, pools);

            var entityCollectorSystem = system as IEntityCollectorSystem;

            if (entityCollectorSystem != null)
            {
                return(new ReactiveSystem(entityCollectorSystem));
            }

            throw new EntitasException(
                      "Could not create ReactiveSystem for " + system + "!",
                      "Only IEntityCollectorSystem is supported for pools.CreateSystem(system)."
                      );
        }
예제 #7
0
        ReactiveSystem(IReactiveExecuteSystem subSystem, GroupObserver groupObserver)
        {
            _subsystem = subSystem;
            var ensureComponents = subSystem as IEnsureComponents;
            if (ensureComponents != null) {
                _ensureComponents = ensureComponents.ensureComponents;
            }
            var excludeComponents = subSystem as IExcludeComponents;
            if (excludeComponents != null) {
                _excludeComponents = excludeComponents.excludeComponents;
            }

            _clearAfterExecute = (subSystem as IClearReactiveSystem) != null;

            _observer = groupObserver;
            _buffer = new List<Entity>();
        }
예제 #8
0
 ReactiveSystem(Pool pool, IReactiveExecuteSystem subSystem, IMatcher[] triggers, GroupEventType[] eventTypes)
 {
     _subsystem = subSystem;
     var ensureComponents = subSystem as IEnsureComponents;
     if (ensureComponents != null) {
         _ensureComponents = ensureComponents.ensureComponents;
     }
     var excludeComponents = subSystem as IExcludeComponents;
     if (excludeComponents != null) {
         _excludeComponents = excludeComponents.excludeComponents;
     }
     var groups = new Group[triggers.Length];
     for (int i = 0, triggersLength = triggers.Length; i < triggersLength; i++) {
         groups[i] = pool.GetGroup(triggers[i]);
     }
     _observer = new GroupObserver(groups, eventTypes);
     _buffer = new List<Entity>();
 }
예제 #9
0
        ReactiveSystem(IReactiveExecuteSystem subSystem, GroupObserver groupObserver)
        {
            _subsystem = subSystem;
            var ensureComponents = subSystem as IEnsureComponents;

            if (ensureComponents != null)
            {
                _ensureComponents = ensureComponents.ensureComponents;
            }
            var excludeComponents = subSystem as IExcludeComponents;

            if (excludeComponents != null)
            {
                _excludeComponents = excludeComponents.excludeComponents;
            }

            _clearAfterExecute = (subSystem as IClearReactiveSystem) != null;

            _observer = groupObserver;
            _buffer   = new List <Entity>();
        }
예제 #10
0
        ReactiveSystem(IReactiveExecuteSystem subSystem, EntityCollector collector)
        {
            _subsystem = subSystem;
            var ensureComponents = subSystem as IEnsureComponents;

            if (ensureComponents != null)
            {
                _ensureComponents = ensureComponents.ensureComponents;
            }
            var excludeComponents = subSystem as IExcludeComponents;

            if (excludeComponents != null)
            {
                _excludeComponents = excludeComponents.excludeComponents;
            }

            _clearAfterExecute = (subSystem as IClearReactiveSystem) != null;

            _collector = collector;
            _buffer    = new List <Entity>();
        }
예제 #11
0
        ReactiveSystem(Pool pool, IReactiveExecuteSystem subSystem, IMatcher[] triggers, GroupEventType[] eventTypes)
        {
            _subsystem = subSystem;
            var ensureComponents = subSystem as IEnsureComponents;

            if (ensureComponents != null)
            {
                _ensureComponents = ensureComponents.ensureComponents;
            }
            var excludeComponents = subSystem as IExcludeComponents;

            if (excludeComponents != null)
            {
                _excludeComponents = excludeComponents.excludeComponents;
            }
            var groups = new Group[triggers.Length];

            for (int i = 0, triggersLength = triggers.Length; i < triggersLength; i++)
            {
                groups[i] = pool.GetGroup(triggers[i]);
            }
            _observer = new GroupObserver(groups, eventTypes);
            _buffer   = new List <Entity>();
        }
예제 #12
0
 /// This is the recommended way to create systems.
 /// It will inject the pool if ISetPool is implemented.
 /// It will inject the pools if ISetPools is implemented.
 /// It will automatically create a ReactiveSystem if it is a
 /// IReactiveSystem, IMultiReactiveSystem or IEntityCollectorSystem.
 public static ISystem CreateSystem(this Pool pool,
                                    IReactiveExecuteSystem system)
 {
     return(CreateSystem(pool, system, Pools.sharedInstance));
 }