diff --git a/src/creature.rs b/src/creature.rs index 5c0a7f2..d40b09a 100644 --- a/src/creature.rs +++ b/src/creature.rs @@ -24,7 +24,6 @@ pub struct Creature { pub birth_date: Time, pub profession: Profession, pub agenda: Agenda, - pub inventory: Vec, pub weapon: Option, pub armor: Option, } @@ -50,7 +49,6 @@ impl Creature { birth_date: birth_date, profession: profession, agenda: Agenda::Idle(0), - inventory: Vec::new(), weapon: None, armor: None, } diff --git a/src/events/item.rs b/src/events/item.rs index a82bcb8..835b4b4 100644 --- a/src/events/item.rs +++ b/src/events/item.rs @@ -7,7 +7,8 @@ pub struct ItemCrafted { impl Action for ItemCrafted { fn apply(&self, state: &mut GameState) { - state.add_item(self.item.clone()); + let item_id = state.add_item(self.item.clone()); + state.claim_item(self.crafter, item_id); } fn description(&self) -> String { diff --git a/src/item.rs b/src/item.rs index f5efd57..9020548 100644 --- a/src/item.rs +++ b/src/item.rs @@ -1,6 +1,6 @@ use std::fmt; -use crate::entity::{Entity, Location}; +use crate::entity::{Entity, Location, EntityId}; #[derive(Clone)] pub enum ItemType { @@ -11,6 +11,7 @@ pub enum ItemType { #[derive(Clone)] pub struct Item { pub entity: Entity, + pub owner: Option, pub name: String, pub item_type: ItemType, } @@ -38,6 +39,7 @@ impl ItemGenerator { damage_dice: 1, damage_sides: 6, }), + owner: None, } } } diff --git a/src/state.rs b/src/state.rs index 0b18775..775e147 100644 --- a/src/state.rs +++ b/src/state.rs @@ -2,7 +2,7 @@ use std::collections::HashMap; use rand::prelude::*; -use crate::entity::{Location, EntityId}; +use crate::entity::{Location, EntityId, Entity}; use crate::creature::{Creature, Profession, CreatureGenerator}; use crate::item::Item; use crate::site::{Town, Tavern}; @@ -168,6 +168,11 @@ impl GameState { } } + pub fn claim_item(&mut self, new_owner_id: EntityId, item_id: EntityId) { + let mut item = self.items.get_mut(&item_id).unwrap(); + item.owner = Some(new_owner_id.clone()); + } + } #[cfg(test)]