pub struct HeadlessRunner<S> { /* private fields */ }Expand description
Headless game runner
Unlike GameRunner, this runner does not require a TUI
or any rendering. It simply executes the game loop at a specified tick rate.
§Example
use issun::prelude::*;
use issun::engine::HeadlessRunner;
#[tokio::main]
async fn main() -> Result<()> {
let game = GameBuilder::new()
.with_plugin(EconomyPlugin::default())?
.build()
.await?;
let director = SceneDirector::new(
MySimulation::new(),
game.services,
game.systems,
game.resources,
).await;
let runner = HeadlessRunner::new(director)
.with_tick_rate(Duration::from_millis(100))
.with_max_ticks(1000);
runner.run().await?;
Ok(())
}Implementations§
Source§impl<S: Scene> HeadlessRunner<S>
impl<S: Scene> HeadlessRunner<S>
Sourcepub fn new(director: SceneDirector<S>) -> Self
pub fn new(director: SceneDirector<S>) -> Self
Create a headless runner with default tick rate (100ms).
Sourcepub fn with_tick_rate(self, tick_rate: Duration) -> Self
pub fn with_tick_rate(self, tick_rate: Duration) -> Self
Override the tick rate (frame interval).
Sourcepub fn with_max_ticks(self, max_ticks: u64) -> Self
pub fn with_max_ticks(self, max_ticks: u64) -> Self
Set maximum number of ticks before stopping.
Useful for testing or running simulations for a fixed duration. If not set, the runner will continue until the director requests quit.
Sourcepub fn director(&self) -> &SceneDirector<S>
pub fn director(&self) -> &SceneDirector<S>
Borrow the underlying director.
Sourcepub fn director_mut(&mut self) -> &mut SceneDirector<S>
pub fn director_mut(&mut self) -> &mut SceneDirector<S>
Mutable access to the director.
Source§impl<S: Scene> HeadlessRunner<S>
impl<S: Scene> HeadlessRunner<S>
Sourcepub fn with_command_channel<Cmd: Event + Clone + Serialize>(
self,
command_rx: Receiver<Cmd>,
) -> ChannelHeadlessRunner<S, Cmd>
pub fn with_command_channel<Cmd: Event + Clone + Serialize>( self, command_rx: Receiver<Cmd>, ) -> ChannelHeadlessRunner<S, Cmd>
Add a command channel to create a ChannelHeadlessRunner.
Commands sent through the channel will be published to the EventBus immediately, allowing for low-latency (<1ms) command processing.
The command type must implement the Event trait and Serialize to be published to the EventBus.
Auto Trait Implementations§
impl<S> !RefUnwindSafe for HeadlessRunner<S>
impl<S> !UnwindSafe for HeadlessRunner<S>
impl<S> Freeze for HeadlessRunner<S>where
SceneDirector<S>: Freeze,
impl<S> Send for HeadlessRunner<S>where
SceneDirector<S>: Send,
impl<S> Sync for HeadlessRunner<S>where
SceneDirector<S>: Sync,
impl<S> Unpin for HeadlessRunner<S>where
SceneDirector<S>: Unpin,
impl<S> UnsafeUnpin for HeadlessRunner<S>where
SceneDirector<S>: UnsafeUnpin,
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> Component for T
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> ⓘ
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> ⓘ
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