From b597d2279db7beb0d619fac472481b7f707609c8 Mon Sep 17 00:00:00 2001 From: troido Date: Thu, 2 Apr 2020 16:07:32 +0200 Subject: built doors --- src/components/interactable.rs | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'src/components/interactable.rs') 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 { - match txt { + pub fn from_json(val: &Value) -> Option { + 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 } } -- cgit