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}