From 69b8c5ee0cecfd4860b8fe4df308e0dbe8a4a16d Mon Sep 17 00:00:00 2001 From: Thomas Gideon Date: Thu, 13 Jul 2017 17:03:56 -0400 Subject: [PATCH] Add naive random walk for star candy --- src/mobs/star.rs | 47 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/src/mobs/star.rs b/src/mobs/star.rs index ed65061..4bf62f1 100644 --- a/src/mobs/star.rs +++ b/src/mobs/star.rs @@ -15,6 +15,7 @@ pub struct Star { pub y: f64, w: f64, h: f64, + dir: u32, } impl Star { @@ -38,6 +39,7 @@ impl Star { w: bounds[2], h: bounds[3], sprite_id: sprite_id, + dir: rand_dir(), } } @@ -55,8 +57,49 @@ impl Star { sprite.set_position(self.x, self.y); } } - let mov_x = rand::random::() * 0.5; - let mov_y = rand::random::() * 0.5; + self.dir = rand_turn(self.dir); + let dir = lookup_dir(self.dir); + let mov_x = 2.0 * dir.0; + let mov_y = 2.0 * dir.1; scene.run(self.sprite_id, &Action(Ease(EaseFunction::CubicOut, Box::new(MoveBy(dt * 0.75, mov_x, mov_y))))); } } + +fn rand_dir() -> u32 { + rand::random::() % 8 +} + +fn rand_turn(dir: u32) -> u32 { + let coin = rand::random::() % 10; + match coin { + -9 => { + if dir == 0 { + 7 + } else { + dir - 1 + } + } + 9 => { + if dir == 7 { + 0 + } else { + dir + 1 + } + } + _ => dir, + } +} + +fn lookup_dir(dir: u32) -> (f64, f64) { + match dir { + 0 => (0.0, -1.0), + 1 => (1.0, -1.0), + 2 => (1.0, 0.0), + 3 => (1.0, 1.0), + 4 => (0.0, 1.0), + 5 => (-1.0, 1.0), + 6 => (-1.0, 0.0), + 7 => (-1.0, -1.0), + _ => (0.0, 0.0), + } +}