From 290eb2791b1da5836641df935c9bac5b21273e7b Mon Sep 17 00:00:00 2001 From: troido Date: Fri, 31 Dec 2021 14:38:26 +0100 Subject: made assemblage fields private --- src/assemblage.rs | 32 +++++++++++++++++---- src/encyclopedia.rs | 21 ++++---------- src/room.rs | 54 ++++++++++++++++++------------------ src/systems/mod.rs | 80 +++++++++++++++++------------------------------------ 4 files changed, 85 insertions(+), 102 deletions(-) diff --git a/src/assemblage.rs b/src/assemblage.rs index 24d4539..7b36085 100644 --- a/src/assemblage.rs +++ b/src/assemblage.rs @@ -8,16 +8,18 @@ use crate::{ components::{Serialise, Clan}, Template, Result as AnyResult, - aerr + aerr, + sprite::Sprite, + compmap }; #[derive(Debug, PartialEq, Clone)] pub struct Assemblage { - pub arguments: HashMap>, - pub components: Vec<(ComponentType, HashMap)>, - pub save: bool, - pub extract: Vec<(String, ComponentType, String)> + arguments: HashMap>, + components: Vec<(ComponentType, HashMap)>, + save: bool, + extract: Vec<(String, ComponentType, String)> } impl Assemblage { @@ -67,6 +69,26 @@ impl Assemblage { } Ok(components) } + + pub fn apply_arguments(&self, arguments: HashMap) -> Self { + let mut assemblage = self.clone(); + for (key, val) in arguments { + assemblage.arguments.insert(key, Some(val)); + } + assemblage + } + + pub fn new_item(id: String, sprite: Sprite, name: String) -> Assemblage { + Assemblage { + arguments: HashMap::new(), + save: true, + extract: Vec::new(), + components: vec![ + (ComponentType::Visible, compmap!{height: 0.3_f64, sprite: sprite.0, name: name}), + (ComponentType::Item, compmap!{item: id}) + ] + } + } } #[macro_export] diff --git a/src/encyclopedia.rs b/src/encyclopedia.rs index 76a7d28..b9df88a 100644 --- a/src/encyclopedia.rs +++ b/src/encyclopedia.rs @@ -12,9 +12,7 @@ use crate::{ item::Item, item::ItemAction, parameter::Parameter, - Sprite, - compmap, - componentwrapper::ComponentType + Sprite }; #[derive(Default, Clone)] @@ -61,15 +59,7 @@ impl<'de> Deserialize<'de> for Encyclopedia { let name = item.name.unwrap_or(id.clone()); let ent = item.entity.unwrap_or_else(||{ let enttyp = EntityType(id.clone()); - assemblages.insert(enttyp.clone(), Assemblage { - arguments: HashMap::new(), - save: true, - extract: Vec::new(), - components: vec![ - (ComponentType::Visible, compmap!{height: 0.3_f64, sprite: sprite.0, name: name.clone()}), - (ComponentType::Item, compmap!{item: id.clone()}) - ] - }); + assemblages.insert(enttyp.clone(), Assemblage::new_item(id.clone(), sprite, name.clone())); Template::from_entity_type(enttyp) }); itemdefs.insert(ItemId(id), Item{ @@ -79,10 +69,9 @@ impl<'de> Deserialize<'de> for Encyclopedia { }); } for (templatename, (baseent, args)) in templates { - let mut assemblage = assemblages.get(&baseent).ok_or(de::Error::custom(format!("template name '{:?}' does not point to not an assemblage", baseent)))?.clone(); - for (key, val) in args { - assemblage.arguments.insert(key, Some(val)); - } + let assemblage= assemblages.get(&baseent) + .ok_or(de::Error::custom(format!("template name '{:?}' does not point to not an assemblage", baseent)))? + .apply_arguments(args); assemblages.insert(templatename, assemblage); } diff --git a/src/room.rs b/src/room.rs index f6e2613..906ab47 100644 --- a/src/room.rs +++ b/src/room.rs @@ -45,32 +45,32 @@ use crate::{ Result, Timestamp, systems::{ - Move, - RegisterNew, - ControlInput, - View, - Remove, - Create, - Take, - Migrate, - Use, - Attacking, - Trapping, - Fight, - Heal, - UpdateCooldowns, - ControlAI, - Die, - Spawn, - Interact, - DropLoot, - Timeout, - Clear, - Building, - SpawnTrigger, - Replace, - SpawnCheck, - Describe + moving::Move, + registernew::RegisterNew, + controlinput::ControlInput, + view::View, + remove::Remove, + create::Create, + take::Take, + migrate::Migrate, + useitem::Use, + attacking::Attacking, + trapping::Trapping, + fight::Fight, + heal::Heal, + updatecooldowns::UpdateCooldowns, + controlai::ControlAI, + die::Die, + spawn::Spawn, + interact::Interact, + droploot::DropLoot, + timeout::Timeout, + clear::Clear, + building::Building, + spawntrigger::SpawnTrigger, + replace::Replace, + spawncheck::SpawnCheck, + describe::Describe } }; @@ -157,7 +157,6 @@ impl Room { SpawnCheck.run_now(&self.world); ControlInput.run_now(&self.world); ControlAI.run_now(&self.world); - Describe.run_now(&self.world); Take.run_now(&self.world); Use.run_now(&self.world); Interact.run_now(&self.world); @@ -182,6 +181,7 @@ impl Room { Remove.run_now(&self.world); self.world.maintain(); RegisterNew.run_now(&self.world); + Describe.run_now(&self.world); View.run_now(&self.world); Clear.run_now(&self.world); } diff --git a/src/systems/mod.rs b/src/systems/mod.rs index 66258a4..25d4ab6 100644 --- a/src/systems/mod.rs +++ b/src/systems/mod.rs @@ -1,56 +1,28 @@ -mod controlinput; -mod registernew; -mod moving; -mod view; -mod remove; -mod create; -mod take; -mod migrate; -mod useitem; -mod attacking; -mod trapping; -mod fight; -mod heal; -mod updatecooldowns; -mod controlai; -mod die; -mod spawn; -mod interact; -mod droploot; -mod timeout; -mod clear; -mod building; -mod spawntrigger; -mod replace; -mod spawncheck; -mod describe; +pub mod controlinput; +pub mod registernew; +pub mod moving; +pub mod view; +pub mod remove; +pub mod create; +pub mod take; +pub mod migrate; +pub mod useitem; +pub mod attacking; +pub mod trapping; +pub mod fight; +pub mod heal; +pub mod updatecooldowns; +pub mod controlai; +pub mod die; +pub mod spawn; +pub mod interact; +pub mod droploot; +pub mod timeout; +pub mod clear; +pub mod building; +pub mod spawntrigger; +pub mod replace; +pub mod spawncheck; +pub mod describe; -pub use self::{ - controlinput::ControlInput, - registernew::RegisterNew, - moving::Move, - view::View, - remove::Remove, - create::Create, - take::Take, - migrate::Migrate, - useitem::Use, - attacking::Attacking, - trapping::Trapping, - fight::Fight, - heal::Heal, - updatecooldowns::UpdateCooldowns, - controlai::ControlAI, - die::Die, - spawn::Spawn, - interact::Interact, - droploot::DropLoot, - timeout::Timeout, - clear::Clear, - building::Building, - spawntrigger::SpawnTrigger, - replace::Replace, - spawncheck::SpawnCheck, - describe::Describe -}; -- cgit