bevy_rapier2d/pipeline/
query_filter.rs1use bevy::prelude::Entity;
2
3pub use rapier::pipeline::QueryFilterFlags;
4
5use crate::geometry::CollisionGroups;
6
7#[derive(Copy, Clone, Default)]
9pub struct QueryFilter<'a> {
10 pub flags: QueryFilterFlags,
12 pub groups: Option<CollisionGroups>,
15 pub exclude_collider: Option<Entity>,
17 pub exclude_rigid_body: Option<Entity>,
20 pub predicate: Option<&'a dyn Fn(Entity) -> bool>,
22}
23
24impl From<QueryFilterFlags> for QueryFilter<'_> {
25 fn from(flags: QueryFilterFlags) -> Self {
26 Self {
27 flags,
28 ..QueryFilter::default()
29 }
30 }
31}
32
33impl From<CollisionGroups> for QueryFilter<'_> {
34 fn from(groups: CollisionGroups) -> Self {
35 Self {
36 groups: Some(groups),
37 ..QueryFilter::default()
38 }
39 }
40}
41
42impl<'a> QueryFilter<'a> {
43 pub fn new() -> Self {
45 Self::default()
46 }
47
48 pub fn exclude_fixed() -> Self {
50 QueryFilterFlags::EXCLUDE_FIXED.into()
51 }
52
53 pub fn exclude_kinematic() -> Self {
55 QueryFilterFlags::EXCLUDE_KINEMATIC.into()
56 }
57
58 pub fn exclude_dynamic() -> Self {
60 QueryFilterFlags::EXCLUDE_DYNAMIC.into()
61 }
62
63 pub fn only_dynamic() -> Self {
65 QueryFilterFlags::ONLY_DYNAMIC.into()
66 }
67
68 pub fn only_kinematic() -> Self {
70 QueryFilterFlags::ONLY_KINEMATIC.into()
71 }
72
73 pub fn only_fixed() -> Self {
76 QueryFilterFlags::ONLY_FIXED.into()
77 }
78
79 pub fn exclude_sensors(mut self) -> Self {
81 self.flags |= QueryFilterFlags::EXCLUDE_SENSORS;
82 self
83 }
84
85 pub fn exclude_solids(mut self) -> Self {
87 self.flags |= QueryFilterFlags::EXCLUDE_SOLIDS;
88 self
89 }
90
91 pub fn groups(mut self, groups: CollisionGroups) -> Self {
94 self.groups = Some(groups);
95 self
96 }
97
98 pub fn exclude_collider(mut self, collider: Entity) -> Self {
100 self.exclude_collider = Some(collider);
101 self
102 }
103
104 pub fn exclude_rigid_body(mut self, rigid_body: Entity) -> Self {
106 self.exclude_rigid_body = Some(rigid_body);
107 self
108 }
109
110 pub fn predicate(mut self, predicate: &'a impl Fn(Entity) -> bool) -> Self {
112 self.predicate = Some(predicate);
113 self
114 }
115}