1 using System.Collections.Generic;
25 readonly
IMatcher _excludeComponents;
26 readonly
bool _clearAfterExecute;
27 readonly List<Entity> _buffer;
28 string _toStringCache;
33 subSystem, createEntityCollector(pool, new [] { subSystem.trigger })
40 this(subSystem, createEntityCollector(pool, subSystem.triggers)) {
46 this(subSystem, subSystem.entityCollector) {
51 _subsystem = subSystem;
53 if(ensureComponents != null) {
54 _ensureComponents = ensureComponents.ensureComponents;
57 if(excludeComponents != null) {
58 _excludeComponents = excludeComponents.excludeComponents;
63 _collector = collector;
64 _buffer =
new List<Entity>();
69 var triggersLength = triggers.Length;
70 var groups =
new Group[triggersLength];
71 var eventTypes =
new GroupEventType[triggersLength];
72 for (
int i = 0; i < triggersLength; i++) {
73 var trigger = triggers[i];
74 groups[i] = pool.
GetGroup(trigger.trigger);
75 eventTypes[i] = trigger.eventType;
85 _collector.Activate();
93 _collector.Deactivate();
98 _collector.ClearCollectedEntities();
104 if(_collector.collectedEntities.Count != 0) {
105 if(_ensureComponents != null) {
106 if(_excludeComponents != null) {
107 foreach(var e
in _collector.collectedEntities) {
108 if(_ensureComponents.Matches(e) &&
109 !_excludeComponents.Matches(e)) {
110 _buffer.Add(e.Retain(
this));
114 foreach(var e
in _collector.collectedEntities) {
115 if(_ensureComponents.Matches(e)) {
116 _buffer.Add(e.Retain(
this));
120 }
else if(_excludeComponents != null) {
121 foreach(var e
in _collector.collectedEntities) {
122 if(!_excludeComponents.Matches(e)) {
123 _buffer.Add(e.Retain(
this));
127 foreach(var e
in _collector.collectedEntities) {
128 _buffer.Add(e.Retain(
this));
132 _collector.ClearCollectedEntities();
133 if(_buffer.Count != 0) {
134 _subsystem.Execute(_buffer);
135 for (
int i = 0; i < _buffer.Count; i++) {
136 _buffer[i].Release(
this);
139 if(_clearAfterExecute) {
140 _collector.ClearCollectedEntities();
146 public override string ToString() {
147 if(_toStringCache == null) {
148 _toStringCache =
"ReactiveSystem(" +
subsystem +
")";
151 return _toStringCache;
ReactiveSystem(Pool pool, IReactiveSystem subSystem)
virtual Group GetGroup(IMatcher matcher)
IReactiveExecuteSystem subsystem
ReactiveSystem(Pool pool, IMultiReactiveSystem subSystem)
void Clear()
Clears all accumulated changes.
ReactiveSystem(IEntityCollectorSystem subSystem)