pub struct RapierContext<'a> {
pub simulation: &'a RapierContextSimulation,
pub colliders: &'a RapierContextColliders,
pub joints: &'a RapierContextJoints,
pub query_pipeline: &'a RapierQueryPipeline,
pub rigidbody_set: &'a RapierRigidBodySet,
}
Expand description
A helper struct to avoid passing too many parameters to most rapier functions. This helps with reducing boilerplate, at the (small) price of maybe getting too much information from the ECS.
Note: This is not a component, refer to ReadRapierContext
, WriteRapierContext
, or RapierContextSimulation
Fields§
§simulation: &'a RapierContextSimulation
The Rapier context, containing all the state of the physics engine.
colliders: &'a RapierContextColliders
The set of colliders part of the simulation.
joints: &'a RapierContextJoints
The sets of joints part of the simulation.
query_pipeline: &'a RapierQueryPipeline
The query pipeline, which performs scene queries (ray-casting, point projection, etc.)
rigidbody_set: &'a RapierRigidBodySet
The set of rigid-bodies part of the simulation.
Implementations§
Source§impl RapierContext<'_>
RapierContextSimulation
functions for immutable accesses
impl RapierContext<'_>
RapierContextSimulation
functions for immutable accesses
Sourcepub fn contact_pair(
&self,
collider1: Entity,
collider2: Entity,
) -> Option<ContactPairView<'_>>
pub fn contact_pair( &self, collider1: Entity, collider2: Entity, ) -> Option<ContactPairView<'_>>
Shortcut to RapierContextSimulation::contact_pair
.
Sourcepub fn contact_pairs_with(
&self,
collider: Entity,
) -> impl Iterator<Item = ContactPairView<'_>>
pub fn contact_pairs_with( &self, collider: Entity, ) -> impl Iterator<Item = ContactPairView<'_>>
Shortcut to RapierContextSimulation::contact_pairs_with
.
Sourcepub fn intersection_pair(
&self,
collider1: Entity,
collider2: Entity,
) -> Option<bool>
pub fn intersection_pair( &self, collider1: Entity, collider2: Entity, ) -> Option<bool>
Shortcut to RapierContextSimulation::intersection_pair
.
Sourcepub fn intersection_pairs_with(
&self,
collider: Entity,
) -> impl Iterator<Item = (Entity, Entity, bool)> + '_
pub fn intersection_pairs_with( &self, collider: Entity, ) -> impl Iterator<Item = (Entity, Entity, bool)> + '_
Shortcut to RapierContextSimulation::intersection_pairs_with
.
Source§impl RapierContext<'_>
impl RapierContext<'_>
Sourcepub fn cast_ray(
&self,
ray_origin: Vect,
ray_dir: Vect,
max_toi: f32,
solid: bool,
filter: QueryFilter<'_>,
) -> Option<(Entity, f32)>
pub fn cast_ray( &self, ray_origin: Vect, ray_dir: Vect, max_toi: f32, solid: bool, filter: QueryFilter<'_>, ) -> Option<(Entity, f32)>
Shortcut to RapierQueryPipeline::cast_ray
.
Sourcepub fn cast_ray_and_get_normal(
&self,
ray_origin: Vect,
ray_dir: Vect,
max_toi: f32,
solid: bool,
filter: QueryFilter<'_>,
) -> Option<(Entity, RayIntersection)>
pub fn cast_ray_and_get_normal( &self, ray_origin: Vect, ray_dir: Vect, max_toi: f32, solid: bool, filter: QueryFilter<'_>, ) -> Option<(Entity, RayIntersection)>
Shortcut to RapierQueryPipeline::cast_ray_and_get_normal
.
Sourcepub fn intersections_with_point(
&self,
point: Vect,
filter: QueryFilter<'_>,
callback: impl FnMut(Entity) -> bool,
)
pub fn intersections_with_point( &self, point: Vect, filter: QueryFilter<'_>, callback: impl FnMut(Entity) -> bool, )
Shortcut to RapierQueryPipeline::intersections_with_point
.
Sourcepub fn intersections_with_ray(
&self,
ray_origin: Vect,
ray_dir: Vect,
max_toi: f32,
solid: bool,
filter: QueryFilter<'_>,
callback: impl FnMut(Entity, RayIntersection) -> bool,
)
pub fn intersections_with_ray( &self, ray_origin: Vect, ray_dir: Vect, max_toi: f32, solid: bool, filter: QueryFilter<'_>, callback: impl FnMut(Entity, RayIntersection) -> bool, )
Shortcut to RapierQueryPipeline::intersections_with_ray
.
Sourcepub fn intersections_with_shape(
&self,
shape_pos: Vect,
shape_rot: Rot,
shape: &Collider,
filter: QueryFilter<'_>,
callback: impl FnMut(Entity) -> bool,
)
pub fn intersections_with_shape( &self, shape_pos: Vect, shape_rot: Rot, shape: &Collider, filter: QueryFilter<'_>, callback: impl FnMut(Entity) -> bool, )
Shortcut to RapierQueryPipeline::intersections_with_shape
.
Sourcepub fn colliders_with_aabb_intersecting_aabb(
&self,
aabb: Aabb2d,
callback: impl FnMut(Entity) -> bool,
)
pub fn colliders_with_aabb_intersecting_aabb( &self, aabb: Aabb2d, callback: impl FnMut(Entity) -> bool, )
Sourcepub fn cast_shape(
&self,
shape_pos: Vect,
shape_rot: Rot,
shape_vel: Vect,
shape: &Collider,
options: ShapeCastOptions,
filter: QueryFilter<'_>,
) -> Option<(Entity, ShapeCastHit)>
pub fn cast_shape( &self, shape_pos: Vect, shape_rot: Rot, shape_vel: Vect, shape: &Collider, options: ShapeCastOptions, filter: QueryFilter<'_>, ) -> Option<(Entity, ShapeCastHit)>
Shortcut to RapierQueryPipeline::cast_shape
.
Sourcepub fn project_point(
&self,
point: Vect,
solid: bool,
filter: QueryFilter<'_>,
) -> Option<(Entity, PointProjection)>
pub fn project_point( &self, point: Vect, solid: bool, filter: QueryFilter<'_>, ) -> Option<(Entity, PointProjection)>
Shortcut to RapierQueryPipeline::project_point
.
Sourcepub fn with_query_filter_elts<T>(
&self,
filter: QueryFilter<'_>,
f: impl FnOnce(RapierQueryFilter<'_>) -> T,
) -> T
pub fn with_query_filter_elts<T>( &self, filter: QueryFilter<'_>, f: impl FnOnce(RapierQueryFilter<'_>) -> T, ) -> T
Shortcut to RapierQueryPipeline::with_query_filter_elts
.
Source§impl RapierContext<'_>
impl RapierContext<'_>
Sourcepub fn entity2body(&self) -> &HashMap<Entity, RigidBodyHandle>
pub fn entity2body(&self) -> &HashMap<Entity, RigidBodyHandle>
Shortcut to RapierRigidBodySet::entity2body
.
Sourcepub fn rigid_body_entity(&self, handle: RigidBodyHandle) -> Option<Entity>
pub fn rigid_body_entity(&self, handle: RigidBodyHandle) -> Option<Entity>
Shortcut to RapierRigidBodySet::rigid_body_entity
.
Sourcepub fn impulse_revolute_joint_angle(&self, entity: Entity) -> Option<f32>
pub fn impulse_revolute_joint_angle(&self, entity: Entity) -> Option<f32>
Shortcut to RapierRigidBodySet::impulse_revolute_joint_angle
.
Trait Implementations§
Source§impl<'a> QueryData for RapierContext<'a>
SAFETY: we assert fields are readonly below
impl<'a> QueryData for RapierContext<'a>
SAFETY: we assert fields are readonly below
Source§unsafe fn fetch<'__w>(
_fetch: &mut <Self as WorldQuery>::Fetch<'__w>,
_entity: Entity,
_table_row: TableRow,
) -> Self::Item<'__w>
unsafe fn fetch<'__w>( _fetch: &mut <Self as WorldQuery>::Fetch<'__w>, _entity: Entity, _table_row: TableRow, ) -> Self::Item<'__w>
SAFETY: we call fetch
for each member that implements Fetch
.
Source§const IS_READ_ONLY: bool = true
const IS_READ_ONLY: bool = true
Source§type ReadOnly = RapierContext<'a>
type ReadOnly = RapierContext<'a>
QueryData
, which satisfies the ReadOnlyQueryData
trait.Source§type Item<'__w> = RapierContextItem<'__w, 'a>
type Item<'__w> = RapierContextItem<'__w, 'a>
WorldQuery
This will be the data retrieved by the query,
and is visible to the end user when calling e.g. Query<Self>::get
.Source§impl<'a> WorldQuery for RapierContext<'a>
impl<'a> WorldQuery for RapierContext<'a>
Source§unsafe fn set_archetype<'__w>(
_fetch: &mut <Self as WorldQuery>::Fetch<'__w>,
_state: &Self::State,
_archetype: &'__w Archetype,
_table: &'__w Table,
)
unsafe fn set_archetype<'__w>( _fetch: &mut <Self as WorldQuery>::Fetch<'__w>, _state: &Self::State, _archetype: &'__w Archetype, _table: &'__w Table, )
SAFETY: we call set_archetype
for each member that implements Fetch
Source§unsafe fn set_table<'__w>(
_fetch: &mut <Self as WorldQuery>::Fetch<'__w>,
_state: &Self::State,
_table: &'__w Table,
)
unsafe fn set_table<'__w>( _fetch: &mut <Self as WorldQuery>::Fetch<'__w>, _state: &Self::State, _table: &'__w Table, )
SAFETY: we call set_table
for each member that implements Fetch
Source§const IS_DENSE: bool = true
const IS_DENSE: bool = true
Source§type Fetch<'__w> = RapierContextFetch<'__w, 'a>
type Fetch<'__w> = RapierContextFetch<'__w, 'a>
WorldQuery
to compute Self::Item
for each entity.Source§type State = RapierContextState<'a>
type State = RapierContextState<'a>
Self::Fetch
. This will be cached inside QueryState
,
so it is best to move as much data / computation here as possible to reduce the cost of
constructing Self::Fetch
.Source§fn shrink_fetch<'__wlong: '__wshort, '__wshort>(
fetch: <RapierContext<'a> as WorldQuery>::Fetch<'__wlong>,
) -> <RapierContext<'a> as WorldQuery>::Fetch<'__wshort>
fn shrink_fetch<'__wlong: '__wshort, '__wshort>( fetch: <RapierContext<'a> as WorldQuery>::Fetch<'__wlong>, ) -> <RapierContext<'a> as WorldQuery>::Fetch<'__wshort>
Source§unsafe fn init_fetch<'__w>(
_world: UnsafeWorldCell<'__w>,
state: &Self::State,
_last_run: Tick,
_this_run: Tick,
) -> <Self as WorldQuery>::Fetch<'__w>
unsafe fn init_fetch<'__w>( _world: UnsafeWorldCell<'__w>, state: &Self::State, _last_run: Tick, _this_run: Tick, ) -> <Self as WorldQuery>::Fetch<'__w>
Self::Fetch
,
by combining data from the World
with the cached Self::State
.
Readonly accesses resources registered in WorldQuery::update_component_access
. Read moreSource§fn update_component_access(
state: &Self::State,
_access: &mut FilteredAccess<ComponentId>,
)
fn update_component_access( state: &Self::State, _access: &mut FilteredAccess<ComponentId>, )
Source§fn init_state(world: &mut World) -> RapierContextState<'a>
fn init_state(world: &mut World) -> RapierContextState<'a>
State
for this WorldQuery
type.Source§fn get_state(components: &Components) -> Option<RapierContextState<'a>>
fn get_state(components: &Components) -> Option<RapierContextState<'a>>
Source§fn matches_component_set(
state: &Self::State,
_set_contains_id: &impl Fn(ComponentId) -> bool,
) -> bool
fn matches_component_set( state: &Self::State, _set_contains_id: &impl Fn(ComponentId) -> bool, ) -> bool
Source§fn set_access(_state: &mut Self::State, _access: &FilteredAccess<ComponentId>)
fn set_access(_state: &mut Self::State, _access: &FilteredAccess<ComponentId>)
FilteredEntityRef
or FilteredEntityMut
. Read moreimpl<'a> ReadOnlyQueryData for RapierContext<'a>
SAFETY: we assert fields are readonly below
Auto Trait Implementations§
impl<'a> Freeze for RapierContext<'a>
impl<'a> !RefUnwindSafe for RapierContext<'a>
impl<'a> Send for RapierContext<'a>
impl<'a> Sync for RapierContext<'a>
impl<'a> Unpin for RapierContext<'a>
impl<'a> !UnwindSafe for RapierContext<'a>
Blanket Implementations§
Source§impl<T, U> AsBindGroupShaderType<U> for T
impl<T, U> AsBindGroupShaderType<U> for T
Source§fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U
fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U
T
ShaderType
for self
. When used in AsBindGroup
derives, it is safe to assume that all images in self
exist.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
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
, which can then be
downcast
into Box<dyn ConcreteType>
where ConcreteType
implements Trait
.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
, which can then be further
downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&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)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&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> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
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>
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>
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 moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self
from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self
is actually part of its subset T
(and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset
but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self
to the equivalent element of its superset.