avian3d/collision/collider/
world_query.rs#![allow(missing_docs)]
use crate::prelude::*;
use bevy::{ecs::query::QueryData, prelude::*};
#[derive(QueryData)]
pub struct ColliderQuery<C: AnyCollider> {
pub entity: Entity,
pub of: Option<&'static ColliderOf>,
pub position: Ref<'static, Position>,
pub rotation: Ref<'static, Rotation>,
pub accumulated_translation: Option<Ref<'static, AccumulatedTranslation>>,
pub transform: Option<&'static ColliderTransform>,
pub aabb: Ref<'static, ColliderAabb>,
pub collision_margin: Option<&'static CollisionMargin>,
pub speculative_margin: Option<&'static SpeculativeMargin>,
pub is_rb: Has<RigidBody>,
pub is_sensor: Has<Sensor>,
pub collision_events_enabled: Has<CollisionEventsEnabled>,
pub friction: Option<&'static Friction>,
pub restitution: Option<&'static Restitution>,
pub shape: &'static C,
pub layers: &'static CollisionLayers,
pub active_hooks: Option<&'static ActiveCollisionHooks>,
}
impl<C: AnyCollider> ColliderQueryItem<'_, C> {
#[inline(always)]
pub fn body(&self) -> Option<Entity> {
self.of.map(|ColliderOf { body }| *body)
}
pub fn current_position(&self) -> Vector {
self.position.0
+ self
.accumulated_translation
.as_ref()
.map_or_else(default, |t| t.0)
}
pub fn active_hooks(&self) -> ActiveCollisionHooks {
self.active_hooks
.map_or(ActiveCollisionHooks::empty(), |h| *h)
}
}