mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
83 lines
2.0 KiB
Rust
83 lines
2.0 KiB
Rust
use common::trade::Good;
|
|
use std::io::Write;
|
|
use veloren_world::site::economy::{GraphInfo, Labor};
|
|
//use regex::Regex::replace_all;
|
|
|
|
fn good_name(g: Good) -> String {
|
|
let res = format!("{:?}", g);
|
|
let res = res.replace('(', "_");
|
|
res.replace(')', "_")
|
|
}
|
|
|
|
fn labor_name(l: Labor) -> String {
|
|
let res = format!("{:?}", l);
|
|
res.replace(' ', "_")
|
|
}
|
|
|
|
fn main() -> Result<(), std::io::Error> {
|
|
let eco = GraphInfo::default();
|
|
|
|
let mut f = std::fs::File::create("economy.gv")?;
|
|
writeln!(f, "digraph economy {{")?;
|
|
for i in eco.good_list() {
|
|
let color = if !eco.can_store(&i) {
|
|
"green"
|
|
} else {
|
|
"orange"
|
|
};
|
|
writeln!(f, "{:?} [color=\"{}\"];", good_name(i.into()), color)?; // shape doubleoctagon ?
|
|
}
|
|
|
|
writeln!(f)?;
|
|
writeln!(f, "// Professions")?;
|
|
writeln!(f, "Everyone [shape=doubleoctagon];")?;
|
|
for i in eco.labor_list() {
|
|
writeln!(f, "{:?} [shape=box];", labor_name(i))?;
|
|
}
|
|
|
|
writeln!(f)?;
|
|
writeln!(f, "// Orders")?;
|
|
let o = eco.get_orders();
|
|
for i in o.iter() {
|
|
for j in i.1.iter() {
|
|
let style = if matches!(j.0.into(), Good::Tools | Good::Armor | Good::Potions) {
|
|
", style=dashed, color=orange"
|
|
} else {
|
|
""
|
|
};
|
|
writeln!(
|
|
f,
|
|
"{:?} -> {:?} [label=\"{:.1}\"{}];",
|
|
good_name(j.0.into()),
|
|
labor_name(i.0),
|
|
j.1,
|
|
style
|
|
)?;
|
|
}
|
|
}
|
|
for j in eco.get_orders_everyone() {
|
|
writeln!(
|
|
f,
|
|
"{:?} -> Everyone [label=\"{:.1}\"];",
|
|
good_name(j.0.into()),
|
|
j.1
|
|
)?;
|
|
}
|
|
|
|
writeln!(f)?;
|
|
writeln!(f, "// Products")?;
|
|
let p = eco.get_production();
|
|
for i in p.iter() {
|
|
writeln!(
|
|
f,
|
|
"{:?} -> {:?} [label=\"{:.1}\"];",
|
|
labor_name(i.0),
|
|
good_name(i.1.0.into()),
|
|
i.1.1
|
|
)?;
|
|
}
|
|
|
|
writeln!(f, "}}")?;
|
|
Ok(())
|
|
}
|