sschmid / Entitas

Entitas is a super fast Entity Component System (ECS) Framework specifically made for C# and Unity
MIT License
7.03k stars 1.11k forks source link

MultiReactiveSystem._collectedEntities do NOT Clear When _buffer.Count equal zero. #988

Open willjey opened 2 years ago

willjey commented 2 years ago

Hi,

I have an question: MultiReactiveSystem._collectedEntities do NOT Clear When _buffer.Count equal zero. Leading to MultiReactiveSystem.Filter() Get Called Every Frame.

Here's some code

public abstract class MultiReactiveSystem<TEntity, TContexts> : IReactiveSystem
{
    public void Execute() {
      for (int i = 0; i < _collectors.Length; i++) {
          var collector = _collectors[i];
          if (collector.count != 0) {
              _collectedEntities.UnionWith(collector.GetCollectedEntities<TEntity>());
              collector.ClearCollectedEntities();
          }
      }

      foreach (var e in _collectedEntities) {
          if (Filter(e)) {
              e.Retain(this);
              _buffer.Add(e);
          }
      }

      if (_buffer.Count != 0) {
          try {
              Execute(_buffer);
          } finally {
              for (int i = 0; i < _buffer.Count; i++) {
                  _buffer[i].Release(this);
              }
              _collectedEntities.Clear();
              _buffer.Clear();
          }
      }
  }
}

Cheers