main.rs

1.2 kB · rust · 46 lines

1use mrlygame::{emit, SEED};2use std::path::Path;34fn main() {5    let args: Vec<String> = std::env::args().collect();6    match args.get(1).map(String::as_str) {7        Some("emit") => run(&args[2..]),8        _ => {9            usage();10            std::process::exit(2);11        }12    }13}1415fn usage() {16    eprintln!("mrlygame - the content generator");17    eprintln!();18    eprintln!("usage:");19    eprintln!("  mrlygame emit <dir> [seed]   generate one quest (seed {SEED} by default)");20}2122fn run(args: &[String]) {23    let Some(dir) = args.first() else {24        usage();25        std::process::exit(2);26    };27    let seed = args28        .get(1)29        .and_then(|text| text.parse().ok())30        .unwrap_or(SEED);31    match emit(Path::new(dir), seed) {32        Ok(record) => {33            let key = record["key"].as_str().unwrap_or("?").to_string();34            let frames = record["manifest"]["segments"]35                .as_array()36                .map_or(0, |lengths| {37                    lengths.iter().filter_map(|n| n.as_u64()).sum::<u64>()38                });39            println!("{key}: {frames} frames pressed into {dir}");40        }41        Err(error) => {42            eprintln!("emit failed: {error}");43            std::process::exit(1);44        }45    }46}