2022-11-06 21:44:59 +00:00
|
|
|
#![feature(generators, generator_trait)]
|
|
|
|
mod BarPlugin;
|
|
|
|
mod GuiHookVec;
|
|
|
|
mod Algorithm;
|
|
|
|
|
|
|
|
|
|
|
|
use std::pin::Pin;
|
|
|
|
use macroquad::prelude::*;
|
|
|
|
use macroquad::prelude::scene::clear;
|
|
|
|
use crate::BarPlugin::Bar;
|
|
|
|
use crate::GuiHookVec::GuiVec;
|
2022-11-07 00:21:18 +00:00
|
|
|
|
2022-11-06 21:44:59 +00:00
|
|
|
use std::ops::{Generator, GeneratorState};
|
|
|
|
|
2022-11-06 22:10:16 +00:00
|
|
|
|
2022-11-06 21:44:59 +00:00
|
|
|
const BAR_WIDTH:f32 = 10.0;
|
|
|
|
#[macroquad::main("BeepSort")]
|
|
|
|
async fn main() {
|
2022-11-07 00:44:35 +00:00
|
|
|
let mut gui_vec = GuiVec::new(5);
|
2022-11-06 21:44:59 +00:00
|
|
|
gui_vec.randomize();
|
|
|
|
let mut lasttime:f64 = 0.;
|
|
|
|
let mut holder = gui_vec.clone();
|
2022-11-07 00:44:35 +00:00
|
|
|
let mut generator = Algorithm::Algorithm::bogoSort(&mut gui_vec);
|
2022-11-06 21:44:59 +00:00
|
|
|
let mut finished = false;
|
2022-11-07 00:21:18 +00:00
|
|
|
let timeout = 0.000001;
|
2022-11-06 21:44:59 +00:00
|
|
|
|
|
|
|
loop {
|
2022-11-07 00:21:18 +00:00
|
|
|
|
|
|
|
clear_background(WHITE);
|
|
|
|
if get_time()-lasttime > timeout && !finished{
|
2022-11-06 21:44:59 +00:00
|
|
|
match Pin::new(& mut generator).resume(()){
|
|
|
|
GeneratorState::Yielded(x) => {
|
|
|
|
holder = x.clone();
|
|
|
|
},
|
|
|
|
GeneratorState::Complete(x) => {
|
|
|
|
finished = true;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
lasttime = get_time();
|
|
|
|
}
|
2022-11-07 00:21:18 +00:00
|
|
|
draw_text(format!("Read: {}", holder.reads).as_str(), screen_width()*0.1, screen_height()-100.0, 20.0, BLACK);
|
|
|
|
draw_text(format!("Write: {}", holder.writes).as_str(), screen_width()*0.1, screen_height()-80.0, 20.0, BLACK);
|
|
|
|
draw_text(format!("Comparisons: {}", holder.comps).as_str(), screen_width()*0.1, screen_height()-60.0, 20.0, BLACK);
|
|
|
|
draw_text(format!("FPS: {}", get_fps()).as_str(), screen_width()*0.1, screen_height()-40., 20.0, BLACK);
|
2022-11-06 21:44:59 +00:00
|
|
|
holder.draw();
|
|
|
|
next_frame().await
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|