Struct AssetChanged

Source
pub struct AssetChanged<A>(/* private fields */)
where
    A: AsAssetId;
Expand description

Filter that selects entities with an A for an asset that changed after the system last ran, where A is a component that implements AsAssetId.

Unlike Changed<A>, this is true whenever the asset for the A in ResMut<Assets<A>> changed. For example, when a mesh changed through the Assets<Mesh>::get_mut method, AssetChanged<Mesh> will iterate over all entities with the Handle<Mesh> for that mesh. Meanwhile, Changed<Handle<Mesh>> will iterate over no entities.

Swapping the actual A component is a common pattern. So you should check for both AssetChanged<A> and Changed<A> with Or<(Changed<A>, AssetChanged<A>)>.

§Quirks

  • Asset changes are registered in the AssetEvents schedule.
  • Removed assets are not detected.

The list of changed assets only gets updated in the AssetEvents schedule which runs in Last. Therefore, AssetChanged will only pick up asset changes in schedules following AssetEvents or the next frame. Consider adding the system in the Last schedule after AssetEvents if you need to react without frame delay to asset changes.

§Performance

When at least one A is updated, this will read a hashmap once per entity with an A component. The runtime of the query is proportional to how many entities with an A it matches.

If no A asset updated since the last time the system ran, then no lookups occur.

Trait Implementations§

Source§

impl<A> QueryFilter for AssetChanged<A>
where A: AsAssetId,

SAFETY: read-only access

Source§

const IS_ARCHETYPAL: bool = false

Returns true if (and only if) this Filter relies strictly on archetypes to limit which components are accessed by the Query. Read more
Source§

unsafe fn filter_fetch( fetch: &mut <AssetChanged<A> as WorldQuery>::Fetch<'_>, entity: Entity, table_row: TableRow, ) -> bool

Returns true if the provided Entity and TableRow should be included in the query results. If false, the entity will be skipped. Read more
Source§

impl<A> WorldQuery for AssetChanged<A>
where A: AsAssetId,

SAFETY: ROQueryFetch<Self> is the same as QueryFetch<Self>

Source§

const IS_DENSE: bool = <&A>::IS_DENSE

Returns true if (and only if) every table of every archetype matched by this fetch contains all of the matched components. Read more
Source§

type Fetch<'w> = AssetChangedFetch<'w, A>

Per archetype/table state retrieved by this WorldQuery to compute Self::Item for each entity.
Source§

type State = AssetChangedState<A>

State used to construct 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>( fetch: <AssetChanged<A> as WorldQuery>::Fetch<'wlong>, ) -> <AssetChanged<A> as WorldQuery>::Fetch<'wshort>
where 'wlong: 'wshort,

This function manually implements subtyping for the query fetches.
Source§

unsafe fn init_fetch<'w>( world: UnsafeWorldCell<'w>, state: &<AssetChanged<A> as WorldQuery>::State, last_run: Tick, this_run: Tick, ) -> <AssetChanged<A> as WorldQuery>::Fetch<'w>

Creates a new instance of Self::Fetch, by combining data from the World with the cached Self::State. Readonly accesses resources registered in WorldQuery::update_component_access. Read more
Source§

unsafe fn set_archetype<'w>( fetch: &mut <AssetChanged<A> as WorldQuery>::Fetch<'w>, state: &<AssetChanged<A> as WorldQuery>::State, archetype: &'w Archetype, table: &'w Table, )

Adjusts internal state to account for the next Archetype. This will always be called on archetypes that match this WorldQuery. Read more
Source§

unsafe fn set_table<'w>( fetch: &mut <AssetChanged<A> as WorldQuery>::Fetch<'w>, state: &<AssetChanged<A> as WorldQuery>::State, table: &'w Table, )

Adjusts internal state to account for the next Table. This will always be called on tables that match this WorldQuery. Read more
Source§

fn update_component_access( state: &<AssetChanged<A> as WorldQuery>::State, access: &mut FilteredAccess<ComponentId>, )

Adds any component accesses used by this WorldQuery to access. Read more
Source§

fn init_state(world: &mut World) -> AssetChangedState<A>

Creates and initializes a State for this WorldQuery type.
Source§

fn get_state( components: &Components, ) -> Option<<AssetChanged<A> as WorldQuery>::State>

Attempts to initialize a State for this WorldQuery type using read-only access to Components.
Source§

fn matches_component_set( state: &<AssetChanged<A> as WorldQuery>::State, set_contains_id: &impl Fn(ComponentId) -> bool, ) -> bool

Returns true if this query matches a set of components. Otherwise, returns false. Read more
Source§

fn set_access(_state: &mut Self::State, _access: &FilteredAccess<ComponentId>)

Sets available accesses for implementors with dynamic access such as FilteredEntityRef or FilteredEntityMut. Read more

Auto Trait Implementations§

§

impl<A> Freeze for AssetChanged<A>

§

impl<A> RefUnwindSafe for AssetChanged<A>
where A: RefUnwindSafe,

§

impl<A> Send for AssetChanged<A>

§

impl<A> Sync for AssetChanged<A>

§

impl<A> Unpin for AssetChanged<A>
where A: Unpin,

§

impl<A> UnwindSafe for AssetChanged<A>
where A: UnwindSafe,

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>

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

Converts 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)

Converts &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)

Converts &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> 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> DowncastSend for T
where T: Any + Send,

Source§

fn into_any_send(self: Box<T>) -> Box<dyn Any + Send>

Converts Box<Trait> (where Trait: DowncastSend) to Box<dyn Any + Send>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

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

Source§

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

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> 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, 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<T> Upcast<T> for T

Source§

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

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,

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,