veloren/world/examples/economy_tree.rs
2022-06-07 21:38:17 +02:00

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(())
}