pub struct FilteredResources<'w, 's> { /* private fields */ }
Expand description
Provides read-only access to a set of Resource
s defined by the contained Access
.
Use FilteredResourcesMut
if you need mutable access to some resources.
To be useful as a SystemParam
,
this must be configured using a FilteredResourcesParamBuilder
to build the system using a SystemParamBuilder
.
§Examples
// Use `FilteredResourcesParamBuilder` to declare access to resources.
let system = (FilteredResourcesParamBuilder::new(|builder| {
builder.add_read::<B>().add_read::<C>();
}),)
.build_state(&mut world)
.build_system(resource_system);
world.init_resource::<A>();
world.init_resource::<C>();
fn resource_system(res: FilteredResources) {
// The resource exists, but we have no access, so we can't read it.
assert!(res.get::<A>().is_none());
// The resource doesn't exist, so we can't read it.
assert!(res.get::<B>().is_none());
// The resource exists and we have access, so we can read it.
let c = res.get::<C>().unwrap();
// The type parameter can be left out if it can be determined from use.
let c: Ref<C> = res.get().unwrap();
}
This can be used alongside ordinary Res
and ResMut
parameters if they do not conflict.
let system = (
FilteredResourcesParamBuilder::new(|builder| {
builder.add_read::<A>();
}),
ParamBuilder,
ParamBuilder,
)
.build_state(&mut world)
.build_system(resource_system);
// Read access to A does not conflict with read access to A or write access to B.
fn resource_system(filtered: FilteredResources, res_a: Res<A>, res_mut_b: ResMut<B>) {
let res_a_2: Ref<A> = filtered.get::<A>().unwrap();
}
But it will conflict if it tries to read the same resource that another parameter writes.
let system = (
FilteredResourcesParamBuilder::new(|builder| {
builder.add_read::<A>();
}),
ParamBuilder,
)
.build_state(&mut world)
.build_system(invalid_resource_system);
// Read access to A conflicts with write access to A.
fn invalid_resource_system(filtered: FilteredResources, res_mut_a: ResMut<A>) { }
Implementations§
Source§impl<'w, 's> FilteredResources<'w, 's>
impl<'w, 's> FilteredResources<'w, 's>
Sourcepub fn access(&self) -> &Access<ComponentId>
pub fn access(&self) -> &Access<ComponentId>
Returns a reference to the underlying Access
.
Sourcepub fn has_read<R: Resource>(&self) -> bool
pub fn has_read<R: Resource>(&self) -> bool
Returns true
if the FilteredResources
has access to the given resource.
Note that Self::get()
may still return None
if the resource does not exist.
Sourcepub fn get<R: Resource>(&self) -> Option<Ref<'w, R>>
pub fn get<R: Resource>(&self) -> Option<Ref<'w, R>>
Gets a reference to the resource of the given type if it exists and the FilteredResources
has access to it.
Sourcepub fn get_by_id(&self, component_id: ComponentId) -> Option<Ptr<'w>>
pub fn get_by_id(&self, component_id: ComponentId) -> Option<Ptr<'w>>
Gets a pointer to the resource with the given ComponentId
if it exists and the FilteredResources
has access to it.
Trait Implementations§
Source§impl<'w, 's> Clone for FilteredResources<'w, 's>
impl<'w, 's> Clone for FilteredResources<'w, 's>
Source§fn clone(&self) -> FilteredResources<'w, 's>
fn clone(&self) -> FilteredResources<'w, 's>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl<'w, 's> From<&'w FilteredResourcesMut<'_, 's>> for FilteredResources<'w, 's>
impl<'w, 's> From<&'w FilteredResourcesMut<'_, 's>> for FilteredResources<'w, 's>
Source§fn from(resources: &'w FilteredResourcesMut<'_, 's>) -> Self
fn from(resources: &'w FilteredResourcesMut<'_, 's>) -> Self
Source§impl<'w> From<&'w World> for FilteredResources<'w, 'static>
impl<'w> From<&'w World> for FilteredResources<'w, 'static>
Source§impl<'w> From<&'w mut World> for FilteredResources<'w, 'static>
impl<'w> From<&'w mut World> for FilteredResources<'w, 'static>
Source§impl<'w, 's> From<FilteredResourcesMut<'w, 's>> for FilteredResources<'w, 's>
impl<'w, 's> From<FilteredResourcesMut<'w, 's>> for FilteredResources<'w, 's>
Source§fn from(resources: FilteredResourcesMut<'w, 's>) -> Self
fn from(resources: FilteredResourcesMut<'w, 's>) -> Self
Source§impl SystemParam for FilteredResources<'_, '_>
impl SystemParam for FilteredResources<'_, '_>
Source§type State = Access<ComponentId>
type State = Access<ComponentId>
Source§type Item<'world, 'state> = FilteredResources<'world, 'state>
type Item<'world, 'state> = FilteredResources<'world, 'state>
Self
, instantiated with new lifetimes. Read moreSource§fn init_state(_world: &mut World, _system_meta: &mut SystemMeta) -> Self::State
fn init_state(_world: &mut World, _system_meta: &mut SystemMeta) -> Self::State
World
access used by this SystemParam
and creates a new instance of this param’s State
.Source§unsafe fn get_param<'world, 'state>(
state: &'state mut Self::State,
system_meta: &SystemMeta,
world: UnsafeWorldCell<'world>,
change_tick: Tick,
) -> Self::Item<'world, 'state>
unsafe fn get_param<'world, 'state>( state: &'state mut Self::State, system_meta: &SystemMeta, world: UnsafeWorldCell<'world>, change_tick: Tick, ) -> Self::Item<'world, 'state>
SystemParamFunction
. Read moreSource§unsafe fn new_archetype(
state: &mut Self::State,
archetype: &Archetype,
system_meta: &mut SystemMeta,
)
unsafe fn new_archetype( state: &mut Self::State, archetype: &Archetype, system_meta: &mut SystemMeta, )
Archetype
, registers the components accessed by this SystemParam
(if applicable).a Read moreSource§fn apply(state: &mut Self::State, system_meta: &SystemMeta, world: &mut World)
fn apply(state: &mut Self::State, system_meta: &SystemMeta, world: &mut World)
SystemParam
’s state.
This is used to apply Commands
during apply_deferred
.Source§fn queue(
state: &mut Self::State,
system_meta: &SystemMeta,
world: DeferredWorld<'_>,
)
fn queue( state: &mut Self::State, system_meta: &SystemMeta, world: DeferredWorld<'_>, )
apply_deferred
.Source§unsafe fn validate_param(
_state: &Self::State,
_system_meta: &SystemMeta,
_world: UnsafeWorldCell<'_>,
) -> bool
unsafe fn validate_param( _state: &Self::State, _system_meta: &SystemMeta, _world: UnsafeWorldCell<'_>, ) -> bool
get_param
.
Built-in executors use this to prevent systems with invalid params from running.
For nested SystemParam
s validation will fail if any
delegated validation fails. Read moreSource§impl<'w, 's, T: FnOnce(&mut FilteredResourcesBuilder<'_>)> SystemParamBuilder<FilteredResources<'w, 's>> for FilteredResourcesParamBuilder<T>
impl<'w, 's, T: FnOnce(&mut FilteredResourcesBuilder<'_>)> SystemParamBuilder<FilteredResources<'w, 's>> for FilteredResourcesParamBuilder<T>
Source§fn build(
self,
world: &mut World,
meta: &mut SystemMeta,
) -> <FilteredResources<'w, 's> as SystemParam>::State
fn build( self, world: &mut World, meta: &mut SystemMeta, ) -> <FilteredResources<'w, 's> as SystemParam>::State
World
access used by this SystemParam
and creates a new instance of this param’s State
.Source§fn build_state(self, world: &mut World) -> SystemState<P>
fn build_state(self, world: &mut World) -> SystemState<P>
SystemState
from a SystemParamBuilder
.
To create a system, call SystemState::build_system
on the result.impl<'w, 's> Copy for FilteredResources<'w, 's>
impl ReadOnlySystemParam for FilteredResources<'_, '_>
Auto Trait Implementations§
impl<'w, 's> Freeze for FilteredResources<'w, 's>
impl<'w, 's> !RefUnwindSafe for FilteredResources<'w, 's>
impl<'w, 's> Send for FilteredResources<'w, 's>
impl<'w, 's> Sync for FilteredResources<'w, 's>
impl<'w, 's> Unpin for FilteredResources<'w, 's>
impl<'w, 's> !UnwindSafe for FilteredResources<'w, 's>
Blanket Implementations§
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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>
. 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>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
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)
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.