diff --git a/fast.png b/assets/fast.png similarity index 100% rename from fast.png rename to assets/fast.png diff --git a/pause.png b/assets/pause.png similarity index 100% rename from pause.png rename to assets/pause.png diff --git a/play.png b/assets/play.png similarity index 100% rename from play.png rename to assets/play.png diff --git a/restart.png b/assets/restart.png similarity index 100% rename from restart.png rename to assets/restart.png diff --git a/assets/slow.png b/assets/slow.png new file mode 100644 index 0000000..80fad0d Binary files /dev/null and b/assets/slow.png differ diff --git a/src/main.rs b/src/main.rs index b45179f..b9c029a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -29,10 +29,11 @@ fn window_conf() -> Conf { #[macroquad::main(window_conf)] async fn main() { rand::srand(macroquad::miniquad::date::now() as _); - let pause = load_texture("pause.png").await.unwrap(); - let play = load_texture("play.png").await.unwrap(); - let fast = load_texture("fast.png").await.unwrap(); - let restart = load_texture("restart.png").await.unwrap(); + let pause = load_texture("assets/pause.png").await.unwrap(); + let play = load_texture("assets/play.png").await.unwrap(); + let fast = load_texture("assets/fast.png").await.unwrap(); + let slow = load_texture("assets/slow.png").await.unwrap(); + let restart = load_texture("assets/restart.png").await.unwrap(); let th = (screen_height() - HEIGHT) * 0.5; let gamecam = Camera2D { @@ -57,10 +58,9 @@ async fn main() { ..Default::default() }; - let mut speedup = false; + let mut speedup = 1; let mut paused = false; let mut bias = false; - let mut showall = false; let mut size = 100; let mut pop = Population::new(size as usize); @@ -127,20 +127,15 @@ async fn main() { clear_background(BLACK); set_camera(&gamecam); if is_key_pressed(KeyCode::S) { - speedup = !speedup; + speedup = (speedup * 10) % 9999; + println!("Speedup: {}", speedup); } - if speedup { - if !paused { - for _ in 0..1000 { - pop.update(); - } - } - } else { - if !paused { + if !paused { + for _ in 0..speedup { pop.update(); } - pop.draw(); } + pop.draw(); draw_rectangle_lines(-WIDTH * 0.5, -HEIGHT * 0.5, WIDTH, HEIGHT, 2., WHITE); draw_rectangle_lines( WIDTH * 0.5 + th, @@ -182,9 +177,9 @@ async fn main() { .position(Vec2::new(0., 0.)) .ui(ui, |ui| { ui.label(None, &format!("Generation: {}", pop.gen)); - ui.same_line(314.); + ui.same_line(242.); if widgets::Button::new("Load Model").ui(ui) { - if let Some(path) = open_file_dialog("Load Model", "brain.json", None) { + if let Some(path) = open_file_dialog("Load Model", "model.json", None) { let brain = NN::import(&path); size = 1; pop = Population::new(1); @@ -193,13 +188,21 @@ async fn main() { } ui.same_line(0.); if widgets::Button::new("Save Model").ui(ui) { - if let Some(path) = save_file_dialog("Save Model", "brain.json") { + if let Some(path) = save_file_dialog("Save Model", "model.json") { pop.worlds[0].export_brain(&path); } } ui.same_line(0.); + if widgets::Button::new(slow).ui(ui) { + speedup = std::cmp::max(speedup / 10, 1); + }; + ui.same_line(0.); + if widgets::Button::new("1x").ui(ui) { + speedup = 1; + }; + ui.same_line(0.); if widgets::Button::new(fast).ui(ui) { - speedup = !speedup; + speedup = std::cmp::min(speedup * 10, 1000); }; ui.same_line(0.); if widgets::Button::new(if paused { play } else { pause }).ui(ui) { diff --git a/src/nn.rs b/src/nn.rs index 740436c..44b9365 100644 --- a/src/nn.rs +++ b/src/nn.rs @@ -99,7 +99,7 @@ impl NN { let width = width * 0.8; let height = height * 0.8; let vspace = height / (self.config.iter().max().unwrap() - 1) as f32; - let mut p1s: Vec<(f32, f32)> = Vec::new(); + let mut p1s: Vec<(f32, f32)>; let mut p2s: Vec<(f32, f32)> = Vec::new(); for (i, layer) in self .config diff --git a/src/player.rs b/src/player.rs index 23094e8..60f0e93 100644 --- a/src/player.rs +++ b/src/player.rs @@ -1,4 +1,4 @@ -use std::{f32::consts::PI, f64::consts::TAU, iter}; +use std::{f32::consts::PI, f64::consts::TAU}; use macroquad::{prelude::*, rand::gen_range};