App

Struct App 

Source
pub struct App { /* private fields */ }
Expand description

Main application struct that manages the game loop and plugin lifecycle

The App coordinates:

  • Plugin registration and initialization
  • System scheduling (startup and per-frame)
  • Main loop execution
  • Resource cleanup on shutdown

§Example

use kon::prelude::*;

fn main() {
    Kon::new()
        .add_plugin(DefaultPlugins)
        .add_startup_system(setup)
        .add_system(update)
        .run();

Implementations§

Source§

impl App

Source

pub fn new() -> App

Creates a new App instance

Initializes logging and installs custom panic handler

Source

pub fn set_driver<D>(&mut self, driver: D) -> &mut App
where D: Driver + 'static,

Sets a custom driver for the game loop

Replaces the default driver with a custom implementation. This allows control over how the application lifecycle executes (e.g., fixed timestep, event-driven loops, or headless simulation).

Must be called before run(). If not set, DefaultDriver is used.

§Returns

Self reference for method chaining

§Example
Kon::new()
    .set_driver(CustomDriver)
    .run();
Source

pub fn add_plugin<P>(&mut self, plugin: P) -> &mut App
where P: Plugin,

Adds a plugin to the application

Plugins extend engine functionality. Common examples:

  • EcsPlugin - Registers the World
  • WindowPlugin - Creates the game window
  • DefaultPlugins - Bundle of core plugins
§Returns

Self reference for method chaining

Source

pub fn add_startup_system<F>(&mut self, system: F) -> &mut App
where F: FnMut(&mut Context) + 'static,

Adds a startup system that runs once at application start

§Returns

Self reference for method chaining

Source

pub fn add_system<F>(&mut self, system: F) -> &mut App
where F: FnMut(&mut Context) + 'static,

Adds a system that runs every frame

§Returns

Self reference for method chaining

Source

pub fn add_sync_system<F>(&mut self, system: F) -> &mut App
where F: FnMut(&mut Context) + 'static,

Adds a system that runs at the end of every frame

§Returns

Self reference for method chaining

Source

pub fn register<R>(&mut self, resource: R) -> &mut App
where R: Any + Send + Sync + 'static,

Registers a global resource accessible from all systems

Resources are stored in Context and accessible via ctx.global::<T>().

§Returns

Self reference for method chaining

Source

pub fn context(&self) -> &Context

Returns an immutable reference to the engine context

Source

pub fn context_mut(&mut self) -> &mut Context

Returns a mutable reference to the engine context

Source

pub fn initialize(&mut self)

Initializes the application

Called automatically by the driver. This method:

  1. Calls ready() on all registered plugins
  2. Executes all startup systems once

Should not be called manually unless implementing a custom driver.

Source

pub fn tick(&mut self)

Executes a single frame update

Called automatically by the driver each frame. This method:

  1. Updates time tracking
  2. Runs all registered systems
  3. Clears frame events

Should not be called manually unless implementing a custom driver.

Source

pub fn cleanup(&mut self)

Cleans up the application

Called automatically by the driver on exit. This method calls cleanup() on all registered plugins, allowing them to release resources.

Should not be called manually unless implementing a custom driver.

Source

pub fn run(&mut self)

Starts the application and runs the game loop

This is the entry point for executing the engine. It:

  1. Transfers ownership of the app to the configured driver
  2. The driver handles initialization, update loop, and cleanup
  3. Blocks until the application exits

The driver is consumed during execution. If no custom driver was set via set_driver(), the DefaultDriver is used.

§Example
Kon::new()
    .add_plugin(DefaultPlugins)
    .add_system(update_system)
    .run();  // Blocks here until exit

Trait Implementations§

Source§

impl Default for App

Source§

fn default() -> App

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

Auto Trait Implementations§

§

impl Freeze for App

§

impl !RefUnwindSafe for App

§

impl !Send for App

§

impl !Sync for App

§

impl Unpin for App

§

impl !UnwindSafe for App

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> Downcast for T
where T: Any,

Source§

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>

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)

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)

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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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, U> TryFrom<U> for T
where U: Into<T>,

Source§

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 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<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more