namespace DCFApixels.DragonECS { public interface IEntitiesCollection { EcsSpan ToSpan(); } public static class Queries { #region Where public static EcsSpan Where(this TCollection entities, out TAspect aspect) where TAspect : EcsAspect where TCollection : IEntitiesCollection { return entities.ToSpan().Where(out aspect); } public static EcsSpan Where(this EcsReadonlyGroup group, out TAspect aspect) where TAspect : EcsAspect { return group.ToSpan().Where(out aspect); } public static EcsSpan Where(this EcsSpan span, out TAspect aspect) where TAspect : EcsAspect { EcsWorld world = span.World; if (world.IsEnableReleaseDelEntBuffer) { world.ReleaseDelEntityBufferAll(); } var executor = world.GetExecutor>(); aspect = executor.Aspect; return executor.ExecuteFor(span); } public static EcsSpan Where(this TCollection entities) where TAspect : EcsAspect where TCollection : IEntitiesCollection { return entities.ToSpan().Where(); } public static EcsSpan Where(this EcsReadonlyGroup group) where TAspect : EcsAspect { return group.ToSpan().Where(); } public static EcsSpan Where(this EcsSpan span) where TAspect : EcsAspect { EcsWorld world = span.World; if (world.IsEnableReleaseDelEntBuffer) { world.ReleaseDelEntityBufferAll(); } return world.GetExecutor>().ExecuteFor(span); } #endregion #region WhereToGroup public static EcsReadonlyGroup WhereToGroup(this TCollection entities, out TAspect aspect) where TAspect : EcsAspect where TCollection : IEntitiesCollection { return entities.ToSpan().WhereToGroup(out aspect); } public static EcsReadonlyGroup WhereToGroup(this EcsReadonlyGroup group, out TAspect aspect) where TAspect : EcsAspect { return group.ToSpan().WhereToGroup(out aspect); } public static EcsReadonlyGroup WhereToGroup(this EcsSpan span, out TAspect aspect) where TAspect : EcsAspect { EcsWorld world = span.World; if (world.IsEnableReleaseDelEntBuffer) { world.ReleaseDelEntityBufferAll(); } var executor = world.GetExecutor>(); aspect = executor.Aspect; return executor.ExecuteFor(span); } public static EcsReadonlyGroup WhereToGroup(this TCollection entities) where TAspect : EcsAspect where TCollection : IEntitiesCollection { return entities.ToSpan().WhereToGroup(); } public static EcsReadonlyGroup WhereToGroup(this EcsReadonlyGroup group) where TAspect : EcsAspect { return group.ToSpan().WhereToGroup(); } public static EcsReadonlyGroup WhereToGroup(this EcsSpan span) where TAspect : EcsAspect { EcsWorld world = span.World; if (world.IsEnableReleaseDelEntBuffer) { world.ReleaseDelEntityBufferAll(); } return world.GetExecutor>().ExecuteFor(span); } #endregion } }