2021-04-02 20:27:39 +00:00
|
|
|
use common::trade::Good;
|
|
|
|
use std::io::Write;
|
|
|
|
use veloren_world::site::economy::{self, good_list, Economy};
|
|
|
|
//use regex::Regex::replace_all;
|
|
|
|
|
|
|
|
fn good_name(g: Good) -> String {
|
|
|
|
let res = format!("{:?}", g);
|
|
|
|
let res = res.replace("(", "_");
|
2021-04-03 08:43:20 +00:00
|
|
|
res.replace(")", "_")
|
2021-04-02 20:27:39 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
fn labor_name(l: economy::Labor) -> String {
|
|
|
|
let res = format!("{:?}", l);
|
2021-04-03 08:43:20 +00:00
|
|
|
res.replace(" ", "_")
|
2021-04-02 20:27:39 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
fn main() -> Result<(), std::io::Error> {
|
|
|
|
let eco = Economy::default();
|
|
|
|
let o = eco.get_orders();
|
|
|
|
let p = eco.get_productivity();
|
|
|
|
|
|
|
|
let mut f = std::fs::File::create("economy.gv")?;
|
|
|
|
writeln!(f, "digraph economy {{")?;
|
2021-06-20 16:00:37 +00:00
|
|
|
for i in good_list() {
|
|
|
|
let color = if economy::direct_use_goods().contains(&i) {
|
2021-04-02 20:27:39 +00:00
|
|
|
"green"
|
|
|
|
} else {
|
|
|
|
"orange"
|
|
|
|
};
|
2021-06-20 16:00:37 +00:00
|
|
|
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 economy::Labor::list() {
|
|
|
|
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")?;
|
|
|
|
for i in o.iter() {
|
|
|
|
for j in i.1.iter() {
|
|
|
|
if i.0.is_some() {
|
2021-06-20 16:00:37 +00:00
|
|
|
let style = if matches!(j.0.into(), Good::Tools)
|
|
|
|
|| matches!(j.0.into(), Good::Armor)
|
|
|
|
|| matches!(j.0.into(), Good::Potions)
|
2021-04-02 20:27:39 +00:00
|
|
|
{
|
|
|
|
", style=dashed, color=orange"
|
|
|
|
} else {
|
|
|
|
""
|
|
|
|
};
|
|
|
|
writeln!(
|
|
|
|
f,
|
|
|
|
"{:?} -> {:?} [label=\"{:.1}\"{}];",
|
2021-06-20 16:00:37 +00:00
|
|
|
good_name(j.0.into()),
|
2021-04-02 20:27:39 +00:00
|
|
|
labor_name(i.0.unwrap()),
|
|
|
|
j.1,
|
|
|
|
style
|
|
|
|
)?;
|
|
|
|
} else {
|
|
|
|
writeln!(
|
|
|
|
f,
|
|
|
|
"{:?} -> Everyone [label=\"{:.1}\"];",
|
2021-06-20 16:00:37 +00:00
|
|
|
good_name(j.0.into()),
|
2021-04-02 20:27:39 +00:00
|
|
|
j.1
|
|
|
|
)?;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-04-03 08:43:20 +00:00
|
|
|
writeln!(f)?;
|
2021-04-02 20:27:39 +00:00
|
|
|
writeln!(f, "// Products")?;
|
|
|
|
for i in p.iter() {
|
2021-06-20 16:00:37 +00:00
|
|
|
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(())
|
|
|
|
}
|