summaryrefslogtreecommitdiff
path: root/src/components
diff options
context:
space:
mode:
authortroido <troido@protonmail.com>2020-04-02 16:07:32 +0200
committertroido <troido@protonmail.com>2020-04-02 16:07:32 +0200
commitb597d2279db7beb0d619fac472481b7f707609c8 (patch)
tree3d45ea9f45a8897a3aec5c30b16bb0db12b162b2 /src/components
parent1e8fe74740fc4fb11b660415b2db182c6a63a3c2 (diff)
built doors
Diffstat (limited to 'src/components')
-rw-r--r--src/components/interactable.rs16
-rw-r--r--src/components/item.rs2
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 {