pub struct MessageCursor<E>where
E: Message,{ /* private fields */ }
Expand description
Stores the state for a MessageReader
or MessageMutator
.
Access to the Messages<E>
resource is required to read any incoming messages.
In almost all cases, you should just use a MessageReader
or MessageMutator
,
which will automatically manage the state for you.
However, this type can be useful if you need to manually track messages, such as when you’re attempting to send and receive messages of the same type in the same system.
§Example
use bevy_ecs::prelude::*;
use bevy_ecs::message::{Message, MessageCursor};
#[derive(Message, Clone, Debug)]
struct MyMessage;
/// A system that both sends and receives messages using a [`Local`] [`MessageCursor`].
fn send_and_receive_messages(
// The `Local` `SystemParam` stores state inside the system itself, rather than in the world.
// `MessageCursor<T>` is the internal state of `MessageMutator<T>`, which tracks which messages have been seen.
mut local_message_reader: Local<MessageCursor<MyMessage>>,
// We can access the `Messages` resource mutably, allowing us to both read and write its contents.
mut messages: ResMut<Messages<MyMessage>>,
) {
// We must collect the messages to resend, because we can't mutate messages while we're iterating over the messages.
let mut messages_to_resend = Vec::new();
for message in local_message_reader.read(&mut messages) {
messages_to_resend.push(message.clone());
}
for message in messages_to_resend {
messages.write(MyMessage);
}
}
Implementations§
Source§impl<E> MessageCursor<E>where
E: Message,
impl<E> MessageCursor<E>where
E: Message,
Sourcepub fn read<'a>(
&'a mut self,
messages: &'a Messages<E>,
) -> MessageIterator<'a, E> ⓘ
pub fn read<'a>( &'a mut self, messages: &'a Messages<E>, ) -> MessageIterator<'a, E> ⓘ
Sourcepub fn read_mut<'a>(
&'a mut self,
messages: &'a mut Messages<E>,
) -> MessageMutIterator<'a, E> ⓘ
pub fn read_mut<'a>( &'a mut self, messages: &'a mut Messages<E>, ) -> MessageMutIterator<'a, E> ⓘ
Sourcepub fn read_with_id<'a>(
&'a mut self,
messages: &'a Messages<E>,
) -> MessageIteratorWithId<'a, E> ⓘ
pub fn read_with_id<'a>( &'a mut self, messages: &'a Messages<E>, ) -> MessageIteratorWithId<'a, E> ⓘ
Sourcepub fn read_mut_with_id<'a>(
&'a mut self,
messages: &'a mut Messages<E>,
) -> MessageMutIteratorWithId<'a, E> ⓘ
pub fn read_mut_with_id<'a>( &'a mut self, messages: &'a mut Messages<E>, ) -> MessageMutIteratorWithId<'a, E> ⓘ
Sourcepub fn par_read<'a>(
&'a mut self,
messages: &'a Messages<E>,
) -> MessageParIter<'a, E>
pub fn par_read<'a>( &'a mut self, messages: &'a Messages<E>, ) -> MessageParIter<'a, E>
Sourcepub fn par_read_mut<'a>(
&'a mut self,
messages: &'a mut Messages<E>,
) -> MessageMutParIter<'a, E>
pub fn par_read_mut<'a>( &'a mut self, messages: &'a mut Messages<E>, ) -> MessageMutParIter<'a, E>
Sourcepub fn missed_messages(&self, messages: &Messages<E>) -> usize
pub fn missed_messages(&self, messages: &Messages<E>) -> usize
Amount of messages we missed.
Trait Implementations§
Source§impl<E> Clone for MessageCursor<E>where
E: Message,
impl<E> Clone for MessageCursor<E>where
E: Message,
Source§fn clone(&self) -> MessageCursor<E>
fn clone(&self) -> MessageCursor<E>
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moreSource§impl<E> Debug for MessageCursor<E>
impl<E> Debug for MessageCursor<E>
Source§impl<E> Default for MessageCursor<E>where
E: Message,
impl<E> Default for MessageCursor<E>where
E: Message,
Source§fn default() -> MessageCursor<E>
fn default() -> MessageCursor<E>
Returns the “default value” for a type. Read more
Auto Trait Implementations§
impl<E> Freeze for MessageCursor<E>
impl<E> RefUnwindSafe for MessageCursor<E>where
E: RefUnwindSafe,
impl<E> Send for MessageCursor<E>
impl<E> Sync for MessageCursor<E>
impl<E> Unpin for MessageCursor<E>where
E: Unpin,
impl<E> UnwindSafe for MessageCursor<E>where
E: UnwindSafe,
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
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> 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
Mutably borrows from an owned value. Read more
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>
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>
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)
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)
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 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>
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>
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)
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)
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
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> FromWorld for Twhere
T: Default,
impl<T> FromWorld for Twhere
T: Default,
Source§fn from_world(_world: &mut World) -> T
fn from_world(_world: &mut World) -> T
Creates Self
using default()
.
Source§impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
Source§impl<T> Identity for Twhere
T: ?Sized,
impl<T> Identity for Twhere
T: ?Sized,
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> ⓘ
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 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> ⓘ
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 moreSource§impl<T> IntoResult<T> for T
impl<T> IntoResult<T> for T
Source§fn into_result(self) -> Result<T, RunSystemError>
fn into_result(self) -> Result<T, RunSystemError>
Converts this type into the system output type.
Source§impl<T> TypeData for T
impl<T> TypeData for T
Source§fn clone_type_data(&self) -> Box<dyn TypeData>
fn clone_type_data(&self) -> Box<dyn TypeData>
Creates a type-erased clone of this value.