/* 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 . */ use anyhow::Result; use hurrycurry_data::index::DataIndex; use hurrycurry_protocol::{Demand, ItemIndex, Recipe, RecipeIndex}; pub(crate) fn graph() -> Result<()> { let mut index = DataIndex::default(); index.reload()?; println!("digraph {{"); let (data, _) = index.generate("5star")?; for i in 0..data.item_names.len() { println!("i{i} [label=\"{}\"]", data.item_name(ItemIndex(i))) } for (RecipeIndex(ri), recipe) in data.recipes() { let (kind, color) = match recipe { Recipe::Passive { .. } => ("Passive", "#b5c42b"), Recipe::Active { .. } => ("Active", "#47c42b"), Recipe::Instant { .. } => ("Instant", "#5452d8"), }; println!( "r{ri} [label=\"{kind}\\non {}\" shape=box color={color:?} fillcolor={color:?} style=filled]", if let Some(tile) = recipe.tile() { data.tile_name(tile) } else { "anything" } ); for ItemIndex(input) in recipe.inputs() { println!("i{input} -> r{ri}") } for ItemIndex(output) in recipe.outputs() { println!("r{ri} -> i{output}") } } for ( di, Demand { duration, input: ItemIndex(input), output, points, }, ) in data.demands.iter().enumerate() { let color = "#c4422b"; println!( "d{di} [label=\"Demand\\ntakes {duration}s\\n{points} points\" shape=box color={color:?} fillcolor={color:?} style=filled]", ); println!("i{input} -> d{di}"); if let Some(ItemIndex(output)) = output { println!("d{di} -> i{output}"); } } println!("}}"); Ok(()) }