show speed number and slider
This commit is contained in:
parent
038bf365c4
commit
92d540c29b
3 changed files with 38 additions and 5 deletions
|
@ -10,7 +10,7 @@ use crate::{
|
||||||
tile::{Direction, GateType, MathOp, MirrorType, PTile, Tile, WireType},
|
tile::{Direction, GateType, MathOp, MirrorType, PTile, Tile, WireType},
|
||||||
Machine,
|
Machine,
|
||||||
},
|
},
|
||||||
simple_button,
|
simple_button, slider,
|
||||||
solution::{Score, Solution},
|
solution::{Score, Solution},
|
||||||
text_input, texture_option_button, Textures,
|
text_input, texture_option_button, Textures,
|
||||||
};
|
};
|
||||||
|
@ -35,7 +35,7 @@ pub struct Editor {
|
||||||
tool_menu_mirror: MirrorType,
|
tool_menu_mirror: MirrorType,
|
||||||
tool_menu_wire: WireType,
|
tool_menu_wire: WireType,
|
||||||
input_text_selected: bool,
|
input_text_selected: bool,
|
||||||
sim_speed: f32,
|
sim_speed: u8,
|
||||||
time_since_step: f32,
|
time_since_step: f32,
|
||||||
exit_state: ExitState,
|
exit_state: ExitState,
|
||||||
exit_menu: bool,
|
exit_menu: bool,
|
||||||
|
@ -91,7 +91,7 @@ impl Editor {
|
||||||
output_as_text: false,
|
output_as_text: false,
|
||||||
input_as_text: false,
|
input_as_text: false,
|
||||||
input_text_selected: false,
|
input_text_selected: false,
|
||||||
sim_speed: 8.,
|
sim_speed: 8,
|
||||||
time_since_step: 0.,
|
time_since_step: 0.,
|
||||||
tool_menu_math: MathOp::Add,
|
tool_menu_math: MathOp::Add,
|
||||||
tool_menu_gate: GateType::Equal,
|
tool_menu_gate: GateType::Equal,
|
||||||
|
@ -217,7 +217,7 @@ impl Editor {
|
||||||
}
|
}
|
||||||
if self.sim_state == SimState::Running {
|
if self.sim_state == SimState::Running {
|
||||||
self.time_since_step += rl.get_frame_time();
|
self.time_since_step += rl.get_frame_time();
|
||||||
if self.time_since_step > 1. / self.sim_speed {
|
if self.time_since_step > 1. / self.sim_speed as f32 {
|
||||||
self.time_since_step = 0.;
|
self.time_since_step = 0.;
|
||||||
self.step();
|
self.step();
|
||||||
}
|
}
|
||||||
|
@ -419,7 +419,11 @@ impl Editor {
|
||||||
}
|
}
|
||||||
draw_scaled_texture(d, textures.get("step"), 332, 4, 2.);
|
draw_scaled_texture(d, textures.get("step"), 332, 4, 2.);
|
||||||
|
|
||||||
draw_usize(d, textures, self.machine.step_count(), 372, 4, 5, 2);
|
d.draw_text("speed", 368, 6, 10, Color::WHITE);
|
||||||
|
draw_usize(d, textures, self.sim_speed as usize, 398, 4, 2, 1);
|
||||||
|
slider(d, &mut self.sim_speed, 1, 33, 368, 24, 48, 12);
|
||||||
|
|
||||||
|
draw_usize(d, textures, self.machine.step_count(), 420, 4, 5, 2);
|
||||||
|
|
||||||
let mut input_text = String::from_utf8_lossy(self.machine.input()).to_string();
|
let mut input_text = String::from_utf8_lossy(self.machine.input()).to_string();
|
||||||
let width = d.get_screen_width();
|
let width = d.get_screen_width();
|
||||||
|
|
|
@ -189,6 +189,7 @@ impl Game {
|
||||||
|
|
||||||
if simple_button(d, level_list_width + 10, solution_y, entry_width, 30) {
|
if simple_button(d, level_list_width + 10, solution_y, entry_width, 30) {
|
||||||
let n = solutions.len();
|
let n = solutions.len();
|
||||||
|
self.selected_solution = solutions.len();
|
||||||
solutions.push(Solution::new(level, n));
|
solutions.push(Solution::new(level, n));
|
||||||
}
|
}
|
||||||
d.draw_text(
|
d.draw_text(
|
||||||
|
|
28
src/util.rs
28
src/util.rs
|
@ -215,6 +215,34 @@ pub fn draw_usize(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn slider(
|
||||||
|
d: &mut RaylibDrawHandle,
|
||||||
|
value: &mut u8,
|
||||||
|
min: u8,
|
||||||
|
max: u8,
|
||||||
|
x: i32,
|
||||||
|
y: i32,
|
||||||
|
width: i32,
|
||||||
|
height: i32,
|
||||||
|
) -> bool {
|
||||||
|
// the +1 makes the lowest state look slightly filled and the max state fully filled
|
||||||
|
let percent = (*value - min + 1) as f32 / (max - min) as f32;
|
||||||
|
d.draw_rectangle(x, y, width, height, Color::DIMGRAY);
|
||||||
|
d.draw_rectangle(x, y, (width as f32 * percent) as i32, height, Color::CYAN);
|
||||||
|
let mouse_pos = d.get_mouse_position();
|
||||||
|
let bounds = Rectangle::new(x as f32, y as f32, width as f32, height as f32);
|
||||||
|
if d.is_mouse_button_down(MouseButton::MOUSE_BUTTON_LEFT)
|
||||||
|
&& bounds.check_collision_point_rec(mouse_pos)
|
||||||
|
{
|
||||||
|
let percent = (mouse_pos.x - bounds.x) / bounds.width;
|
||||||
|
let new_value = min + (percent * (max - min) as f32) as u8;
|
||||||
|
if *value != new_value {
|
||||||
|
*value = new_value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
false
|
||||||
|
}
|
||||||
|
|
||||||
pub fn userdata_dir() -> PathBuf {
|
pub fn userdata_dir() -> PathBuf {
|
||||||
PathBuf::from("user")
|
PathBuf::from("user")
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue