ants/src/main.rs

61 lines
1.3 KiB
Rust
Raw Normal View History

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()
}
2021-10-03 10:19:24 +00:00
}
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<Ant> {
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
}
}