display level descriptions, increased font sizes in level selection

This commit is contained in:
Crispy 2024-10-06 20:12:02 +02:00
parent 4a51369b18
commit f30e42cb31
3 changed files with 32 additions and 35 deletions

View file

@ -1,7 +1,7 @@
{
"id": "00_zeroes",
"name": "Zeroes",
"description": "learn how to output data",
"description": "learn how to output data\nthis is a multi-line test",
"init_board": null,
"inputs": [],
"outputs": [0, 0, 0, 0, 0, 0, 0, 0]

View file

@ -11,17 +11,6 @@ pub struct Level {
}
impl Level {
pub fn new_sandbox() -> Self {
Self {
id: "sandbox".into(),
name: "Sandbox".into(),
description: String::new(),
init_board: None,
inputs: Vec::new(),
outputs: Vec::new(),
}
}
pub fn id(&self) -> &str {
&self.id
}
@ -34,10 +23,6 @@ impl Level {
&self.description
}
// pub fn init_board(&self) -> Option<Board> {
// self.init_board.as_deref().map(Board::parse)
// }
pub fn init_board(&self)->Option<String>{
self.init_board.clone()
}

View file

@ -98,7 +98,7 @@ impl Game {
let mouse_pos = d.get_mouse_position();
for (i, level) in self.levels.iter().enumerate() {
let level_entry_height = 48;
let level_entry_height = 65;
let y = 10 + i as i32 * level_entry_height;
let bounds = Rectangle {
x: 5.,
@ -114,7 +114,7 @@ impl Game {
if self.selected_level == i {
d.draw_rectangle_rec(bounds, Color::DARKCYAN);
}
d.draw_text(level.name(), 10, y, 20, Color::WHITE);
d.draw_text(level.name(), 10, y, 30, Color::WHITE);
let solution_count = self
.solutions
.get(level.id())
@ -126,23 +126,29 @@ impl Game {
} else {
Color::LIGHTGRAY
};
d.draw_text(&subtext, 10, y + 20, 10, subtext_color);
d.draw_text(&subtext, 10, y + 30, 20, subtext_color);
}
if let Some(level) = self.levels.get(self.selected_level) {
d.draw_text(level.name(), level_list_width + 10, 10, 30, Color::CYAN);
d.draw_text(level.id(), level_list_width + 10, 40, 10, Color::GRAY);
d.draw_text(level.name(), level_list_width + 10, 10, 40, Color::CYAN);
d.draw_text(level.id(), level_list_width + 10, 50, 10, Color::GRAY);
let mut y = 70;
for line in level.description().lines() {
d.draw_text(line, level_list_width + 10, y, 20, Color::WHITE);
y += 30;
}
let mut y = 60;
if let Some(solutions) = self.solutions.get_mut(level.id()) {
let solution_entry_height = 40;
let solution_entry_width = 200;
let entry_width = 200;
let mut solution_y = y;
for (solution_index, solution) in solutions.iter().enumerate() {
if simple_option_button(
d,
level_list_width + 10,
y,
solution_entry_width,
solution_y,
entry_width,
solution_entry_height,
solution_index,
&mut self.selected_solution,
@ -154,33 +160,39 @@ impl Game {
} else {
Color::ORANGE
};
d.draw_text(&solution.name, level_list_width + 15, y + 5, 20, name_color);
d.draw_text(
&solution.name,
level_list_width + 15,
solution_y + 5,
20,
name_color,
);
d.draw_text(
&solution.score_text(),
level_list_width + 15,
y + 25,
solution_y + 25,
10,
Color::WHITE,
);
y += solution_entry_height + 10;
solution_y += solution_entry_height + 10;
}
if simple_button(d, level_list_width + 10, y, solution_entry_width, 30) {
if simple_button(d, level_list_width + 10, solution_y, entry_width, 30) {
let n = solutions.len();
solutions.push(Solution::new(&level, n));
}
d.draw_text(
"new solution",
level_list_width + 15,
y + 5,
solution_y + 5,
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.,
x: (level_list_width + 10 + entry_width + 10) as f32,
y: y as f32,
width: 220.,
height: 30.,
};
@ -191,11 +203,11 @@ impl Game {
&mut self.editing_solution_name,
);
let button_x = level_list_width + solution_entry_width + 20;
if simple_button(d, button_x, 100, 220, 30) {
let button_x = level_list_width + entry_width + 20;
if simple_button(d, button_x, y + 40, 220, 30) {
self.open_editor = Some(Editor::new(solution.clone(), level.clone()));
}
d.draw_text("edit", button_x + 5, 105, 20, Color::WHITE);
d.draw_text("edit", button_x + 5, y + 45, 20, Color::WHITE);
}
} else {
self.solutions.insert(level.id().to_owned(), Vec::new());