edit solution names
This commit is contained in:
parent
ed5084d0fd
commit
44b7d63cde
2 changed files with 39 additions and 8 deletions
33
src/main.rs
33
src/main.rs
|
@ -24,6 +24,7 @@ struct Game {
|
|||
textures: Textures,
|
||||
selected_level: usize,
|
||||
selected_solution: usize,
|
||||
editing_solution_name: bool,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
|
@ -56,6 +57,7 @@ impl Game {
|
|||
textures,
|
||||
selected_level: 0,
|
||||
selected_solution: 0,
|
||||
editing_solution_name: false,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -73,7 +75,8 @@ impl Game {
|
|||
|
||||
fn draw(&mut self, d: &mut RaylibDrawHandle) {
|
||||
d.clear_background(Color::new(64, 64, 64, 255));
|
||||
let level_list_width = 320;
|
||||
// let level_list_width = 240;
|
||||
let level_list_width = d.get_screen_width() / 4; // woah! Reactive UI! so fancy
|
||||
let screen_height = d.get_screen_height();
|
||||
d.draw_rectangle(0, 0, level_list_width, screen_height, Color::GRAY);
|
||||
// let (a, b, c) = d.gui_scroll_panel(
|
||||
|
@ -103,6 +106,7 @@ impl Game {
|
|||
};
|
||||
if clicked && bounds.check_collision_point_rec(mouse_pos) && self.selected_level != i {
|
||||
self.selected_solution = 0;
|
||||
self.editing_solution_name = false;
|
||||
self.selected_level = i;
|
||||
}
|
||||
if self.selected_level == i {
|
||||
|
@ -130,16 +134,19 @@ impl Game {
|
|||
let mut y = 60;
|
||||
if let Some(solutions) = self.solutions.get_mut(level.id()) {
|
||||
let solution_entry_height = 40;
|
||||
let solution_entry_width = 200;
|
||||
for (solution_index, solution) in solutions.iter().enumerate() {
|
||||
simple_option_button(
|
||||
if simple_option_button(
|
||||
d,
|
||||
level_list_width + 10,
|
||||
y,
|
||||
200,
|
||||
solution_entry_width,
|
||||
solution_entry_height,
|
||||
solution_index,
|
||||
&mut self.selected_solution,
|
||||
);
|
||||
) {
|
||||
self.editing_solution_name = false;
|
||||
}
|
||||
let name_color = if solution.score.is_some() {
|
||||
Color::LIME
|
||||
} else {
|
||||
|
@ -156,8 +163,7 @@ impl Game {
|
|||
y += solution_entry_height + 10;
|
||||
}
|
||||
|
||||
// d.gui_button(bounds, text)
|
||||
if simple_button(d, level_list_width + 10, y, 200, 30) {
|
||||
if simple_button(d, level_list_width + 10, y, solution_entry_width, 30) {
|
||||
let n = solutions.len();
|
||||
solutions.push(Solution::new(level.id().to_owned(), n));
|
||||
}
|
||||
|
@ -168,6 +174,21 @@ impl Game {
|
|||
20,
|
||||
Color::WHITE,
|
||||
);
|
||||
|
||||
if let Some(solution) = solutions.get_mut(self.selected_solution) {
|
||||
let bounds = Rectangle {
|
||||
x: (level_list_width + 10 + solution_entry_width + 10) as f32,
|
||||
y: 60.,
|
||||
width: 240.,
|
||||
height: 30.,
|
||||
};
|
||||
text_input(
|
||||
d,
|
||||
bounds,
|
||||
&mut solution.name,
|
||||
&mut self.editing_solution_name,
|
||||
);
|
||||
}
|
||||
} else {
|
||||
self.solutions.insert(level.id().to_owned(), Vec::new());
|
||||
}
|
||||
|
|
14
src/util.rs
14
src/util.rs
|
@ -57,7 +57,8 @@ pub fn simple_option_button<T>(
|
|||
height: i32,
|
||||
option: T,
|
||||
current: &mut T,
|
||||
) where
|
||||
) -> bool
|
||||
where
|
||||
T: PartialEq,
|
||||
{
|
||||
let color = if &option == current {
|
||||
|
@ -72,12 +73,16 @@ pub fn simple_option_button<T>(
|
|||
height: height as f32,
|
||||
};
|
||||
let mouse_pos = d.get_mouse_position();
|
||||
let mut changed = false;
|
||||
if d.is_mouse_button_pressed(MouseButton::MOUSE_BUTTON_LEFT)
|
||||
&& bounds.check_collision_point_rec(mouse_pos)
|
||||
&& current != &option
|
||||
{
|
||||
*current = option;
|
||||
changed = true;
|
||||
}
|
||||
d.draw_rectangle_rec(bounds, color);
|
||||
changed
|
||||
}
|
||||
|
||||
pub fn text_input(
|
||||
|
@ -94,8 +99,13 @@ pub fn text_input(
|
|||
};
|
||||
d.draw_rectangle_rec(bounds, border);
|
||||
d.draw_rectangle_rec(shrink_rec(bounds, 2.), bg);
|
||||
let drawn_text = if *is_selected {
|
||||
&format!("{text}_")
|
||||
} else {
|
||||
&text
|
||||
};
|
||||
d.draw_text(
|
||||
text,
|
||||
drawn_text,
|
||||
bounds.x as i32 + 4,
|
||||
bounds.y as i32 + 4,
|
||||
20,
|
||||
|
|
Loading…
Reference in a new issue