From 3b2017b7f4e7d1c932b430fa515286a9ceaf1a92 Mon Sep 17 00:00:00 2001 From: Justin Worthe Date: Mon, 2 Apr 2018 15:36:01 +0200 Subject: Added hitboxes and something for the bugs to run into --- src/main.rs | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs index ff8b64f..9ba7474 100644 --- a/src/main.rs +++ b/src/main.rs @@ -11,11 +11,16 @@ use asset_id::*; mod geometry; use geometry::*; +mod hitbox; +use hitbox::*; + mod entities; use entities::bug::Bug; +use entities::home::Home; struct BugBasherGame { bugs: Vec, + home: Home, points: i64 } @@ -27,6 +32,10 @@ impl App for BugBasherGame { self.bugs.retain(|b| b.alive); for bug in self.bugs.iter_mut() { bug.advance(seconds); + if self.home.touches_circle(bug) { + bug.alive = false; + self.points -= 1; + } } true @@ -35,8 +44,9 @@ impl App for BugBasherGame { fn input(&mut self, evt: InputEvent, _audio: &mut Audio) -> bool { match evt { InputEvent::MousePressed(MouseButton::Left, x, y) => { - for bug in self.bugs.iter_mut() { - bug.click(Vec2d { x, y }); + for bug in self.bugs.iter_mut().filter(|bug| bug.touches_point(Vec2d { x, y })) { + bug.alive = false; + self.points += 1; } }, _ => {} @@ -73,6 +83,10 @@ impl App for BugBasherGame { } { let mut renderer = renderer.sprite_mode(); + renderer.draw( + &Affine::translate(self.home.pos.x, self.home.pos.y), + SpriteId::Home + ); for bug in &self.bugs { renderer.draw( &Affine::translate(bug.pos.x, bug.pos.y).pre_rotate(bug.rotation), @@ -89,6 +103,7 @@ impl BugBasherGame { fn main() { let info = AppInfo::with_app_height(1000.).title("Bug Basher").build(); gate::run(info, BugBasherGame { + home: Home::new(0., 0.), bugs: vec!( Bug::new(500., 200., 0.3), Bug::new(-200., -200., 1.5), -- cgit v1.2.3