Struct avian3d::spatial_query::SpatialQueryPipeline

source ·
pub struct SpatialQueryPipeline { /* private fields */ }
Expand description

A resource for the spatial query pipeline.

The pipeline maintains a quaternary bounding volume hierarchy Qbvh of the world’s colliders as an acceleration structure for spatial queries.

Implementations§

source§

impl SpatialQueryPipeline

source

pub fn new() -> SpatialQueryPipeline

Creates a new SpatialQueryPipeline.

source

pub fn update<'a>( &mut self, colliders: impl Iterator<Item = (Entity, &'a Position, &'a Rotation, &'a Collider, Option<&'a CollisionLayers>)>, added_colliders: impl Iterator<Item = Entity> )

Updates the associated acceleration structures with a new set of entities.

source

pub fn cast_ray( &self, origin: Vector, direction: Dir3, max_time_of_impact: Scalar, solid: bool, query_filter: SpatialQueryFilter ) -> Option<RayHitData>

Casts a ray and computes the closest hit with a collider. If there are no hits, None is returned.

§Arguments
  • origin: Where the ray is cast from.
  • direction: What direction the ray is cast in.
  • max_time_of_impact: The maximum distance that the ray can travel.
  • solid: If true and the ray origin is inside of a collider, the hit point will be the ray origin itself. Otherwise, the collider will be treated as hollow, and the hit point will be at the collider’s boundary.
  • query_filter: A SpatialQueryFilter that determines which colliders are taken into account in the query.

See also: SpatialQuery::cast_ray

source

pub fn cast_ray_predicate( &self, origin: Vector, direction: Dir3, max_time_of_impact: Scalar, solid: bool, query_filter: SpatialQueryFilter, predicate: &dyn Fn(Entity) -> bool ) -> Option<RayHitData>

Casts a ray and computes the closest hit with a collider. If there are no hits, None is returned.

§Arguments
  • origin: Where the ray is cast from.
  • direction: What direction the ray is cast in.
  • max_time_of_impact: The maximum distance that the ray can travel.
  • solid: If true and the ray origin is inside of a collider, the hit point will be the ray origin itself. Otherwise, the collider will be treated as hollow, and the hit point will be at the collider’s boundary.
  • query_filter: A SpatialQueryFilter that determines which colliders are taken into account in the query.
  • predicate: A function with which the colliders are filtered. Given the Entity it should return false, if the entity should be ignored.

See also: SpatialQuery::cast_ray

source

pub fn ray_hits( &self, origin: Vector, direction: Dir3, max_time_of_impact: Scalar, max_hits: u32, solid: bool, query_filter: SpatialQueryFilter ) -> Vec<RayHitData>

Casts a ray and computes all hits until max_hits is reached.

Note that the order of the results is not guaranteed, and if there are more hits than max_hits, some hits will be missed.

§Arguments
  • origin: Where the ray is cast from.
  • direction: What direction the ray is cast in.
  • max_time_of_impact: The maximum distance that the ray can travel.
  • max_hits: The maximum number of hits. Additional hits will be missed.
  • solid: If true and the ray origin is inside of a collider, the hit point will be the ray origin itself. Otherwise, the collider will be treated as hollow, and the hit point will be at the collider’s boundary.
  • query_filter: A SpatialQueryFilter that determines which colliders are taken into account in the query.

See also: SpatialQuery::ray_hits

source

pub fn ray_hits_callback( &self, origin: Vector, direction: Dir3, max_time_of_impact: Scalar, solid: bool, query_filter: SpatialQueryFilter, callback: impl FnMut(RayHitData) -> bool )

Casts a ray and computes all hits, calling the given callback for each hit. The raycast stops when callback returns false or all hits have been found.

Note that the order of the results is not guaranteed.

§Arguments
  • origin: Where the ray is cast from.
  • direction: What direction the ray is cast in.
  • max_time_of_impact: The maximum distance that the ray can travel.
  • solid: If true and the ray origin is inside of a collider, the hit point will be the ray origin itself. Otherwise, the collider will be treated as hollow, and the hit point will be at the collider’s boundary.
  • query_filter: A SpatialQueryFilter that determines which colliders are taken into account in the query.
  • callback: A callback function called for each hit.

See also: SpatialQuery::ray_hits_callback

source

pub fn cast_shape( &self, shape: &Collider, origin: Vector, shape_rotation: Quaternion, direction: Dir3, max_time_of_impact: Scalar, ignore_origin_penetration: bool, query_filter: SpatialQueryFilter ) -> Option<ShapeHitData>

Casts a shape with a given rotation and computes the closest hit with a collider. If there are no hits, None is returned.

For a more ECS-based approach, consider using the ShapeCaster component instead.

§Arguments
  • shape: The shape being cast represented as a Collider.
  • origin: Where the shape is cast from.
  • shape_rotation: The rotation of the shape being cast.
  • direction: What direction the shape is cast in.
  • max_time_of_impact: The maximum distance that the shape can travel.
  • ignore_origin_penetration: If true and the shape is already penetrating a collider at the shape origin, the hit will be ignored and only the next hit will be computed. Otherwise, the initial hit will be returned.
  • query_filter: A SpatialQueryFilter that determines which colliders are taken into account in the query.

See also: SpatialQuery::cast_shape

source

pub fn shape_hits( &self, shape: &Collider, origin: Vector, shape_rotation: Quaternion, direction: Dir3, max_time_of_impact: Scalar, max_hits: u32, ignore_origin_penetration: bool, query_filter: SpatialQueryFilter ) -> Vec<ShapeHitData>

Casts a shape with a given rotation and computes computes all hits in the order of the time of impact until max_hits is reached.

§Arguments
  • shape: The shape being cast represented as a Collider.
  • origin: Where the shape is cast from.
  • shape_rotation: The rotation of the shape being cast.
  • direction: What direction the shape is cast in.
  • max_time_of_impact: The maximum distance that the shape can travel.
  • max_hits: The maximum number of hits. Additional hits will be missed.
  • ignore_origin_penetration: If true and the shape is already penetrating a collider at the shape origin, the hit will be ignored and only the next hit will be computed. Otherwise, the initial hit will be returned.
  • query_filter: A SpatialQueryFilter that determines which colliders are taken into account in the query.
  • callback: A callback function called for each hit.

See also: SpatialQuery::shape_hits

source

pub fn shape_hits_callback( &self, shape: &Collider, origin: Vector, shape_rotation: Quaternion, direction: Dir3, max_time_of_impact: Scalar, ignore_origin_penetration: bool, query_filter: SpatialQueryFilter, callback: impl FnMut(ShapeHitData) -> bool )

Casts a shape with a given rotation and computes computes all hits in the order of the time of impact, calling the given callback for each hit. The shapecast stops when callback returns false or all hits have been found.

§Arguments
  • shape: The shape being cast represented as a Collider.
  • origin: Where the shape is cast from.
  • shape_rotation: The rotation of the shape being cast.
  • direction: What direction the shape is cast in.
  • max_time_of_impact: The maximum distance that the shape can travel.
  • ignore_origin_penetration: If true and the shape is already penetrating a collider at the shape origin, the hit will be ignored and only the next hit will be computed. Otherwise, the initial hit will be returned.
  • query_filter: A SpatialQueryFilter that determines which colliders are taken into account in the query.
  • callback: A callback function called for each hit.

See also: SpatialQuery::shape_hits_callback

source

pub fn project_point( &self, point: Vector, solid: bool, query_filter: SpatialQueryFilter ) -> Option<PointProjection>

Finds the projection of a given point on the closest collider. If one isn’t found, None is returned.

§Arguments
  • point: The point that should be projected.
  • solid: If true and the point is inside of a collider, the projection will be at the point. Otherwise, the collider will be treated as hollow, and the projection will be at the collider’s boundary.
  • query_filter: A SpatialQueryFilter that determines which colliders are taken into account in the query.

See also: SpatialQuery::project_point

source

pub fn point_intersections( &self, point: Vector, query_filter: SpatialQueryFilter ) -> Vec<Entity>

An intersection test that finds all entities with a collider that contains the given point.

§Arguments
  • point: The point that intersections are tested against.
  • query_filter: A SpatialQueryFilter that determines which colliders are taken into account in the query.

See also: SpatialQuery::point_intersections

source

pub fn point_intersections_callback( &self, point: Vector, query_filter: SpatialQueryFilter, callback: impl FnMut(Entity) -> bool )

An intersection test that finds all entities with a collider that contains the given point, calling the given callback for each intersection. The search stops when callback returns false or all intersections have been found.

§Arguments
  • point: The point that intersections are tested against.
  • query_filter: A SpatialQueryFilter that determines which colliders are taken into account in the query.
  • callback: A callback function called for each intersection.

See also: SpatialQuery::point_intersections_callback

source

pub fn aabb_intersections_with_aabb(&self, aabb: ColliderAabb) -> Vec<Entity>

An intersection test that finds all entities with a ColliderAabb that is intersecting the given aabb.

See also: SpatialQuery::point_intersections_callback

source

pub fn aabb_intersections_with_aabb_callback( &self, aabb: ColliderAabb, callback: impl FnMut(Entity) -> bool )

An intersection test that finds all entities with a ColliderAabb that is intersecting the given aabb, calling callback for each intersection. The search stops when callback returns false or all intersections have been found.

See also: SpatialQuery::aabb_intersections_with_aabb_callback

source

pub fn shape_intersections( &self, shape: &Collider, shape_position: Vector, shape_rotation: Quaternion, query_filter: SpatialQueryFilter ) -> Vec<Entity>

An intersection test that finds all entities with a Collider that is intersecting the given shape with a given position and rotation.

§Arguments
  • shape: The shape that intersections are tested against represented as a Collider.
  • shape_position: The position of the shape.
  • shape_rotation: The rotation of the shape.
  • query_filter: A SpatialQueryFilter that determines which colliders are taken into account in the query.

See also: SpatialQuery::shape_intersections

source

pub fn shape_intersections_callback( &self, shape: &Collider, shape_position: Vector, shape_rotation: Quaternion, query_filter: SpatialQueryFilter, callback: impl FnMut(Entity) -> bool )

An intersection test that finds all entities with a Collider that is intersecting the given shape with a given position and rotation, calling callback for each intersection. The search stops when callback returns false or all intersections have been found.

§Arguments
  • shape: The shape that intersections are tested against represented as a Collider.
  • shape_position: The position of the shape.
  • shape_rotation: The rotation of the shape.
  • query_filter: A SpatialQueryFilter that determines which colliders are taken into account in the query.
  • callback: A callback function called for each intersection.

See also: SpatialQuery::shape_intersections_callback

Trait Implementations§

source§

impl Clone for SpatialQueryPipeline

source§

fn clone(&self) -> SpatialQueryPipeline

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Default for SpatialQueryPipeline

source§

fn default() -> Self

Returns the “default value” for a type. Read more
source§

impl Resource for SpatialQueryPipeline
where Self: Send + Sync + 'static,

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T, U> AsBindGroupShaderType<U> for T
where U: ShaderType, &'a T: for<'a> Into<U>,

source§

fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U

Return the T ShaderType for self. When used in AsBindGroup derives, it is safe to assume that all images in self exist.
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> Downcast<T> for T

source§

fn downcast(&self) -> &T

source§

impl<T> Downcast for T
where T: Any,

source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> FromWorld for T
where T: Default,

source§

fn from_world(_world: &mut World) -> T

Creates Self using data from the given World.
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> IntoEither for T

source§

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 more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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
source§

impl<T> Pointable for T

source§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
source§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> TypeData for T
where T: 'static + Send + Sync + Clone,

source§

impl<T> Upcast<T> for T

source§

fn upcast(&self) -> Option<&T>

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

impl<T> ConditionalSend for T
where T: Send,

source§

impl<T> Settings for T
where T: 'static + Send + Sync,

source§

impl<T> WasmNotSend for T
where T: Send,

source§

impl<T> WasmNotSendSync for T

source§

impl<T> WasmNotSync for T
where T: Sync,