Skip to main content

HeadlessRunner

Struct HeadlessRunner 

Source
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>

Source

pub fn new(director: SceneDirector<S>) -> Self

Create a headless runner with default tick rate (100ms).

Source

pub fn with_tick_rate(self, tick_rate: Duration) -> Self

Override the tick rate (frame interval).

Source

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.

Source

pub fn director(&self) -> &SceneDirector<S>

Borrow the underlying director.

Source

pub fn director_mut(&mut self) -> &mut SceneDirector<S>

Mutable access to the director.

Source

pub async fn run(self) -> Result<()>

Run the headless game loop until the director requests quit or max_ticks is reached.

Source§

impl<S: Scene> HeadlessRunner<S>

Source

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>

§

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>

Blanket Implementations§

Source§

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

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

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

Source§

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

Mutably borrows from an owned value. Read more
Source§

impl<T> Component for T
where T: Send + Sync + 'static,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where 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.

Source§

impl<T> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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 more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

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

Initializes a with the given initializer. Read more
Source§

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

Dereferences the given pointer. Read more
Source§

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

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

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

impl<T> RuntimeResourceEntry for T
where T: 'static + Send + Sync,

Source§

fn insert(self: Box<T>, ctx: &mut ResourceContext)

Source§

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

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

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

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V