public bool MoveNext() { while (Archetypes.Length > index) { var arch = Archetypes[index++]; var span = Board.GetEntities(arch.Id); if (span.Length == 0) { continue; } var matches = 0; var componentSpan = Board.GetComponentTypes(arch.Id); for (var i = 0; i != finalizedQuery.All.Length; i++) { if (componentSpan.Contains(finalizedQuery.All[i].Id)) { matches++; } } if (matches != finalizedQuery.All.Length) { continue; } matches = 0; for (var i = 0; i != finalizedQuery.None.Length && matches == 0; i++) { if (componentSpan.Contains(finalizedQuery.None[i].Id)) { matches++; } } if (matches > 0) { continue; } Current = arch; return(true); } return(false); }