use clap::Parser;
use log_err::LogErrResult;
use minetestworld::World;
use std::path::PathBuf;
use tokio::fs;
mod color;
mod mapblock;
mod render;
use render::compute_terrain;
mod config;
use config::Config;
mod terrain;
#[derive(Parser, Debug)]
#[clap(author, version, about, long_about = None)]
struct Args {
#[clap(short, long)]
world: PathBuf,
#[clap(short, long)]
config: PathBuf,
#[clap(short, long)]
output: PathBuf,
}
#[tokio::main(flavor = "multi_thread")]
async fn main() {
pretty_env_logger::init();
let args = Args::parse();
let config = fs::read_to_string(&args.config)
.await
.log_expect("reading config");
let config: Config = toml::from_str(&config).log_expect("parsing config");
let world = World::open(args.world);
let map = world.get_map_data().await.log_expect("opening world data");
let terrain_map = compute_terrain(map, &config)
.await
.log_expect("generating terrain map");
let picture = terrain_map.render(&config).log_expect("rendering map");
log::info!("Saving image");
picture.save(&args.output).log_expect("saving image");
}