pub struct Runner<G: Game + 'static> { /* private fields */ }
Expand description
Handles starting up and running a Game
and all its agents.
Implementations§
source§impl<G: Game + 'static> Runner<G>
impl<G: Game + 'static> Runner<G>
sourcepub fn spawn(self, agent: impl Agent<G::Message> + 'static) -> Self
pub fn spawn(self, agent: impl Agent<G::Message> + 'static) -> Self
Set an agent to be running at game startup, to process the first round of messages.
sourcepub fn queue(self, msg: G::Message) -> Self
pub fn queue(self, msg: G::Message) -> Self
Add a message to be handled in the first round, by the first crop of Self::spawn
ed agents.
sourcepub fn input_tick(self, tick: f32) -> Self
pub fn input_tick(self, tick: f32) -> Self
Set the desired time between rounds of messages.
If processing a round takes longer than this, the game is considered to be “lagging”. If it takes less time, then the runner will sit around, just processing input until the round is done.
The exact mechanics of round timing in laggy games is deliberately left unspecified so I can fiddle with it to make it “work nicer”. Broadly, though: If it lags a little and sporadically, the rounds tick over immediately until it “catches up” to approximately match realtime. If it properly lags out, getting too far behind, then the timer resets and starts ticking relative to the end of the lag.
sourcepub fn run(self, iosys: impl IoSystem + 'static, iorun: impl IoRunner) -> G
pub fn run(self, iosys: impl IoSystem + 'static, iorun: impl IoRunner) -> G
Start the game running, according to the feature-selected runner.
This function only exits when Game::message
or Game::attach
returns [Response::Quit
]. It returns the
Game
, primarily for testing purposes.
sourcepub fn load_run(self) -> G
pub fn load_run(self) -> G
Use crate::io::load!
to intelligently pick an iosystem, load it, and Self::run
.
This must be run on the main thread. Ideally, you’d run it from main
directly.
This function only exits when Game::message
or Game::attach
returns [Response::Quit
]. It returns the
Game
, primarily for testing purposes. If loading fails, it panics.
Auto Trait Implementations§
impl<G> !RefUnwindSafe for Runner<G>
impl<G> Send for Runner<G>
impl<G> Sync for Runner<G>where G: Sync,
impl<G> Unpin for Runner<G>where G: Unpin, <G as Game>::Message: Unpin,
impl<G> !UnwindSafe for Runner<G>
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
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere T: Any,
§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>
. 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>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
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)
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.§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.