1 using System.Collections.Generic;
15 readonly HashSet<TEntity> _collectedEntities;
17 readonly GroupEvent[] _groupEvents;
19 GroupChanged<TEntity> _addEntityCache;
20 string _toStringCache;
21 StringBuilder _toStringBuilder;
33 _groupEvents = groupEvents;
35 if(groups.Length != groupEvents.Length) {
37 "Unbalanced count with groups (" + groups.Length +
38 ") and group events (" + groupEvents.Length +
").",
39 "Group and group events count must be equal." 43 _addEntityCache = addEntity;
50 for(
int i = 0; i < _groups.Length; i++) {
51 var group = _groups[i];
52 var groupEvent = _groupEvents[i];
54 case GroupEvent.Added:
55 group.OnEntityAdded -= _addEntityCache;
56 group.OnEntityAdded += _addEntityCache;
58 case GroupEvent.Removed:
59 group.OnEntityRemoved -= _addEntityCache;
60 group.OnEntityRemoved += _addEntityCache;
62 case GroupEvent.AddedOrRemoved:
63 group.OnEntityAdded -= _addEntityCache;
64 group.OnEntityAdded += _addEntityCache;
65 group.OnEntityRemoved -= _addEntityCache;
66 group.OnEntityRemoved += _addEntityCache;
76 for(
int i = 0; i < _groups.Length; i++) {
77 var group = _groups[i];
78 group.OnEntityAdded -= _addEntityCache;
79 group.OnEntityRemoved -= _addEntityCache;
86 foreach(var entity
in _collectedEntities) {
89 _collectedEntities.Clear();
93 var added = _collectedEntities.Add(entity);
99 public override string ToString() {
100 if(_toStringCache == null) {
101 if(_toStringBuilder == null) {
102 _toStringBuilder =
new StringBuilder();
104 _toStringBuilder.Length = 0;
105 _toStringBuilder.Append(
"Collector(");
107 const string separator =
", ";
108 var lastSeparator = _groups.Length - 1;
109 for(
int i = 0; i < _groups.Length; i++) {
110 _toStringBuilder.Append(_groups[i]);
111 if(i < lastSeparator) {
112 _toStringBuilder.Append(separator);
116 _toStringBuilder.Append(
")");
117 _toStringCache = _toStringBuilder.ToString();
120 return _toStringCache;
void ClearCollectedEntities()
Clears all collected entities.
HashSet< TEntity > collectedEntities
Collector(IGroup< TEntity >[] groups, GroupEvent[] groupEvents)
Collector(IGroup< TEntity > group, GroupEvent groupEvent)