2022-03-13 13:21:13 -05:00
|
|
|
# cat-box
|
2022-03-11 15:29:53 -06:00
|
|
|
|
2022-03-29 13:32:09 -05:00
|
|
|
Work in progress game engine, inspired by [arcade](https://arcade.academy/).
|
2022-03-11 15:29:53 -06:00
|
|
|
|
|
|
|
```rs
|
2022-03-13 13:21:13 -05:00
|
|
|
use cat_box::{Event, Game, Keycode, Sprite};
|
2022-03-11 15:29:53 -06:00
|
|
|
|
|
|
|
fn main() {
|
2022-03-13 13:21:13 -05:00
|
|
|
let game = Game::new("cat-box demo", 1000, 800);
|
2022-03-11 15:29:53 -06:00
|
|
|
|
2022-03-29 13:32:09 -05:00
|
|
|
let mut i = 0u8;
|
2022-03-11 15:29:53 -06:00
|
|
|
let mut s = Sprite::new("duck.png", 500, 400).unwrap();
|
2022-03-16 11:53:26 -05:00
|
|
|
game.run(|ctx, event_pump| {
|
2022-03-29 13:32:09 -05:00
|
|
|
i = (i + 1) % 255;
|
2022-03-16 12:01:38 -05:00
|
|
|
ctx.set_background_colour(i as u8, 64, 255);
|
2022-03-11 15:29:53 -06:00
|
|
|
|
|
|
|
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),
|
2022-03-16 11:53:26 -05:00
|
|
|
Keycode::A | Keycode::Left => (-5, 0),
|
|
|
|
Keycode::D | Keycode::Right => (5, 0),
|
2022-03-11 15:29:53 -06:00
|
|
|
_ => (0, 0),
|
|
|
|
};
|
|
|
|
|
|
|
|
s.translate(offset);
|
|
|
|
}
|
|
|
|
_ => {}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-03-16 11:53:26 -05:00
|
|
|
s.draw(ctx).unwrap();
|
2022-03-11 15:29:53 -06:00
|
|
|
})
|
|
|
|
.unwrap();
|
|
|
|
}
|
2022-03-13 13:21:13 -05:00
|
|
|
```
|