Added hitboxes and something for the bugs to run into
[bug-basher.git] / src / main.rs
index ff8b64f..9ba7474 100644 (file)
@@ -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<Bug>,
+    home: Home,
     points: i64
 }
 
@@ -27,6 +32,10 @@ impl App<AssetId> 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<AssetId> for BugBasherGame {
     fn input(&mut self, evt: InputEvent, _audio: &mut Audio<AssetId>) -> 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<AssetId> 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),