avian3d/collision/collider/
world_query.rs1#![allow(missing_docs)]
4
5use crate::prelude::*;
6use bevy::{ecs::query::QueryData, prelude::*};
7
8#[derive(QueryData)]
12pub struct ColliderQuery<C: AnyCollider> {
13 pub entity: Entity,
14 pub of: Option<&'static ColliderOf>,
15 pub position: Ref<'static, Position>,
16 pub rotation: Ref<'static, Rotation>,
17 pub accumulated_translation: Option<Ref<'static, AccumulatedTranslation>>,
18 pub transform: Option<&'static ColliderTransform>,
19 pub aabb: Ref<'static, ColliderAabb>,
20 pub collision_margin: Option<&'static CollisionMargin>,
21 pub speculative_margin: Option<&'static SpeculativeMargin>,
22 pub is_rb: Has<RigidBody>,
23 pub is_sensor: Has<Sensor>,
24 pub collision_events_enabled: Has<CollisionEventsEnabled>,
25 pub friction: Option<&'static Friction>,
26 pub restitution: Option<&'static Restitution>,
27 pub shape: &'static C,
28 pub layers: &'static CollisionLayers,
29 pub active_hooks: Option<&'static ActiveCollisionHooks>,
30}
31
32impl<C: AnyCollider> ColliderQueryItem<'_, C> {
33 #[inline(always)]
37 pub fn body(&self) -> Option<Entity> {
38 self.of.map(|ColliderOf { body }| *body)
39 }
40
41 pub fn current_position(&self) -> Vector {
44 self.position.0
45 + self
46 .accumulated_translation
47 .as_ref()
48 .map_or_else(default, |t| t.0)
49 }
50
51 pub fn active_hooks(&self) -> ActiveCollisionHooks {
53 self.active_hooks
54 .map_or(ActiveCollisionHooks::empty(), |h| *h)
55 }
56}