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", "id": "00_zeroes",
"name": "Zeroes", "name": "Zeroes",
"description": "learn how to output data", "description": "learn how to output data\nthis is a multi-line test",
"init_board": null, "init_board": null,
"inputs": [], "inputs": [],
"outputs": [0, 0, 0, 0, 0, 0, 0, 0] "outputs": [0, 0, 0, 0, 0, 0, 0, 0]

View file

@ -11,17 +11,6 @@ pub struct Level {
} }
impl 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 { pub fn id(&self) -> &str {
&self.id &self.id
} }
@ -34,10 +23,6 @@ impl Level {
&self.description &self.description
} }
// pub fn init_board(&self) -> Option<Board> {
// self.init_board.as_deref().map(Board::parse)
// }
pub fn init_board(&self)->Option<String>{ pub fn init_board(&self)->Option<String>{
self.init_board.clone() self.init_board.clone()
} }

View file

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