Query operators
thomasgauthier opened this issue · 2 comments
thomasgauthier commented
Is it possible to use operators like NOT, ANY, ALL in queries?
For example, in Unity one can do
var query = new EntityQueryDesc
{
None = new ComponentType[]{ typeof(Frozen) },
All = new ComponentType[]{ typeof(RotationQuaternion) }
}
EntityQuery m_Group = GetEntityQuery(query);
RemiMyrset commented
An example where I need to get tilemap tile. It has a sprite, integer position but not float position.
const query = defineQuery(
[
TilePositionComponent, // Vector2I
SpriteComponent, // Sprite
Not(PositionComponent), // Vector2
],
);
const entities = query(world);
Can be found in Query section of "Getting Started"
So you have the Not
option, but not All
and Any
because that is frankly the default behavior(?).
thomasgauthier commented
Thank you. I had missed the Not
in the docs. All
is indeed the default behavior.
Any
does not seem to be implemented, but using TC39 Set Methods it can be done easily.
The following fictious code
defineQuery(
[
TilePositionComponent
Any(SpriteComponent, Color)
],
);
can be implemented as
//set methods polyfill
import "core-js/features/set"
const tileQuery = defineQuery(
[
TilePositionComponent
],
);
const spriteQuery = defineQuery(
[
SpriteComponent,
],
);
const colorQuery = defineQuery(
[
Color
],
);
const entities = new Set(tileQuery(world))
.intersects(
new Set(spriteQuery(world))
.union(new Set(colorQuery(world))
);