diff options
| author | troido <troido@protonmail.com> | 2020-04-02 16:07:32 +0200 |
|---|---|---|
| committer | troido <troido@protonmail.com> | 2020-04-02 16:07:32 +0200 |
| commit | b597d2279db7beb0d619fac472481b7f707609c8 (patch) | |
| tree | 3d45ea9f45a8897a3aec5c30b16bb0db12b162b2 /src/components | |
| parent | 1e8fe74740fc4fb11b660415b2db182c6a63a3c2 (diff) | |
built doors
Diffstat (limited to 'src/components')
| -rw-r--r-- | src/components/interactable.rs | 16 | ||||
| -rw-r--r-- | src/components/item.rs | 2 |
2 files changed, 13 insertions, 5 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 } } diff --git a/src/components/item.rs b/src/components/item.rs index 9793061..40be7f1 100644 --- a/src/components/item.rs +++ b/src/components/item.rs @@ -1,5 +1,6 @@ use std::collections::HashSet; +use serde_json::{Value}; use specs::{Component, DenseVecStorage}; use crate::{ Template, @@ -17,7 +18,6 @@ pub struct Item { -use serde_json::{json, Value}; #[derive(Debug, Clone, PartialEq)] pub enum ItemAction { |
