kludgine 0.1.0-dev.0

An asynchronous app and 2d game framework
Documentation
use kludgine::prelude::*;

fn main() {
    SingleWindowApplication::run(Simple::default());
}

#[derive(Default)]
struct Simple {
    source_sprite: Option<SpriteSource>,
    rotation_angle: Angle,
}

impl WindowCreator for Simple {
    fn window_title() -> String {
        "Simple - Kludgine".to_owned()
    }
}

impl Window for Simple {
    fn target_fps(&self) -> Option<u16> {
        Some(60)
    }

    fn initialize(&mut self, _scene: &Target, _requester: RedrawRequester) -> kludgine::Result<()> {
        let texture = Texture::load("kludgine/examples/assets/k.png")?;
        self.source_sprite = Some(SpriteSource::entire_texture(texture));
        Ok(())
    }

    fn update(&mut self, scene: &Target, _status: &mut RedrawStatus) -> kludgine::Result<()> {
        if let Some(elapsed) = scene.elapsed() {
            self.rotation_angle += Angle::Radians(elapsed.as_secs_f32());
        }

        Ok(())
    }

    fn render(&mut self, scene: &Target, _status: &mut RedrawStatus) -> kludgine::Result<()> {
        let sprite = self.source_sprite.as_ref().unwrap();

        sprite.render_at(
            scene,
            Rect::from(scene.size()).center(),
            SpriteRotation::around_center(self.rotation_angle),
        );

        Ok(())
    }
}