mage-core 0.2.0

An ASCII art game engine written in Rust.
Documentation
use mage_core::{
    image::{Char, Point},
    run, App, Colour, Config, PresentInput, PresentResult, TickInput, TickResult,
};
use tracing::info;
use tracing_subscriber::EnvFilter;

#[tokio::main]
async fn main() {
    color_eyre::install().unwrap();
    let filter = EnvFilter::from_default_env()
        .add_directive("wgpu=warn".parse().unwrap())
        .add_directive("mage=trace".parse().unwrap());
    tracing_subscriber::fmt::fmt()
        .without_time()
        .compact()
        .with_env_filter(filter)
        .init();

    info!("Starting...");

    let app = HelloApp::new();
    let config = Config::default();

    let _ = run(app, config).await;
}

struct HelloApp {}

impl HelloApp {
    fn new() -> Self {
        Self {}
    }
}

impl App for HelloApp {
    fn tick(&mut self, _tick_input: TickInput) -> TickResult {
        TickResult::Continue
    }

    fn present(&mut self, mut present_input: PresentInput) -> PresentResult {
        let mut image = present_input.new_image();
        image.clear(Colour::White.into(), Colour::Black.into());

        image.draw_string(
            Point::new(0, 0),
            "Hello, World!",
            Colour::Black.into(),
            Colour::Yellow.into(),
        );
        image.draw_char(
            Point::new(image.width as i32 - 1, 0),
            Char::new_char('A', Colour::LightRed.into(), Colour::Black.into()),
        );

        present_input.blit(
            present_input.rect(),
            image.rect(),
            &image,
            Colour::Black.into(),
        );

        PresentResult::Changed
    }
}