veloren/world/examples/economy_tree.rs

83 lines
2.0 KiB
Rust
Raw Permalink Normal View History

2021-04-02 20:27:39 +00:00
use common::trade::Good;
use std::io::Write;
use veloren_world::site::economy::{GraphInfo, Labor};
2021-04-02 20:27:39 +00:00
//use regex::Regex::replace_all;
fn good_name(g: Good) -> String {
let res = format!("{:?}", g);
let res = res.replace('(', "_");
res.replace(')', "_")
2021-04-02 20:27:39 +00:00
}
fn labor_name(l: Labor) -> String {
2021-04-02 20:27:39 +00:00
let res = format!("{:?}", l);
res.replace(' ', "_")
2021-04-02 20:27:39 +00:00
}
fn main() -> Result<(), std::io::Error> {
let eco = GraphInfo::default();
2021-04-02 20:27:39 +00:00
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) {
2021-04-02 20:27:39 +00:00
"green"
} else {
"orange"
};
writeln!(f, "{:?} [color=\"{}\"];", good_name(i.into()), color)?; // shape doubleoctagon ?
2021-04-02 20:27:39 +00:00
}
2021-04-03 08:43:20 +00:00
writeln!(f)?;
2021-04-02 20:27:39 +00:00
writeln!(f, "// Professions")?;
writeln!(f, "Everyone [shape=doubleoctagon];")?;
for i in eco.labor_list() {
2021-04-02 20:27:39 +00:00
writeln!(f, "{:?} [shape=box];", labor_name(i))?;
}
2021-04-03 08:43:20 +00:00
writeln!(f)?;
2021-04-02 20:27:39 +00:00
writeln!(f, "// Orders")?;
let o = eco.get_orders();
2021-04-02 20:27:39 +00:00
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"
2021-04-02 20:27:39 +00:00
} else {
""
};
writeln!(
f,
"{:?} -> {:?} [label=\"{:.1}\"{}];",
good_name(j.0.into()),
labor_name(i.0),
j.1,
style
)?;
2021-04-02 20:27:39 +00:00
}
}
for j in eco.get_orders_everyone() {
writeln!(
f,
"{:?} -> Everyone [label=\"{:.1}\"];",
good_name(j.0.into()),
j.1
)?;
}
2021-04-02 20:27:39 +00:00
2021-04-03 08:43:20 +00:00
writeln!(f)?;
2021-04-02 20:27:39 +00:00
writeln!(f, "// Products")?;
let p = eco.get_production();
2021-04-02 20:27:39 +00:00
for i in p.iter() {
writeln!(
f,
"{:?} -> {:?} [label=\"{:.1}\"];",
labor_name(i.0),
good_name(i.1.0.into()),
i.1.1
)?;
2021-04-02 20:27:39 +00:00
}
writeln!(f, "}}")?;
Ok(())
}