diff options
Diffstat (limited to 'src/components/interactable.rs')
| -rw-r--r-- | src/components/interactable.rs | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/components/interactable.rs b/src/components/interactable.rs index f6ce8c4..2dca6ea 100644 --- a/src/components/interactable.rs +++ b/src/components/interactable.rs @@ -1,19 +1,27 @@ +use serde_json::{Value}; use specs::{ Component, HashMapStorage }; +use crate::{ + Template +}; -#[derive(Component, Debug, Clone, PartialEq, Eq)] +#[derive(Component, Debug, Clone, PartialEq)] #[storage(HashMapStorage)] pub enum Interactable { - Harvest + Harvest, + Change(Template) } impl Interactable { - pub fn from_str(txt: &str) -> Option<Interactable> { - match txt { + pub fn from_json(val: &Value) -> Option<Self> { + let typ = if val.is_string() {val} else {val.get(0)?}; + let arg = if val.is_string() {&Value::Null} else {val.get(1)?}; + match typ.as_str()? { "harvest" => Some(Interactable::Harvest), + "change" => Some(Interactable::Change(Template::from_json(arg).ok()?)), _ => None } } |
