main loop improvement, should probably add some form of state
This commit is contained in:
parent
671f650d55
commit
dded57b568
2 changed files with 59 additions and 66 deletions
|
@ -16,7 +16,7 @@ pub struct Algorithm{
|
|||
impl Algorithm{
|
||||
|
||||
pub async fn run(length:i32, delay:f32, functionName:String){
|
||||
let mut list = GuiVec::new(screen_width(), screen_height(), length, delay);
|
||||
let mut list = GuiVec::new(length, delay);
|
||||
list.randomize();
|
||||
|
||||
match functionName.as_str() {
|
||||
|
|
|
@ -4,10 +4,11 @@ use std::ops::Add;
|
|||
use std::path::Iter;
|
||||
use macroquad::color::{BROWN, WHITE};
|
||||
use macroquad::hash;
|
||||
use macroquad::prelude::{clear_background, Vec2};
|
||||
use macroquad::prelude::{clear_background, Vec2, BLACK};
|
||||
use macroquad::rand::ChooseRandom;
|
||||
use macroquad::shapes::draw_rectangle;
|
||||
use macroquad::time::get_frame_time;
|
||||
use macroquad::text::draw_text;
|
||||
use macroquad::time::{get_frame_time, get_fps};
|
||||
use macroquad::ui::root_ui;
|
||||
use macroquad::window::{next_frame, screen_height, screen_width};
|
||||
use crate::BarPlugin::Bar;
|
||||
|
@ -23,17 +24,17 @@ pub struct GuiVec{
|
|||
pub reads:i32,
|
||||
pub writes:i32,
|
||||
pub comps:i32,
|
||||
screen_height:f32,
|
||||
screen_width:f32,
|
||||
isPaused:bool,
|
||||
delay:f32,
|
||||
pub done:bool
|
||||
pub done:bool,
|
||||
renderSkip:i32,
|
||||
skipped:i32
|
||||
|
||||
}
|
||||
|
||||
impl GuiVec{
|
||||
|
||||
pub fn new(screen_width:f32, screen_height:f32,length:i32, delay:f32) -> Self {
|
||||
pub fn new(length:i32, delay:f32) -> Self {
|
||||
let colorStep = 360./length as f32;
|
||||
let mut list:Vec<Bar> = vec!();
|
||||
for i in 1..length+1 {
|
||||
|
@ -46,17 +47,18 @@ impl GuiVec{
|
|||
reads:0,
|
||||
writes:0,
|
||||
comps:0,
|
||||
screen_height,
|
||||
screen_width,
|
||||
isPaused:false,
|
||||
delay,
|
||||
done:false
|
||||
done:false,
|
||||
renderSkip:1,
|
||||
skipped:0
|
||||
}
|
||||
}
|
||||
|
||||
pub async fn draw(&mut self){
|
||||
let mut frames = 0.0;
|
||||
let mut delayText = self.delay.to_string();
|
||||
let mut renderSkipText = self.renderSkip.to_string();
|
||||
|
||||
loop {
|
||||
|
||||
|
@ -67,72 +69,63 @@ impl GuiVec{
|
|||
}
|
||||
|
||||
*/
|
||||
if self.skipped >= self.renderSkip{
|
||||
clear_background(WHITE);
|
||||
|
||||
clear_background(WHITE);
|
||||
|
||||
for (count,bar) in self.list.iter().enumerate(){
|
||||
draw_rectangle(screen_width() * ((count as f32)/(self.initialSize as f32)),screen_height() - (screen_height()/((self.len()) as f32))*bar.position as f32 , screen_width()/((self.len()) as f32), (screen_height()/((self.len()) as f32))*bar.position as f32, bar.color);
|
||||
|
||||
}
|
||||
|
||||
|
||||
root_ui().window(hash!(), Vec2::new(screen_width()*0.2, 5.), Vec2::new(200., 25.), |ui|{
|
||||
ui.input_text(hash!(), "Delay (ms)", &mut delayText);
|
||||
|
||||
});
|
||||
|
||||
if root_ui().button(Vec2::new(screen_width()*0.2, 25.), "Exit"){
|
||||
self.done = true;
|
||||
break;
|
||||
}
|
||||
|
||||
self.delay = match delayText.parse::<f32>(){
|
||||
Ok(a) => a,
|
||||
Err(_)=> {f32::MAX}
|
||||
};
|
||||
|
||||
|
||||
next_frame().await;
|
||||
|
||||
if frames >= self.delay/10000.0 && !self.done{
|
||||
break;
|
||||
}
|
||||
frames += get_frame_time();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
fn checkPaused(&mut self){
|
||||
if root_ui().button(Vec2::new(screen_width()*0.01, 90.), "Pause"){
|
||||
if self.isPaused {
|
||||
self.isPaused = false;
|
||||
for (count,bar) in self.list.iter().enumerate(){
|
||||
draw_rectangle(screen_width() * ((count as f32)/(self.initialSize as f32)),screen_height() - (screen_height()/((self.len()) as f32))*bar.position as f32 , screen_width()/((self.len()) as f32), (screen_height()/((self.len()) as f32))*bar.position as f32, bar.color);
|
||||
|
||||
}
|
||||
|
||||
draw_text(&format!("FPS: {}", get_fps()), screen_width()*0.01 + 40., 80.0, 20.0, BLACK);
|
||||
draw_text(&format!("Array reads: {}", self.reads), screen_width()*0.01 + 40., 110.0, 20.0, BLACK);
|
||||
draw_text(&format!("Array writes: {}", self.writes), screen_width()*0.01 + 40., 140.0, 20.0, BLACK);
|
||||
draw_text(&format!("Comparisons: {}", self.comps), screen_width()*0.01 + 40., 170.0, 20.0, BLACK);
|
||||
|
||||
root_ui().window(hash!(),Vec2::new(screen_width()*0.01, 5.), Vec2::new(800.0, 50.), |ui|{
|
||||
ui.input_text(hash!(), "Delay (ms)", &mut delayText);
|
||||
ui.input_text(hash!(), "StepsPrFrame (How many steps of the algorithm pr frame)", &mut renderSkipText);
|
||||
|
||||
});
|
||||
|
||||
if root_ui().button(Vec2::new(screen_width()*0.01, 60.), "Exit"){
|
||||
self.done = true;
|
||||
break;
|
||||
}
|
||||
if root_ui().button(Vec2::new(screen_width()*0.01, 90.), "Pause"){
|
||||
self.isPaused = !self.isPaused;
|
||||
|
||||
}
|
||||
self.renderSkip = match renderSkipText.parse::<i32>(){
|
||||
Ok(a) => a,
|
||||
Err(_) => 1
|
||||
};
|
||||
|
||||
self.delay = match (delayText.parse::<f32>(), self.isPaused){
|
||||
(_, true) => f32::MAX,
|
||||
(Ok(a), false) => a,
|
||||
(Err(_), _)=> {f32::MAX}
|
||||
};
|
||||
|
||||
next_frame().await;
|
||||
self.skipped = 0;
|
||||
}else{
|
||||
self.isPaused = true;
|
||||
self.skipped += 1;
|
||||
}
|
||||
|
||||
if frames >= self.delay && !self.done{
|
||||
break;
|
||||
}
|
||||
frames += get_frame_time()* 1000.;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
pub fn resize(&mut self, length:i32){
|
||||
self.list = GuiVec::new(self.screen_width, self.screen_height,length, self.delay).list;
|
||||
}
|
||||
|
||||
pub fn len(&self) -> usize{
|
||||
self.list.len()
|
||||
}
|
||||
|
||||
pub fn pop(&mut self) -> Bar {
|
||||
self.list.pop().unwrap()
|
||||
}
|
||||
|
||||
pub fn insert(&mut self, index:usize, element: Bar){
|
||||
self.list.insert(index, element)
|
||||
}
|
||||
|
||||
pub fn delete(&mut self, index:usize){
|
||||
self.writes += 1;
|
||||
self.list.remove(index);
|
||||
self.initialSize -= 1;
|
||||
}
|
||||
|
||||
pub async fn swap(&mut self, index1:usize, index2:usize) -> bool{
|
||||
self.writes += 2;
|
||||
self.reads += 2;
|
||||
|
|
Loading…
Reference in a new issue