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
}
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
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;
}
},
_ => {}
}
{
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),
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),