3D Game engine in Rust
Go to file
2022-03-16 11:33:12 -05:00
src Make draw_text take an AsRef<str> 2022-03-16 11:33:12 -05:00
.gitignore Initial Commit 2022-03-06 10:25:42 -06:00
Cargo.toml Add ability to draw text 2022-03-16 11:26:25 -05:00
duck.png Finish sprite rendering 2022-03-07 11:08:58 -06:00
LICENSE Get ready to publish crate 2022-03-13 13:42:58 -05:00
MesloLGS NF Regular.ttf Make draw_text take an AsRef<str> 2022-03-16 11:33:12 -05:00
README.md Rename crate because I'm bad at this 2022-03-13 13:21:32 -05:00

cat-box

Work in progress game engine, inspired by arcade.

use cat_box::{Event, Game, Keycode, Sprite};

fn main() {
    let game = Game::new("cat-box demo", 1000, 800);

    let mut i = 0.0;
    let mut s = Sprite::new("duck.png", 500, 400).unwrap();
    game.run(|canvas, event_pump| {
        i = (i + 1.0) % 360.0;

        let (start_x, start_y) = s.position();
        let m = sdl2::mouse::MouseState::new(event_pump.as_ref());
        let x_diff = m.x() - start_x;
        let y_diff = m.y() - start_y;

        let angle = (y_diff as f64).atan2(x_diff as f64);
        s.set_angle(angle.to_degrees());

        for event in event_pump {
            match event {
                Event::Quit { .. }
                | Event::KeyDown {
                    keycode: Some(Keycode::Escape),
                    ..
                } => game.terminate(),

                Event::KeyDown { keycode, .. } => {
                    let offset = match keycode.unwrap() {
                        Keycode::W | Keycode::Up => (0, 5),
                        Keycode::S | Keycode::Down => (0, -5),
                        Keycode::A | Keycode::Left => (5, 0),
                        Keycode::D | Keycode::Right => (-5, 0),
                        _ => (0, 0),
                    };

                    s.translate(offset);
                }
                _ => {}
            }
        }

        s.draw(canvas).unwrap();
    })
    .unwrap();
}