mindustry logic execution, map- and schematic- parsing and rendering
Diffstat (limited to 'src/exe/map.rs')
| -rw-r--r-- | src/exe/map.rs | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/exe/map.rs b/src/exe/map.rs new file mode 100644 index 0000000..cbb6477 --- /dev/null +++ b/src/exe/map.rs @@ -0,0 +1,48 @@ +use mindus::data::DataRead; +use mindus::{build_registry, Renderable}; +use mindus::{MapSerializer, Serializer}; +use std::env::Args; +use std::time::Instant; + +use super::print_err; +pub fn main(args: Args) { + let reg = build_registry(); + let mut ms = MapSerializer(®); + let runs = std::env::var("RUNS").map_or(10u8, |x| x.parse().unwrap_or(10u8)); + + // process schematics from command line + println!("starting timing"); + let then = Instant::now(); + for curr in args { + let Ok(s) = std::fs::read(curr) else { + continue; + }; + let starting_deser = Instant::now(); + match ms.deserialize(&mut DataRead::new(&s)) { + Err(e) => print_err!(e, "fail"), + Ok(m) => { + let deser_took = starting_deser.elapsed(); + if let Ok(v) = std::env::var("SAVE") { + if v == "1" { + m.render().save("x.png"); + continue; + } + } + let starting_render = Instant::now(); + for _ in 0..runs { + drop(m.render()); + } + let renders_took = starting_render.elapsed(); + let took = then.elapsed(); + println!( + "μ total: {:.2}s ({} runs) (deser: {}ms, render: {:.2}s) on map {}", + took.as_secs_f32() / runs as f32, + runs, + deser_took.as_millis(), + renders_took.as_secs_f32() / runs as f32, + m.tags.get("mapname").unwrap(), + ); + } + } + } +} |