emerald 0.3.214

A lite, fully featured 2D game engine.
Documentation
use emerald::{
    rendering::components::{aseprite_update_system, Camera, Sprite},
    *,
};

pub fn main() {
    let mut settings = GameSettings::default();
    settings.render_settings.resolution = (320, 180);
    emerald::start(
        Box::new(CameraExample {
            world: World::new(),
        }),
        settings,
    )
}

pub struct CameraExample {
    world: World,
}
impl Game for CameraExample {
    fn initialize(&mut self, mut emd: Emerald) {
        emd.set_asset_folder_root(String::from("./examples/assets/"));
        let mut aseprite = emd.loader().aseprite("smiley.aseprite").unwrap();
        aseprite.play_and_loop("smile").unwrap();

        let sprite = emd.loader().sprite("bunny.png").unwrap();
        let e = self
            .world
            .spawn((sprite.clone(), Camera::default(), Transform::default()));
        self.world.make_active_camera(e).unwrap();

        self.world
            .spawn((aseprite.clone(), Transform::from_translation((32.0, 0.0))));

        self.world
            .spawn((sprite.clone(), Transform::from_translation((-180.0, 0.0))));
        self.world
            .spawn((aseprite.clone(), Transform::from_translation((-200.0, 0.0))));
        self.world
            .spawn((sprite.clone(), Transform::from_translation((180.0, 0.0))));
        self.world
            .spawn((aseprite.clone(), Transform::from_translation((200.0, 0.0))));
        self.world
            .spawn((sprite.clone(), Transform::from_translation((0.0, 180.0))));
        self.world
            .spawn((aseprite.clone(), Transform::from_translation((0.0, 200.0))));
        self.world
            .spawn((sprite.clone(), Transform::from_translation((0.0, -180.0))));
    }

    fn update(&mut self, mut emd: Emerald) {
        let mut velocity = Vector2::new(0.0, 0.0);
        let speed = 100.0;
        let delta = emd.delta();
        if emd.input().is_key_pressed(KeyCode::A) {
            velocity.x = -speed * delta;
        } else if emd.input().is_key_pressed(KeyCode::D) {
            velocity.x = speed * delta;
        }
        if emd.input().is_key_pressed(KeyCode::W) {
            velocity.y = speed * delta;
        } else if emd.input().is_key_pressed(KeyCode::S) {
            velocity.y = -speed * delta;
        }

        for (_, transform) in self
            .world
            .query::<&mut Transform>()
            .with::<&Camera>()
            .iter()
        {
            transform.translation.x += velocity.x;
            transform.translation.y += velocity.y;
        }

        aseprite_update_system(&mut self.world, delta);
    }

    fn draw(&mut self, mut emd: Emerald) {
        emd.graphics().begin().unwrap();
        emd.graphics().draw_world(&mut self.world).unwrap();
        emd.graphics().render().unwrap();
    }
}