display level descriptions, increased font sizes in level selection
This commit is contained in:
parent
4a51369b18
commit
f30e42cb31
3 changed files with 32 additions and 35 deletions
|
@ -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]
|
||||||
|
|
15
src/level.rs
15
src/level.rs
|
@ -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()
|
||||||
}
|
}
|
||||||
|
|
50
src/main.rs
50
src/main.rs
|
@ -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());
|
||||||
|
|
Loading…
Reference in a new issue