From 4dccf6a313908a5d63ba01b375804e9ebef4687e Mon Sep 17 00:00:00 2001 From: Charles Cabergs Date: Tue, 25 Aug 2020 18:39:33 +0200 Subject: Added Vector2 for direction, steering behavior gut draft not working --- src/main.rs | 34 +++++++++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 5 deletions(-) (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs index 4c6ce8f..2c633cc 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,21 +1,39 @@ extern crate sdl2; +extern crate rand; use sdl2::event::Event; use sdl2::keyboard::Keycode; use sdl2::pixels::Color; -use sdl2::rect::Point; +use rand::Rng; + +pub mod vector2; pub mod boid; use boid::Boid; +const HEIGHT: i32 = 480; +const WIDTH: i32 = 640; +const BOIDS_NUM: usize = 100; +// const NEIGHBOURS_RADIUS: i32 = ((HEIGHT + WIDTH) / 2) / 10; + fn main() { let sdl = sdl2::init().unwrap(); let video_subsys = sdl.video().unwrap(); - let window = video_subsys.window("boids", 640, 480).build().unwrap(); + let window = video_subsys.window("boids", WIDTH as u32, HEIGHT as u32).build().unwrap(); let mut canvas = window.into_canvas().build().unwrap(); - let mut b = Boid::new(Point::new(50, 50)); + let mut boids: Vec = Vec::with_capacity(BOIDS_NUM); + + let mut rng = rand::thread_rng(); + for _ in 0..BOIDS_NUM { + boids.push(Boid::new( + rng.gen_range(0, WIDTH as i32), + rng.gen_range(0, HEIGHT as i32), + rng.gen_range(-2.0, 2.0), + rng.gen_range(-2.0, 2.0), + )); + } let mut event_pump = sdl.event_pump().unwrap(); 'main: loop { @@ -31,11 +49,17 @@ fn main() { canvas.set_draw_color(Color::RGB(0, 0, 0)); canvas.clear(); canvas.set_draw_color(Color::RGB(200, 200, 200)); - b.draw(&mut canvas); + for b in boids.iter() { + b.draw(&mut canvas); + } canvas.present(); - b.step(); + let prev_boids = boids.clone(); + + for b in boids.iter_mut() { + b.step(&prev_boids, WIDTH, HEIGHT); + } std::thread::sleep(std::time::Duration::new(0, 50_000_000)); } -- cgit