summaryrefslogtreecommitdiff
path: root/src/components/item.rs
diff options
context:
space:
mode:
authortroido <troido@protonmail.com>2020-04-02 14:13:18 +0200
committertroido <troido@protonmail.com>2020-04-02 14:13:18 +0200
commit4f9932074a8f0390d5cb6072b4e419c7ab08ffed (patch)
treed83da5cd8b35af25aa6e0b2c9105182920c49bd0 /src/components/item.rs
parentec007f34c4cd984640a235660803b81a739742b3 (diff)
added flags component, and conditions for building
Diffstat (limited to 'src/components/item.rs')
-rw-r--r--src/components/item.rs22
1 files changed, 11 insertions, 11 deletions
diff --git a/src/components/item.rs b/src/components/item.rs
index 3b931bb..9793061 100644
--- a/src/components/item.rs
+++ b/src/components/item.rs
@@ -1,6 +1,10 @@
+use std::collections::HashSet;
use specs::{Component, DenseVecStorage};
-use crate::{Template};
+use crate::{
+ Template,
+ components::Flag
+};
use super::equipment::Equippable;
@@ -18,7 +22,7 @@ use serde_json::{json, Value};
#[derive(Debug, Clone, PartialEq)]
pub enum ItemAction {
Eat(i64),
- Build(Template),
+ Build(Template, HashSet<Flag>, HashSet<Flag>),
Equip(Equippable),
None
}
@@ -26,21 +30,17 @@ pub enum ItemAction {
use ItemAction::{Eat, Build, Equip, None};
impl ItemAction {
- pub fn to_json(&self) -> Value {
- match self {
- Eat(health) => json!(["eat", health]),
- Build(template) => json!(["build", template.to_json()]),
- Equip(equippable) => json!(["equip", equippable.to_json()]),
- None => json!(["none", null])
- }
- }
pub fn from_json(val: &Value) -> Option<Self> {
let typ = val.get(0)?;
let arg = val.get(1)?;
Some(match typ.as_str()? {
"eat" => Eat(arg.as_i64()?),
- "build" => Build(Template::from_json(arg).ok()?),
+ "build" => Build(
+ Template::from_json(arg.get(0)?).ok()?,
+ arg.get(1)?.as_array()?.into_iter().map(|v| Flag::from_str(v.as_str()?)).collect::<Option<HashSet<Flag>>>()?,
+ arg.get(2)?.as_array()?.into_iter().map(|v| Flag::from_str(v.as_str()?)).collect::<Option<HashSet<Flag>>>()?
+ ),
"none" => None,
"equip" => Equip(Equippable::from_json(arg)?),
_ => {return Option::None}