summaryrefslogtreecommitdiff
path: root/src/components
diff options
context:
space:
mode:
authortroido <troido@protonmail.com>2020-04-05 20:04:33 +0200
committertroido <troido@protonmail.com>2020-04-05 20:04:33 +0200
commit48c24ec8b011d081550dc78329cbe61de67b30e9 (patch)
treed2d700897dc5ba3d0f52e8a1cd57c0f4880272fd /src/components
parent84c70cee089b72720a85d285ee0437b65be298b9 (diff)
items are now mostly replaced by itemids, with a mapping to the item in the encyclopedia
Diffstat (limited to 'src/components')
-rw-r--r--src/components/inventory.rs20
-rw-r--r--src/components/item.rs70
-rw-r--r--src/components/mod.rs10
3 files changed, 21 insertions, 79 deletions
diff --git a/src/components/inventory.rs b/src/components/inventory.rs
index 81064d8..c3282e9 100644
--- a/src/components/inventory.rs
+++ b/src/components/inventory.rs
@@ -1,14 +1,22 @@
use std::collections::HashMap;
use specs::{Component, FlaggedStorage, HashMapStorage};
-use super::{
+use crate::{
+ ItemId,
item::{Item, ItemAction},
- equipment::{Stat, Equippable},
+ components::equipment::{Stat, Equippable},
};
+#[derive(Debug, Clone)]
+pub struct InventoryEntry {
+ pub itemid: ItemId,
+ pub item: Item,
+ pub is_equipped: bool
+}
+
#[derive(Debug, Clone, Default)]
pub struct Inventory {
- pub items: Vec<(Item, bool)>,
+ pub items: Vec<InventoryEntry>,
pub capacity: usize
}
impl Component for Inventory {
@@ -19,9 +27,9 @@ impl Inventory {
fn equipped(&self) -> Vec<Equippable> {
let mut equippables = Vec::new();
- for (item, is_equipped) in self.items.iter() {
- if *is_equipped {
- if let ItemAction::Equip(equippable) = &item.action {
+ for entry in self.items.iter() {
+ if entry.is_equipped {
+ if let ItemAction::Equip(equippable) = &entry.item.action {
equippables.push(equippable.clone());
} else {
panic!("unequippable item equipped!");
diff --git a/src/components/item.rs b/src/components/item.rs
deleted file mode 100644
index 0cb2589..0000000
--- a/src/components/item.rs
+++ /dev/null
@@ -1,70 +0,0 @@
-
-use std::collections::HashSet;
-use serde_json::{Value};
-use specs::{Component, DenseVecStorage};
-use crate::{
- Template,
- components::Flag
-};
-
-use super::equipment::Equippable;
-
-#[derive(Component, Debug, Clone)]
-pub struct Item {
- pub ent: Template,
- pub name: String,
- pub action: ItemAction
-}
-
-
-
-
-#[derive(Debug, Clone, PartialEq)]
-pub enum ItemAction {
- Eat(i64),
- Build(Template, HashSet<Flag>, HashSet<Flag>),
- Equip(Equippable),
- None
-}
-
-use ItemAction::{Eat, Build, Equip, None};
-
-impl ItemAction {
-
- 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.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}
- })
- }
-}
-
-#[cfg(test)]
-mod tests {
- use super::*;
- use crate::hashmap;
- use super::super::equipment::*;
- use serde_json::json;
-
- #[test]
- fn equip_from_json() {
- assert_eq!(
- ItemAction::from_json(&json!(["equip", {"slot": "hand", "stats": {"strength": 10}}])),
- Some(ItemAction::Equip(Equippable {slot: Slot::Hand, stats: hashmap!(Stat::Strength => 10)}))
- );
- assert_eq!(
- ItemAction::from_json(&json!(["equip", {"slot": "hand", "stats": {"attack": 50}}])),
- Option::None
- );
- }
-}
-
diff --git a/src/components/mod.rs b/src/components/mod.rs
index 1a590b2..4065cc2 100644
--- a/src/components/mod.rs
+++ b/src/components/mod.rs
@@ -1,5 +1,4 @@
-pub mod item;
pub mod messages;
pub mod faction;
pub mod interactable;
@@ -9,7 +8,6 @@ pub mod serialise;
pub mod flags;
pub mod ear;
-pub use item::Item;
pub use messages::{
AttackMessage,
AttackInbox,
@@ -46,7 +44,8 @@ use crate::{
controls::Control,
Template,
playerstate::RoomPos,
- Timestamp
+ Timestamp,
+ ItemId,
};
#[derive(Component, Debug, Clone)]
@@ -229,3 +228,8 @@ pub struct CreationTime {
}
+#[derive(Component, Debug, Clone)]
+pub struct Item(pub ItemId);
+
+
+