diff options
| author | troido <troido@protonmail.com> | 2020-02-23 01:18:17 +0100 |
|---|---|---|
| committer | troido <troido@protonmail.com> | 2020-02-23 01:18:17 +0100 |
| commit | 7262cfc53b4af978d6db1b91e3143200f906587f (patch) | |
| tree | f6aa651a3040a1389a9c4e82796f1c04b3c5198c /src/roomtemplate.rs | |
| parent | 522aad7889cd62e96af7c420789507ccbf5b7aaa (diff) | |
rooms have named locations to be used by portals
Diffstat (limited to 'src/roomtemplate.rs')
| -rw-r--r-- | src/roomtemplate.rs | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/roomtemplate.rs b/src/roomtemplate.rs index 49dd7af..84110b9 100644 --- a/src/roomtemplate.rs +++ b/src/roomtemplate.rs @@ -1,6 +1,6 @@ use std::collections::HashMap; -use serde_json::Value; +use serde_json::{json, Value}; use crate::Pos; use crate::template::Template; use crate::{Result, aerr}; @@ -8,7 +8,8 @@ use crate::{Result, aerr}; pub struct RoomTemplate { pub size: (i64, i64), pub spawn: Pos, - pub field: Vec<Vec<Template>> + pub field: Vec<Vec<Template>>, + pub places: HashMap<String, Pos> } impl RoomTemplate { @@ -42,10 +43,17 @@ impl RoomTemplate { field[x + y * (size.0 as usize)] = mapping.get(&ch).ok_or(aerr!("char not found in mapping"))?.clone(); } } + + let mut places = HashMap::new(); + for (name, jsonpos) in jsonroom.get("places").unwrap_or(&json!({})).as_object().ok_or("places not an object")? { + places.insert(name.to_string(), Pos::from_json(jsonpos).ok_or("pos of places invalid")?); + } + Ok(RoomTemplate { size, spawn, - field + field, + places }) } } |
