diff options
| -rw-r--r-- | data/makefile | 8 | ||||
| -rw-r--r-- | data/recipes/.gitignore | 2 | ||||
| -rw-r--r-- | server/src/bin/graph.rs | 52 | 
3 files changed, 37 insertions, 25 deletions
| diff --git a/data/makefile b/data/makefile index b5984dd7..e2effa3e 100644 --- a/data/makefile +++ b/data/makefile @@ -1,4 +1,12 @@  all: $(patsubst %.ts,%.yaml,$(wildcard recipes/*.ts)) +graphs: $(patsubst %.ts,%.svg,$(wildcard recipes/*.ts)) +  recipes/%.yaml: recipes/%.ts  	deno run $< > $@ + +recipes/%.gv.txt: recipes/%.yaml +	{ cd .. && cargo +nightly run --release --bin graph $(patsubst recipes/%.yaml,%,$<); } > $@ + +recipes/%.svg: recipes/%.gv.txt +	dot -Tsvg -Kdot >$@<$< diff --git a/data/recipes/.gitignore b/data/recipes/.gitignore index 1e82fc7d..77c36404 100644 --- a/data/recipes/.gitignore +++ b/data/recipes/.gitignore @@ -1 +1,3 @@  *.yaml +*.gv.txt +*.svg diff --git a/server/src/bin/graph.rs b/server/src/bin/graph.rs index 94dddbc4..0aac5468 100644 --- a/server/src/bin/graph.rs +++ b/server/src/bin/graph.rs @@ -15,7 +15,7 @@      along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ -use anyhow::Result; +use anyhow::{anyhow, Result};  use undercooked::{      data::DataIndex,      interaction::Recipe, @@ -28,19 +28,22 @@ fn main() -> Result<()> {      println!("digraph {{"); -    for rn in &index.recipes { -        let data = index.generate(format!("default-none-{rn}"))?; +    let rn = std::env::args() +        .nth(1) +        .ok_or(anyhow!("first arg should be recipe set name"))?; -        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", "#2bc493"), -                Recipe::Active { .. } => ("Active", "#47c42b"), -                Recipe::Instant { .. } => ("Instant", "#5452d8"), -            }; -            println!( +    let data = index.generate(format!("none-lobby-{rn}"))?; + +    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", "#2bc493"), +            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) @@ -48,23 +51,22 @@ fn main() -> Result<()> {                  "anything"              }          ); -            for ItemIndex(input) in recipe.inputs() { -                println!("i{input} -> r{ri}") -            } -            for ItemIndex(output) in recipe.outputs() { -                println!("r{ri} -> i{output}") -            } +        for ItemIndex(input) in recipe.inputs() { +            println!("i{input} -> r{ri}") +        } +        for ItemIndex(output) in recipe.outputs() { +            println!("r{ri} -> i{output}")          } +    } -        for (di, d) in data.demands.iter().enumerate() { -            let color = "#c4422b"; -            println!( +    for (di, d) in data.demands.iter().enumerate() { +        let color = "#c4422b"; +        println!(              "d{di} [label=\"Demand\\ntakes {}s\" shape=box color={color:?} fillcolor={color:?} style=filled]",              d.duration          ); -            println!("i{} -> d{di}", d.from.0); -            println!("d{di} -> i{}", d.to.0); -        } +        println!("i{} -> d{di}", d.from.0); +        println!("d{di} -> i{}", d.to.0);      }      println!("}}"); | 
