Struct tuig::Replies

source ·
pub struct Replies<M: Message> { /* private fields */ }
Expand description

Allows a Game or Agent to make things happen in the engine in response to messages or input.

Remember that none of these will be acted on immediately – only once the round ends.

Implementations§

source§

impl<M: Message> Replies<M>

source

pub fn spawn(&mut self, agent: impl Agent<M> + 'static) -> &mut Self

Have an agent spawned into the next round of messages or so.

tuig will try to spawn the agent in to the immediately next round, but that’s not always guaranteed, and in particular if the game is lagging it may be some time before new agents are spawned. If you need to ensure something happens when the agent starts, implement Agent::start. If one agent needs to synchronize with one it spawned, have the spawned agent send a “hello” message when it starts.

source

pub fn spawn_boxed(&mut self, agent: Box<dyn Agent<M>>) -> &mut Self

The same as Replies::spawn, but with a boxed agent.

Generally, you should use spawn; it reduces boilerplate. But if you happen to be passing around trait objects in Boxes anyway, then you should use this.

source

pub fn queue(&mut self, msg: M) -> &mut Self

Queues up a message to be sent out in the next round.

Queued messages are guaranteed to be processed in the next round after this one. So:

  • Other running agents won’t see this message until next round
  • Agents Self::spawned this round might not see it (see that method for why)
source

pub fn queue_all(&mut self, msgs: impl IntoIterator<Item = M>) -> &mut Self

Self::queues up several messages to be sent out in the next round.

source§

impl<M: Message> Replies<M>

Some test-only functionality letting you introspect Replies, to test that Agents or Games are reacting properly to things that happen.

source

pub fn _messages(&self) -> &[M]

A test-only function, listing the messages that have been Self::queued.

source

pub fn _agents(&self) -> &[Box<dyn Agent<M>>]

A test-only function, listing the agents that have been Self::spawned.

Trait Implementations§

source§

impl<M: Message> Debug for Replies<M>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<M: Message> Default for Replies<M>

source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

§

impl<M> !RefUnwindSafe for Replies<M>

§

impl<M> Send for Replies<M>

§

impl<M> Sync for Replies<M>

§

impl<M> Unpin for Replies<M>where M: Unpin,

§

impl<M> !UnwindSafe for Replies<M>

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Downcast for Twhere T: 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.
§

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.
§

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.
§

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.
§

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

§

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, U> Into<U> for Twhere 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.

§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

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 Twhere U: TryFrom<T>,

§

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.