Documentation
use geng::prelude::*;

struct State {
    geng: Geng,
}

impl State {
    fn new(geng: &Geng) -> Self {
        Self { geng: geng.clone() }
    }
}

impl geng::State for State {
    fn draw(&mut self, framebuffer: &mut ugli::Framebuffer) {
        ugli::clear(framebuffer, Some(Rgba::TRANSPARENT_BLACK), None, None);
        self.geng.default_font().draw(
            framebuffer,
            &geng::PixelPerfectCamera,
            "Hello, World!",
            vec2::splat(geng::TextAlign::CENTER),
            mat3::translate(framebuffer.size().map(|x| x as f32 / 2.0)) * mat3::scale_uniform(32.0),
            Rgba::WHITE,
        );
    }
}

fn main() {
    logger::init();
    geng::setup_panic_handler();
    Geng::run_with(
        &geng::ContextOptions {
            window: {
                let mut options = geng::window::Options::new("Transparent");
                options.transparency = true;
                options.mouse_passthrough = true;
                options
            },
            ..default()
        },
        |geng| async move {
            geng.run_state(State::new(&geng)).await;
        },
    );
}