use macroquad::prelude::*; use std::f32::consts::PI; fn window_conf() -> Conf { Conf { window_title: "Ants".to_string(), fullscreen: false, window_width: 1280, window_height: 720, ..Default::default() } } static ANT_SPEED: f32 = 20.; struct Ant { pos: Vec2, dir: f32, } impl Ant { fn walk(&mut self) { let acceleration = Vec2::new(self.dir.sin(), -self.dir.cos()); self.pos += acceleration * ANT_SPEED * get_frame_time(); } fn draw(&self) { draw_circle(self.pos.x, self.pos.y, 1., WHITE); } } fn init_ants(num_ants: i32) -> Vec { let dir_steps = PI * 2. / num_ants as f32; (0..num_ants) .into_iter() .map(|n| Ant { pos: Vec2::new(400., 200.), dir: n as f32 * dir_steps, }) .collect() } #[macroquad::main(window_conf)] async fn main() { let map = load_texture("map_scaled.png").await.unwrap(); let mut ants = init_ants(16); loop { // actions ants.iter_mut().for_each(|ant| ant.walk()); if is_key_down(KeyCode::Escape) || is_quit_requested() { return; } // render clear_background(BEIGE); draw_texture(map, 0., 0., WHITE); ants.iter().for_each(|ant| ant.draw()); next_frame().await } }