diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/encyclopedia.rs | 9 | ||||
| -rw-r--r-- | src/main.rs | 9 | ||||
| -rw-r--r-- | src/worldloader.rs | 22 |
3 files changed, 28 insertions, 12 deletions
diff --git a/src/encyclopedia.rs b/src/encyclopedia.rs index 54fa82b..e100cad 100644 --- a/src/encyclopedia.rs +++ b/src/encyclopedia.rs @@ -37,7 +37,7 @@ impl Encyclopedia { let items = val .get("items") - .ok_or(perr!("no items in encyclopedia json"))? + .unwrap_or(&json!({})) .as_object() .ok_or(perr!("encyclopedia items not a json object"))? .into_iter() @@ -105,7 +105,6 @@ impl Encyclopedia { assemblages, items }) - } pub fn validate(&self) -> Result<()> { @@ -125,5 +124,11 @@ impl Encyclopedia { pub fn get_item(&self, id: &ItemId) -> Option<Item> { self.items.get(id).map(|item| item.clone()) } + + pub fn merge(mut self, mut other: Encyclopedia) -> Encyclopedia { + self.assemblages.extend(other.assemblages.drain()); + self.items.extend(other.items.drain()); + self + } } diff --git a/src/main.rs b/src/main.rs index 6e916fd..77a41a6 100644 --- a/src/main.rs +++ b/src/main.rs @@ -101,9 +101,14 @@ fn main(){ ); println!("content directory: {:?}", content_dir); let loader = WorldLoader::new(content_dir); - let WorldMeta{encyclopedia_name, default_room} = loader.load_world_meta().expect("Failed to load world meta information"); + let WorldMeta{encyclopediae, default_room} = loader.load_world_meta().expect("Failed to load world meta information"); - let encyclopedia = loader.load_encyclopedia(&encyclopedia_name).expect("Failed to load encyclopedia"); + let mut encyclopedia = Encyclopedia::default(); + for enc in encyclopediae { + encyclopedia = encyclopedia.merge( + loader.load_encyclopedia(&enc).expect(&format!("Failed to load encyclopedia {}", enc)) + ) + } let save_dir = config.save_dir.unwrap_or( FileStorage::default_save_dir().expect("couldn't find any save directory") diff --git a/src/worldloader.rs b/src/worldloader.rs index 9389e58..8e0622e 100644 --- a/src/worldloader.rs +++ b/src/worldloader.rs @@ -34,16 +34,22 @@ impl WorldLoader { .as_str() .ok_or(aerr!("world meta default_room is not a string"))? ); - let encyclopedia_name = + let encyclopediae = json - .get("encyclopedia") - .ok_or(aerr!("world meta does not have encyclopedia"))? - .as_str() - .ok_or(aerr!("world meta encyclopedia is not a string"))? - .to_string(); + .get("encyclopediae") + .ok_or(aerr!("world meta does not have encyclopediae"))? + .as_array() + .ok_or(aerr!("world meta encyclopediae is not a list"))? + .iter() + .map(|v| Ok(v + .as_str() + .ok_or(aerr!("world meta encyclopediae item {:?} is not a string", v))? + .to_string() + )) + .collect::<Result<Vec<String>>>()?; Ok(WorldMeta{ default_room, - encyclopedia_name + encyclopediae }) } @@ -73,7 +79,7 @@ impl WorldLoader { } pub struct WorldMeta { - pub encyclopedia_name: String, + pub encyclopediae: Vec<String>, pub default_room: RoomId } |
