summaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs35
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");