diff --git a/src/lib.rs b/src/lib.rs index c83b1fc..a90f1b6 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -21,32 +21,44 @@ use sprite::*; pub struct Game { scene: Scene>, player: Hero, - star: Star, + stars: Vec, diag: bool, + victory: bool, } impl Game { pub fn new(w: &mut PistonWindow) -> Game { let mut scene = Scene::new(); - let star = Star::new(w, &mut scene); + let mut stars: Vec = vec![]; + for _ in 1..5 { + stars.push(Star::new(w, &mut scene)); + } let player = Hero::new(w, &mut scene); Game { scene: scene, player: player, - star: star, + stars: stars, diag: false, + victory: false, } } pub fn on_update(&mut self, e: &Input, upd: UpdateArgs, w: &PistonWindow) { self.scene.event(e); - if !self.star.destroyed && self.player.collides(&self.star) { - self.star.destroy(&mut self.scene, upd.dt); - self.player.grow(&mut self.scene, upd.dt); + for mut star in &mut self.stars { + if !star.destroyed && self.player.collides(&star) { + star.destroy(&mut self.scene, upd.dt); + self.player.grow(&mut self.scene, upd.dt); + } else { + star.mov(w, &mut self.scene, upd.dt); + } } - self.star.mov(w, &mut self.scene, upd.dt); + if self.stars.iter().all(|star| star.destroyed) { + self.victory = true; + return; + } self.player.mov(w, &mut self.scene, upd.dt); } @@ -72,9 +84,19 @@ impl Game { image.draw(&bg, &Default::default(), c.transform.trans(x, y).zoom(0.1), g); } + if self.victory { + text::Text::new_color([0.0, 1.0, 0.0, 1.0], 24).draw( + "Hurray! You win!", + &mut glyphs, + &c.draw_state, + c.transform.trans(200.0, 240.0), g + ); + return; + } + if self.diag { text::Text::new_color([0.0, 1.0, 0.0, 1.0], 10).draw( - &format!("{} {}", self.player.diag(), self.star.diag()), + &format!("{}", self.player.diag()), &mut glyphs, &c.draw_state, c.transform.trans(10.0, 10.0), g diff --git a/src/mobs/star.rs b/src/mobs/star.rs index 4621542..7886a0f 100644 --- a/src/mobs/star.rs +++ b/src/mobs/star.rs @@ -76,11 +76,6 @@ impl Star { scene.run(self.sprite_id, &Action(Ease(EaseFunction::CubicOut, Box::new(FadeOut(dt * 0.75))))); self.destroyed = true; } - - - pub fn diag(&self) -> String { - format!("{}: x {} / y {}", self.sprite_id, self.x.trunc(), self.y.trunc()) - } } fn rand_dir() -> u32 {