public void OnEntityAddedToPool(EntityAddedEvent args) { if (!args.Entity.Components.Any()) { return; } var matchesGroup = args.Entity.HasComponents(ComponentTypes); if (matchesGroup) { OnEntityAdded.OnNext(args.Entity); } }
public void OnEntityComponentAdded(ComponentAddedEvent args) { var originalComponentTypes = args.Entity.Components.Select(x => x.GetType()).ToList(); originalComponentTypes.Remove(args.Component.GetType()); var previouslyMatched = ComponentTypes.All(x => originalComponentTypes.Contains(x)); if (previouslyMatched) { return; } var newComponentMatches = ComponentTypes.Contains(args.Component.GetType()); if (newComponentMatches) { OnEntityAdded.OnNext(args.Entity); } }