2022-06-21 04:59:27 -05:00
|
|
|
#![warn(clippy::pedantic)]
|
|
|
|
|
2022-10-06 16:09:53 -05:00
|
|
|
use cat_box::{draw_text, get_keyboard_state, get_mouse_state, Game, Sprite, SpriteCollection};
|
2022-03-30 15:18:53 -05:00
|
|
|
use sdl2::keyboard::Scancode;
|
2022-03-06 13:07:49 -06:00
|
|
|
|
|
|
|
fn main() {
|
2022-03-06 13:19:04 -06:00
|
|
|
let game = Game::new("catbox demo", 1000, 800);
|
2022-03-06 13:07:49 -06:00
|
|
|
|
2022-03-29 11:36:51 -05:00
|
|
|
let mut i = 0u8;
|
2022-03-07 13:10:06 -06:00
|
|
|
let mut s = Sprite::new("duck.png", 500, 400).unwrap();
|
2022-03-15 11:04:18 -05:00
|
|
|
let mut s2 = Sprite::new("duck.png", 400, 500).unwrap();
|
2022-03-29 11:36:51 -05:00
|
|
|
|
2022-05-11 13:28:02 -05:00
|
|
|
let bytes = include_bytes!("../duck.png");
|
|
|
|
|
2022-03-29 11:36:51 -05:00
|
|
|
let mut coll = SpriteCollection::new();
|
|
|
|
for n in 0..10 {
|
|
|
|
for o in 0..8 {
|
2022-05-11 13:28:02 -05:00
|
|
|
let x = Sprite::from_bytes(bytes, n * 100, o * 100).unwrap();
|
2022-03-29 11:36:51 -05:00
|
|
|
coll.push(x);
|
|
|
|
}
|
2022-04-12 13:09:28 -05:00
|
|
|
}
|
2022-10-06 16:09:53 -05:00
|
|
|
#[cfg(feature = "audio")]
|
|
|
|
cat_box::play("output.mp3", 120);
|
2022-03-30 15:18:53 -05:00
|
|
|
game.run(|ctx| {
|
2022-03-29 11:36:51 -05:00
|
|
|
i = (i + 1) % 255;
|
2022-03-15 11:36:33 -05:00
|
|
|
ctx.set_background_colour(i as u8, 64, 255);
|
2022-03-09 11:37:10 -06:00
|
|
|
|
2022-03-16 11:54:51 -05:00
|
|
|
draw_text(
|
|
|
|
ctx,
|
|
|
|
format!("i is {}", i),
|
|
|
|
"MesloLGS NF Regular.ttf",
|
|
|
|
72,
|
|
|
|
(300, 300),
|
|
|
|
cat_box::TextMode::Shaded {
|
|
|
|
foreground: (255, 255, 255),
|
|
|
|
background: (0, 0, 0),
|
|
|
|
},
|
|
|
|
)
|
|
|
|
.unwrap();
|
2022-03-16 11:26:25 -05:00
|
|
|
|
2022-05-28 09:51:46 -05:00
|
|
|
let (start_x, start_y) = s.position().into();
|
2022-03-30 15:18:53 -05:00
|
|
|
let m = get_mouse_state(ctx);
|
|
|
|
let x_diff = m.x - start_x;
|
|
|
|
let y_diff = m.y - start_y;
|
2022-03-09 11:59:04 -06:00
|
|
|
|
2022-06-21 04:59:27 -05:00
|
|
|
let angle = f64::from(y_diff).atan2(f64::from(x_diff));
|
2022-03-09 11:59:41 -06:00
|
|
|
s.set_angle(angle.to_degrees());
|
2022-03-09 11:59:04 -06:00
|
|
|
|
2022-03-29 13:21:55 -05:00
|
|
|
for spr in coll.iter() {
|
2022-05-28 09:51:46 -05:00
|
|
|
let (start_x, start_y) = spr.position().into();
|
2022-03-30 15:18:53 -05:00
|
|
|
let m = get_mouse_state(ctx);
|
|
|
|
let x_diff = m.x - start_x;
|
|
|
|
let y_diff = m.y - start_y;
|
2022-03-29 11:36:51 -05:00
|
|
|
|
2022-06-21 04:59:27 -05:00
|
|
|
let angle = f64::from(y_diff).atan2(f64::from(x_diff));
|
2022-03-29 11:36:51 -05:00
|
|
|
spr.set_angle(angle.to_degrees());
|
|
|
|
}
|
|
|
|
|
2022-03-30 15:18:53 -05:00
|
|
|
let keys = get_keyboard_state(ctx).keys;
|
2022-03-07 12:58:02 -06:00
|
|
|
|
2022-03-30 15:18:53 -05:00
|
|
|
for key in keys {
|
|
|
|
let offset = match key {
|
|
|
|
Scancode::Escape => {
|
|
|
|
game.terminate();
|
|
|
|
(0, 0)
|
2022-04-12 13:09:28 -05:00
|
|
|
}
|
2022-03-30 15:18:53 -05:00
|
|
|
Scancode::W | Scancode::Up => (0, 5),
|
|
|
|
Scancode::S | Scancode::Down => (0, -5),
|
|
|
|
Scancode::A | Scancode::Left => (-5, 0),
|
|
|
|
Scancode::D | Scancode::Right => (5, 0),
|
|
|
|
_ => (0, 0),
|
|
|
|
};
|
2022-03-07 12:58:02 -06:00
|
|
|
|
2022-03-30 15:18:53 -05:00
|
|
|
s.translate(offset);
|
|
|
|
|
|
|
|
for spr in coll.iter() {
|
|
|
|
spr.translate(offset);
|
2022-03-06 13:07:49 -06:00
|
|
|
}
|
|
|
|
}
|
2022-03-09 11:59:41 -06:00
|
|
|
|
2022-04-12 13:09:28 -05:00
|
|
|
if !cat_box::physics::check_for_collision_with_collection(&s2, &coll).is_empty() {
|
|
|
|
println!("Sprites collided! {}", i);
|
|
|
|
}
|
|
|
|
|
2022-03-15 11:04:18 -05:00
|
|
|
s2.draw(ctx).unwrap();
|
2022-03-14 12:32:42 -05:00
|
|
|
s.draw(ctx).unwrap();
|
2022-03-29 11:36:51 -05:00
|
|
|
coll.draw(ctx).unwrap();
|
2022-03-06 13:08:05 -06:00
|
|
|
})
|
|
|
|
.unwrap();
|
|
|
|
}
|