emerald 0.3.214

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

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

pub struct GamepadExample {
    world: World,
}
impl Game for GamepadExample {
    fn initialize(&mut self, mut emd: Emerald) {
        emd.set_asset_folder_root(String::from("./examples/assets/"));

        match emd.loader().sprite("bunny.png") {
            Ok(sprite) => {
                self.world
                    .spawn((sprite, Transform::from_translation((16.0, 16.0))));
            }
            Err(_) => {}
        };
    }

    fn update(&mut self, mut emd: Emerald) {
        let delta = emd.delta();
        let mut input = emd.input();
        let mut velocity = Vector2::new(0.0, 0.0);
        let speed = 500.0;
        let mut direction = input.joystick(Joystick::Left);

        if input.is_button_pressed(Button::DPadNorth) {
            direction.1 = 1.0;
        } else if input.is_button_pressed(Button::DPadSouth) {
            direction.1 = -1.0;
        }

        if input.is_button_pressed(Button::DPadWest) {
            direction.0 = -1.0;
        } else if input.is_button_pressed(Button::DPadEast) {
            direction.0 = 1.0;
        }

        velocity.x = direction.0 * speed;
        velocity.y = direction.1 * speed;

        for (_, (transform, sprite)) in self.world.query::<(&mut Transform, &mut Sprite)>().iter() {
            if input.is_button_just_pressed(Button::North) {
                sprite.scale *= 2.0;
            } else if input.is_button_just_pressed(Button::South) {
                sprite.scale *= 0.5;
            }

            if input.is_button_just_pressed(Button::West) {
                sprite.visible = !sprite.visible;
            }

            transform.translation.x += delta * velocity.x;
            transform.translation.y += delta * velocity.y;
        }
    }

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