extern crate macroquad; mod ant; mod constants; mod food; use crate::ant::Ant; use constants::{MAP_HEIGHT, MAP_WIDTH}; use macroquad::prelude::*; fn window_conf() -> Conf { Conf { window_title: "Ants".to_string(), fullscreen: false, window_width: MAP_WIDTH as i32, window_height: MAP_HEIGHT as i32, ..Default::default() } } trait Drawable { fn draw(&self); } #[macroquad::main(window_conf)] async fn main() { //let map = load_texture("map_scaled.png").await.unwrap(); let mut trail_map = Image::gen_image_color(MAP_WIDTH as u16, MAP_HEIGHT as u16, BLACK); let mut ants = Ant::init(1024); loop { // fade trails (doesnt really work) let frame_time = get_frame_time(); for x in 0..MAP_WIDTH { for y in 0..MAP_HEIGHT { let mut current_pixel = trail_map.get_pixel(x, y); current_pixel.r -= 0.1 * frame_time; current_pixel.g -= 0.1 * frame_time; current_pixel.b -= 0.1 * frame_time; trail_map.set_pixel(x, y, current_pixel); } } // actions ants.iter_mut() .for_each(|ant| ant.walk(frame_time, &mut trail_map)); if is_key_down(KeyCode::Escape) || is_quit_requested() { return; } if is_mouse_button_down(MouseButton::Left) { let mouse = mouse_position(); dbg!(&mouse); //food.push(Food::new(Vec2::new(mouse.0, mouse.1))); } // render clear_background(BLACK); let texture = Texture2D::from_image(&trail_map); draw_texture(texture, 0., 0., WHITE); ants.iter().for_each(|ant| ant.draw()); next_frame().await } }