aboutsummaryrefslogtreecommitdiff
path: root/server/data/src/book/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'server/data/src/book/mod.rs')
-rw-r--r--server/data/src/book/mod.rs128
1 files changed, 128 insertions, 0 deletions
diff --git a/server/data/src/book/mod.rs b/server/data/src/book/mod.rs
new file mode 100644
index 00000000..b52779f3
--- /dev/null
+++ b/server/data/src/book/mod.rs
@@ -0,0 +1,128 @@
+/*
+ Hurry Curry! - a game about cooking
+ Copyright (C) 2025 Hurry Curry! Contributors
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, version 3 of the License only.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+*/
+
+pub mod diagram_layout;
+pub mod recipe_diagram;
+
+use crate::{
+ Serverdata,
+ book::{diagram_layout::diagram_layout, recipe_diagram::recipe_diagram},
+};
+use anyhow::Result;
+use hurrycurry_locale::trm;
+use hurrycurry_protocol::{
+ Gamedata, Message,
+ book::{Book, BookPage},
+};
+
+struct RecipePageParams<'a> {
+ name: &'a str,
+ repr_items: &'a [&'a str],
+}
+static RECIPE_PAGES: &[RecipePageParams] = &[
+ RecipePageParams {
+ name: "cheese-leek-soup",
+ repr_items: &["plate:cheese-leek-soup"],
+ },
+ RecipePageParams {
+ name: "tomato-soup",
+ repr_items: &["plate:tomato-soup"],
+ },
+ RecipePageParams {
+ name: "mushroom-soup",
+ repr_items: &["plate:mushroom-soup"],
+ },
+ RecipePageParams {
+ name: "burger",
+ repr_items: &[
+ "plate:seared-patty,sliced-bun,sliced-lettuce,sliced-tomato",
+ "plate:seared-patty,sliced-bun,sliced-cheese,sliced-tomato",
+ ],
+ },
+ RecipePageParams {
+ name: "noodles",
+ repr_items: &["plate:cooked-noodles,sliced-cheese,tomato-juice"],
+ },
+ RecipePageParams {
+ name: "pizza",
+ repr_items: &["plate:baked-rolled-dough:sliced-cheese,sliced-mushroom,tomato-juice"],
+ },
+ RecipePageParams {
+ name: "curry",
+ repr_items: &["plate:cooked-rice,curry"],
+ },
+ RecipePageParams {
+ name: "drinks",
+ repr_items: &[
+ "glass:water",
+ "glass:tomato-juice",
+ "glass:strawberry-shake",
+ ],
+ },
+ RecipePageParams {
+ name: "mochi",
+ repr_items: &["plate:strawberry-mochi"],
+ },
+ RecipePageParams {
+ name: "doughnut",
+ repr_items: &["plate:doughnut"],
+ },
+ RecipePageParams {
+ name: "doughnut",
+ repr_items: &["plate:doughnut"],
+ },
+];
+
+pub fn book(data: &Gamedata, serverdata: &Serverdata) -> Result<Book> {
+ let mut pages = Vec::new();
+
+ pages.push(BookPage::Contents {
+ title: trm!("b.toc.title"),
+ table: vec![],
+ });
+ let mut toc = Vec::new();
+
+ for &RecipePageParams { name, repr_items } in RECIPE_PAGES {
+ let mut diagram = recipe_diagram(data, serverdata, repr_items)?;
+ diagram_layout(&mut diagram)?;
+ let title = Message::Translation {
+ id: format!("b.{name}.title"),
+ params: vec![],
+ };
+ toc.push((title.clone(), pages.len()));
+ pages.push(BookPage::Recipe {
+ title,
+ description: Message::Translation {
+ id: format!("b.{name}.desc"),
+ params: vec![],
+ },
+ diagram,
+ });
+ }
+
+ if let BookPage::Contents { table, .. } = &mut pages[0] {
+ *table = toc;
+ }
+ Ok(Book { pages })
+}
+
+pub fn print_book(data: &Gamedata, serverdata: &Serverdata) -> Result<()> {
+ let book = book(data, serverdata)?;
+ println!("{}", serde_json::to_string_pretty(&book).unwrap());
+ Ok(())
+}