diff options
Diffstat (limited to 'src/main.rs')
-rw-r--r-- | src/main.rs | 35 |
1 files changed, 29 insertions, 6 deletions
diff --git a/src/main.rs b/src/main.rs index 7887a90..e2c46ac 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,22 +1,45 @@ +use lazy_static::lazy_static; + use dmn::dice; use dmn::random_tables::RandomTables; +use dmn::rules::classes::Classes; +use dmn::rules::npcs::Npc; mod cli; +lazy_static! { + static ref CLASSES: Classes = Classes::new().expect("Failed to load classes."); +} + fn main() { let matches = cli::cli().get_matches(); - let random_tables = RandomTables::new().unwrap(); + let random_tables = RandomTables::new().expect("Failed to load random tables."); match matches.subcommand() { Some(("random", sub_matches)) => { - // TODO: Do something better than unwrap here. let random_command = sub_matches.subcommand().unwrap(); match random_command { ("henchman", _) => { - let race = random_tables.roll_table("henchman_race"); - let alignment = random_tables.roll_table("npc_alignment"); - let class = random_tables.roll_table("henchman_class"); - println!("{} {} {}", alignment, race, class); + let class_name = random_tables.roll_table("henchman_class").to_string(); + let class_ref = match CLASSES.class(&class_name) { + Ok(class_ref) => class_ref, + Err(err) => { + eprintln!("Error: {}", err); + std::process::exit(1); + } + }; + let npc = Npc::new( + Some(random_tables.roll_table("npc_alignment")), + Some(random_tables.roll_table("henchman_race")), + Some(class_ref), + None, + ); + println!( + "{} {} {}", + npc.alignment.unwrap(), + npc.race.unwrap(), + npc.class.unwrap().name + ); } ("magic", _) => { let magic = random_tables.roll_table("ua_magic"); |