option to hide grid and marble direction/value
This commit is contained in:
parent
5b1b923c73
commit
59aeeff5b6
3 changed files with 59 additions and 24 deletions
|
@ -17,7 +17,7 @@ use crate::{
|
||||||
tile::{Claim, Direction, GateType, MathOp, MirrorType, OpenTile, PTile, Tile, WireType},
|
tile::{Claim, Direction, GateType, MathOp, MirrorType, OpenTile, PTile, Tile, WireType},
|
||||||
Machine,
|
Machine,
|
||||||
},
|
},
|
||||||
simple_button, simple_option_button, slider,
|
simple_button, simple_option_button, simple_toggle_button, slider,
|
||||||
solution::{Score, Solution},
|
solution::{Score, Solution},
|
||||||
text_input, texture_option_button,
|
text_input, texture_option_button,
|
||||||
theme::*,
|
theme::*,
|
||||||
|
@ -65,6 +65,7 @@ pub struct Editor {
|
||||||
max_step_time: u128,
|
max_step_time: u128,
|
||||||
start_time: Instant,
|
start_time: Instant,
|
||||||
pasting_board: Option<Board>,
|
pasting_board: Option<Board>,
|
||||||
|
draw_overlay: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, PartialEq)]
|
#[derive(Debug, PartialEq)]
|
||||||
|
@ -144,6 +145,7 @@ impl Editor {
|
||||||
max_step_time: 0,
|
max_step_time: 0,
|
||||||
start_time: Instant::now(),
|
start_time: Instant::now(),
|
||||||
pasting_board: None,
|
pasting_board: None,
|
||||||
|
draw_overlay: true,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -192,9 +194,7 @@ impl Editor {
|
||||||
if self.popup != EndPopup::None {
|
if self.popup != EndPopup::None {
|
||||||
self.popup = EndPopup::Dismissed;
|
self.popup = EndPopup::Dismissed;
|
||||||
}
|
}
|
||||||
if !self.level.outputs().is_empty()
|
if !self.level.outputs().is_empty() && self.popup == EndPopup::None {
|
||||||
&& self.popup == EndPopup::None
|
|
||||||
{
|
|
||||||
if self.level.outputs() == self.machine.output() {
|
if self.level.outputs() == self.machine.output() {
|
||||||
self.popup = EndPopup::Success;
|
self.popup = EndPopup::Success;
|
||||||
println!("completed in {:?}", self.start_time.elapsed());
|
println!("completed in {:?}", self.start_time.elapsed());
|
||||||
|
@ -432,28 +432,32 @@ impl Editor {
|
||||||
self.machine
|
self.machine
|
||||||
.board()
|
.board()
|
||||||
.draw(d, textures, self.view_offset, self.zoom);
|
.draw(d, textures, self.view_offset, self.zoom);
|
||||||
self.machine
|
if self.draw_overlay {
|
||||||
.draw_marble_values(d, textures, self.view_offset, self.zoom);
|
self.machine
|
||||||
|
.draw_marble_values(d, textures, self.view_offset, self.zoom);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn draw(&mut self, d: &mut RaylibDrawHandle, textures: &Textures) {
|
pub fn draw(&mut self, d: &mut RaylibDrawHandle, textures: &Textures) {
|
||||||
d.clear_background(Color::new(64, 64, 64, 255));
|
d.clear_background(Color::new(64, 64, 64, 255));
|
||||||
|
|
||||||
let tile_size = (16 << self.zoom) as f32;
|
if self.draw_overlay {
|
||||||
let grid_spill_x = (self.view_offset.x).rem(tile_size) - tile_size;
|
let tile_size = (16 << self.zoom) as f32;
|
||||||
let grid_spill_y = (self.view_offset.y).rem(tile_size) - tile_size;
|
let grid_spill_x = (self.view_offset.x).rem(tile_size) - tile_size;
|
||||||
d.gui_grid(
|
let grid_spill_y = (self.view_offset.y).rem(tile_size) - tile_size;
|
||||||
Rectangle::new(
|
d.gui_grid(
|
||||||
grid_spill_x,
|
Rectangle::new(
|
||||||
grid_spill_y,
|
grid_spill_x,
|
||||||
d.get_screen_width() as f32 * 2.,
|
grid_spill_y,
|
||||||
d.get_screen_height() as f32 * 2.,
|
d.get_screen_width() as f32 * 2.,
|
||||||
),
|
d.get_screen_height() as f32 * 2.,
|
||||||
None,
|
),
|
||||||
tile_size,
|
None,
|
||||||
1,
|
tile_size,
|
||||||
);
|
1,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
self.draw_board(d, textures);
|
self.draw_board(d, textures);
|
||||||
self.board_overlay(d, textures);
|
self.board_overlay(d, textures);
|
||||||
|
@ -592,6 +596,8 @@ impl Editor {
|
||||||
d.draw_text("save", 90, 10, 20, Color::WHITE);
|
d.draw_text("save", 90, 10, 20, Color::WHITE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
simple_toggle_button(d, &mut self.draw_overlay, 235, 4, 20, 32, 4);
|
||||||
|
|
||||||
match self.sim_state {
|
match self.sim_state {
|
||||||
SimState::Editing => {
|
SimState::Editing => {
|
||||||
if simple_button(d, 260, 4, 32, 32) {
|
if simple_button(d, 260, 4, 32, 32) {
|
||||||
|
|
|
@ -57,10 +57,7 @@ impl Solution {
|
||||||
|
|
||||||
pub fn score_text(&self) -> String {
|
pub fn score_text(&self) -> String {
|
||||||
if let Some(score) = &self.score {
|
if let Some(score) = &self.score {
|
||||||
format!(
|
format!("C: {} T: {}", score.cycles, score.tiles)
|
||||||
"C: {} T: {}",
|
|
||||||
score.cycles, score.tiles
|
|
||||||
)
|
|
||||||
} else {
|
} else {
|
||||||
"unsolved".into()
|
"unsolved".into()
|
||||||
}
|
}
|
||||||
|
|
32
src/util.rs
32
src/util.rs
|
@ -44,6 +44,38 @@ pub fn simple_button(d: &mut RaylibDrawHandle, x: i32, y: i32, width: i32, heigh
|
||||||
pressed
|
pressed
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn simple_toggle_button(
|
||||||
|
d: &mut RaylibDrawHandle,
|
||||||
|
state: &mut bool,
|
||||||
|
x: i32,
|
||||||
|
y: i32,
|
||||||
|
width: i32,
|
||||||
|
height: i32,
|
||||||
|
margin: i32,
|
||||||
|
) {
|
||||||
|
let mouse_pos = d.get_mouse_position();
|
||||||
|
let bounds = Rectangle {
|
||||||
|
x: x as f32,
|
||||||
|
y: y as f32,
|
||||||
|
width: width as f32,
|
||||||
|
height: height as f32,
|
||||||
|
};
|
||||||
|
let hover = bounds.check_collision_point_rec(mouse_pos);
|
||||||
|
d.draw_rectangle(x, y, width, height, widget_bg(hover));
|
||||||
|
if *state {
|
||||||
|
d.draw_rectangle(
|
||||||
|
x + margin,
|
||||||
|
y + margin,
|
||||||
|
width - margin * 2,
|
||||||
|
height - margin * 2,
|
||||||
|
BG_DARK,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if hover && d.is_mouse_button_pressed(MouseButton::MOUSE_BUTTON_LEFT) {
|
||||||
|
*state = !*state;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn simple_option_button<T>(
|
pub fn simple_option_button<T>(
|
||||||
d: &mut RaylibDrawHandle,
|
d: &mut RaylibDrawHandle,
|
||||||
x: i32,
|
x: i32,
|
||||||
|
|
Loading…
Reference in a new issue