bevy_ecs::world

Struct FilteredResourcesMut

Source
pub struct FilteredResourcesMut<'w, 's> { /* private fields */ }
Expand description

Provides mutable access to a set of Resources defined by the contained Access.

Use FilteredResources if you only need read-only access to resources.

To be useful as a SystemParam, this must be configured using a FilteredResourcesMutParamBuilder to build the system using a SystemParamBuilder.

§Examples

// Use `FilteredResourcesMutParamBuilder` to declare access to resources.
let system = (FilteredResourcesMutParamBuilder::new(|builder| {
    builder.add_write::<B>().add_read::<C>().add_write::<D>();
}),)
    .build_state(&mut world)
    .build_system(resource_system);

world.init_resource::<A>();
world.init_resource::<C>();
world.init_resource::<D>();

fn resource_system(mut res: FilteredResourcesMut) {
    // The resource exists, but we have no access, so we can't read it or write it.
    assert!(res.get::<A>().is_none());
    assert!(res.get_mut::<A>().is_none());
    // The resource doesn't exist, so we can't read it or write it.
    assert!(res.get::<B>().is_none());
    assert!(res.get_mut::<B>().is_none());
    // The resource exists and we have read access, so we can read it but not write it.
    let c = res.get::<C>().unwrap();
    assert!(res.get_mut::<C>().is_none());
    // The resource exists and we have write access, so we can read it or write it.
    let d = res.get::<D>().unwrap();
    let d = res.get_mut::<D>().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 = (
    FilteredResourcesMutParamBuilder::new(|builder| {
        builder.add_read::<A>().add_write::<B>();
    }),
    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 C.
// Write access to B does not conflict with access to A or C.
fn resource_system(mut filtered: FilteredResourcesMut, res_a: Res<A>, res_mut_c: ResMut<C>) {
    let res_a_2: Ref<A> = filtered.get::<A>().unwrap();
    let res_mut_b: Mut<B> = filtered.get_mut::<B>().unwrap();
}

But it will conflict if it tries to read the same resource that another parameter writes, or write the same resource that another parameter reads.

let system = (
    FilteredResourcesMutParamBuilder::new(|builder| {
        builder.add_write::<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: FilteredResourcesMut, res_a: Res<A>) { }

Implementations§

Source§

impl<'w, 's> FilteredResourcesMut<'w, 's>

Source

pub fn as_readonly(&self) -> FilteredResources<'_, 's>

Gets read-only access to all of the resources this FilteredResourcesMut can access.

Source

pub fn reborrow(&mut self) -> FilteredResourcesMut<'_, 's>

Returns a new instance with a shorter lifetime. This is useful if you have &mut FilteredResourcesMut, but you need FilteredResourcesMut.

Source

pub fn access(&self) -> &Access<ComponentId>

Returns a reference to the underlying Access.

Source

pub fn has_read<R: Resource>(&self) -> bool

Returns true if the FilteredResources has read access to the given resource. Note that Self::get() may still return None if the resource does not exist.

Source

pub fn has_write<R: Resource>(&self) -> bool

Returns true if the FilteredResources has write access to the given resource. Note that Self::get_mut() may still return None if the resource does not exist.

Source

pub fn get<R: Resource>(&self) -> Option<Ref<'_, R>>

Gets a reference to the resource of the given type if it exists and the FilteredResources has access to it.

Source

pub fn get_by_id(&self, component_id: ComponentId) -> Option<Ptr<'_>>

Gets a pointer to the resource with the given ComponentId if it exists and the FilteredResources has access to it.

Source

pub fn get_mut<R: Resource>(&mut self) -> Option<Mut<'_, R>>

Gets a mutable reference to the resource of the given type if it exists and the FilteredResources has access to it.

Source

pub fn get_mut_by_id( &mut self, component_id: ComponentId, ) -> Option<MutUntyped<'_>>

Gets a mutable pointer to the resource with the given ComponentId if it exists and the FilteredResources has access to it.

Source

pub fn into_mut<R: Resource>(self) -> Option<Mut<'w, R>>

Consumes self and gets mutable access to resource of the given type with the world 'w lifetime if it exists and the FilteredResources has access to it.

Source

pub fn into_mut_by_id(self, component_id: ComponentId) -> Option<MutUntyped<'w>>

Consumes self and gets mutable access to resource with the given ComponentId with the world 'w lifetime if it exists and the FilteredResources has access to it.

Trait Implementations§

Source§

impl<'w, 's> From<&'w FilteredResourcesMut<'_, 's>> for FilteredResources<'w, 's>

Source§

fn from(resources: &'w FilteredResourcesMut<'_, 's>) -> Self

Converts to this type from the input type.
Source§

impl<'w> From<&'w mut World> for FilteredResourcesMut<'w, 'static>

Source§

fn from(value: &'w mut World) -> Self

Converts to this type from the input type.
Source§

impl<'w, 's> From<FilteredResourcesMut<'w, 's>> for FilteredResources<'w, 's>

Source§

fn from(resources: FilteredResourcesMut<'w, 's>) -> Self

Converts to this type from the input type.
Source§

impl SystemParam for FilteredResourcesMut<'_, '_>

Source§

type State = Access<ComponentId>

Used to store data which persists across invocations of a system.
Source§

type Item<'world, 'state> = FilteredResourcesMut<'world, 'state>

The item type returned when constructing this system param. The value of this associated type should be Self, instantiated with new lifetimes. Read more
Source§

fn init_state(_world: &mut World, _system_meta: &mut SystemMeta) -> Self::State

Registers any 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>

Creates a parameter to be passed into a SystemParamFunction. Read more
Source§

unsafe fn new_archetype( state: &mut Self::State, archetype: &Archetype, system_meta: &mut SystemMeta, )

For the specified Archetype, registers the components accessed by this SystemParam (if applicable).a Read more
Source§

fn apply(state: &mut Self::State, system_meta: &SystemMeta, world: &mut World)

Applies any deferred mutations stored in this SystemParam’s state. This is used to apply Commands during apply_deferred.
Source§

fn queue( state: &mut Self::State, system_meta: &SystemMeta, world: DeferredWorld<'_>, )

Queues any deferred mutations to be applied at the next apply_deferred.
Source§

unsafe fn validate_param( _state: &Self::State, _system_meta: &SystemMeta, _world: UnsafeWorldCell<'_>, ) -> bool

Validates that the param can be acquired by the get_param. Built-in executors use this to prevent systems with invalid params from running. For nested SystemParams validation will fail if any delegated validation fails. Read more
Source§

impl<'w, 's, T: FnOnce(&mut FilteredResourcesMutBuilder<'_>)> SystemParamBuilder<FilteredResourcesMut<'w, 's>> for FilteredResourcesMutParamBuilder<T>

Source§

fn build( self, world: &mut World, meta: &mut SystemMeta, ) -> <FilteredResourcesMut<'w, 's> as SystemParam>::State

Registers any 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>

Create a SystemState from a SystemParamBuilder. To create a system, call SystemState::build_system on the result.

Auto Trait Implementations§

§

impl<'w, 's> Freeze for FilteredResourcesMut<'w, 's>

§

impl<'w, 's> !RefUnwindSafe for FilteredResourcesMut<'w, 's>

§

impl<'w, 's> Send for FilteredResourcesMut<'w, 's>

§

impl<'w, 's> Sync for FilteredResourcesMut<'w, 's>

§

impl<'w, 's> Unpin for FilteredResourcesMut<'w, 's>

§

impl<'w, 's> !UnwindSafe for FilteredResourcesMut<'w, 's>

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> 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 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> 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, U> TryFrom<U> for T
where U: Into<T>,

Source§

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>,

Source§

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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

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,