pub struct MessageReader<'w, 's, E: Message> { /* private fields */ }
Expand description
Reads Message
s of type T
in order and tracks which messages have already been read.
§Concurrency
Unlike MessageWriter<T>
, systems with MessageReader<T>
param can be executed concurrently
(but not concurrently with MessageWriter<T>
or MessageMutator<T>
systems for the same message type).
Implementations§
Source§impl<'w, 's, E: Message> MessageReader<'w, 's, E>
impl<'w, 's, E: Message> MessageReader<'w, 's, E>
Sourcepub fn read(&mut self) -> MessageIterator<'_, E> ⓘ
pub fn read(&mut self) -> MessageIterator<'_, E> ⓘ
Iterates over the messages this MessageReader
has not seen yet. This updates the
MessageReader
’s message counter, which means subsequent message reads will not include messages
that happened before now.
Sourcepub fn read_with_id(&mut self) -> MessageIteratorWithId<'_, E> ⓘ
pub fn read_with_id(&mut self) -> MessageIteratorWithId<'_, E> ⓘ
Sourcepub fn len(&self) -> usize
pub fn len(&self) -> usize
Determines the number of messages available to be read from this MessageReader
without consuming any.
Sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Returns true
if there are no messages available to read.
§Example
The following example shows a useful pattern where some behavior is triggered if new messages are available.
MessageReader::clear()
is used so the same messages don’t re-trigger the behavior the next time the system runs.
#[derive(Message)]
struct Collision;
fn play_collision_sound(mut messages: MessageReader<Collision>) {
if !messages.is_empty() {
messages.clear();
// Play a sound
}
}
Sourcepub fn clear(&mut self)
pub fn clear(&mut self)
Consumes all available messages.
This means these messages will not appear in calls to MessageReader::read()
or
MessageReader::read_with_id()
and MessageReader::is_empty()
will return true
.
For usage, see MessageReader::is_empty()
.
Trait Implementations§
Source§impl<E: Message> SystemParam for MessageReader<'_, '_, E>
impl<E: Message> SystemParam for MessageReader<'_, '_, E>
Source§type Item<'w, 's> = MessageReader<'w, 's, E>
type Item<'w, 's> = MessageReader<'w, 's, E>
Self
, instantiated with new lifetimes. Read moreSource§fn init_access(
state: &Self::State,
system_meta: &mut SystemMeta,
component_access_set: &mut FilteredAccessSet,
world: &mut World,
)
fn init_access( state: &Self::State, system_meta: &mut SystemMeta, component_access_set: &mut FilteredAccessSet, world: &mut World, )
World
access used by this SystemParam
Source§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 ApplyDeferred
.Source§fn queue(
state: &mut Self::State,
system_meta: &SystemMeta,
world: DeferredWorld<'_>,
)
fn queue( state: &mut Self::State, system_meta: &SystemMeta, world: DeferredWorld<'_>, )
ApplyDeferred
.Source§unsafe fn validate_param<'w, 's>(
state: &'s mut Self::State,
_system_meta: &SystemMeta,
_world: UnsafeWorldCell<'w>,
) -> Result<(), SystemParamValidationError>
unsafe fn validate_param<'w, 's>( state: &'s mut Self::State, _system_meta: &SystemMeta, _world: UnsafeWorldCell<'w>, ) -> Result<(), SystemParamValidationError>
Source§unsafe fn get_param<'w, 's>(
state: &'s mut Self::State,
system_meta: &SystemMeta,
world: UnsafeWorldCell<'w>,
change_tick: Tick,
) -> Self::Item<'w, 's>
unsafe fn get_param<'w, 's>( state: &'s mut Self::State, system_meta: &SystemMeta, world: UnsafeWorldCell<'w>, change_tick: Tick, ) -> Self::Item<'w, 's>
SystemParamFunction
. Read moreimpl<'w, 's, E: Message> ReadOnlySystemParam for MessageReader<'w, 's, E>
Auto Trait Implementations§
impl<'w, 's, E> Freeze for MessageReader<'w, 's, E>
impl<'w, 's, E> RefUnwindSafe for MessageReader<'w, 's, E>where
E: RefUnwindSafe,
impl<'w, 's, E> Send for MessageReader<'w, 's, E>
impl<'w, 's, E> Sync for MessageReader<'w, 's, E>
impl<'w, 's, E> Unpin for MessageReader<'w, 's, E>
impl<'w, 's, E> !UnwindSafe for MessageReader<'w, 's, E>
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> 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.