pub struct Filter { /* private fields */ }Expand description
A filter for queries
Implementations§
Source§impl Filter
impl Filter
Sourcepub fn new() -> Self
pub fn new() -> Self
Create a Filter
Examples found in repository?
examples/query.rs (line 53)
18fn main() {
19 let mut world = World::new();
20
21 for i in 0..5 {
22 let ent = world.spawn();
23
24 world.add(ent, Tag);
25 world.add(ent, Name("Object"));
26
27 if i % 2 == 0 {
28 world.add(ent, Num(i));
29 }
30 }
31
32 {
33 let ent = world.spawn();
34 world.add(ent, Num(1337));
35 }
36
37 /// Query with component tuple
38 let query = world.query::<(Tag, Num)>();
39 for e in &query {
40 println!("Entity #{e} has both `Tag` and `Num`");
41 }
42
43 /// you can also use `Exclude` to ensure some components are not included
44 for e in &world.query::<(Tag, Exclude<(Num,)>)>() {
45 println!("Entity #{e} has `Tag` without `Num`");
46 }
47
48 // `Filter` allows for more fine-grained control.
49 // In fact, the (Component1, Component2, ...) tuple implements `ToFilter` so it can be used in a query
50 //
51 // `ComponentKey` is used to identify component types,
52 // the `component_id` macro can be used as a shorthand to `ComponentKey` functions.
53 let filter = Filter::new()
54 .with_include(&[ComponentKey::of::<Tag>(), ComponentKey::of::<Name>()])
55 .with_exclude(&[component_id!(Num)]);
56
57 for _ in &world.query_filter(filter) {
58 // do stuff
59 }
60}Sourcepub fn satisfies(&self, entity: Entity, world: &World) -> bool
pub fn satisfies(&self, entity: Entity, world: &World) -> bool
Check if entity satifies this filter’s reqiurements
Sourcepub fn with_include(self, include: &[ComponentKey]) -> Self
pub fn with_include(self, include: &[ComponentKey]) -> Self
Add an include set
Examples found in repository?
examples/query.rs (line 54)
18fn main() {
19 let mut world = World::new();
20
21 for i in 0..5 {
22 let ent = world.spawn();
23
24 world.add(ent, Tag);
25 world.add(ent, Name("Object"));
26
27 if i % 2 == 0 {
28 world.add(ent, Num(i));
29 }
30 }
31
32 {
33 let ent = world.spawn();
34 world.add(ent, Num(1337));
35 }
36
37 /// Query with component tuple
38 let query = world.query::<(Tag, Num)>();
39 for e in &query {
40 println!("Entity #{e} has both `Tag` and `Num`");
41 }
42
43 /// you can also use `Exclude` to ensure some components are not included
44 for e in &world.query::<(Tag, Exclude<(Num,)>)>() {
45 println!("Entity #{e} has `Tag` without `Num`");
46 }
47
48 // `Filter` allows for more fine-grained control.
49 // In fact, the (Component1, Component2, ...) tuple implements `ToFilter` so it can be used in a query
50 //
51 // `ComponentKey` is used to identify component types,
52 // the `component_id` macro can be used as a shorthand to `ComponentKey` functions.
53 let filter = Filter::new()
54 .with_include(&[ComponentKey::of::<Tag>(), ComponentKey::of::<Name>()])
55 .with_exclude(&[component_id!(Num)]);
56
57 for _ in &world.query_filter(filter) {
58 // do stuff
59 }
60}Sourcepub fn with_exclude(self, exclude: &[ComponentKey]) -> Self
pub fn with_exclude(self, exclude: &[ComponentKey]) -> Self
Add an exclude set
Examples found in repository?
examples/query.rs (line 55)
18fn main() {
19 let mut world = World::new();
20
21 for i in 0..5 {
22 let ent = world.spawn();
23
24 world.add(ent, Tag);
25 world.add(ent, Name("Object"));
26
27 if i % 2 == 0 {
28 world.add(ent, Num(i));
29 }
30 }
31
32 {
33 let ent = world.spawn();
34 world.add(ent, Num(1337));
35 }
36
37 /// Query with component tuple
38 let query = world.query::<(Tag, Num)>();
39 for e in &query {
40 println!("Entity #{e} has both `Tag` and `Num`");
41 }
42
43 /// you can also use `Exclude` to ensure some components are not included
44 for e in &world.query::<(Tag, Exclude<(Num,)>)>() {
45 println!("Entity #{e} has `Tag` without `Num`");
46 }
47
48 // `Filter` allows for more fine-grained control.
49 // In fact, the (Component1, Component2, ...) tuple implements `ToFilter` so it can be used in a query
50 //
51 // `ComponentKey` is used to identify component types,
52 // the `component_id` macro can be used as a shorthand to `ComponentKey` functions.
53 let filter = Filter::new()
54 .with_include(&[ComponentKey::of::<Tag>(), ComponentKey::of::<Name>()])
55 .with_exclude(&[component_id!(Num)]);
56
57 for _ in &world.query_filter(filter) {
58 // do stuff
59 }
60}Sourcepub fn with_predicate(self, predicate: impl QueryFunction) -> Self
pub fn with_predicate(self, predicate: impl QueryFunction) -> Self
Add a predicate
Trait Implementations§
Source§impl IntoFilter for Filter
impl IntoFilter for Filter
Source§fn into_filter(self) -> Filter
fn into_filter(self) -> Filter
Convert this value to Filter
Auto Trait Implementations§
impl Freeze for Filter
impl !RefUnwindSafe for Filter
impl Send for Filter
impl Sync for Filter
impl Unpin for Filter
impl UnsafeUnpin for Filter
impl !UnwindSafe for Filter
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more