summaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs19
1 files changed, 17 insertions, 2 deletions
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<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),