summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/assemblage.rs32
-rw-r--r--src/encyclopedia.rs21
-rw-r--r--src/room.rs54
-rw-r--r--src/systems/mod.rs80
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<String, Option<Parameter>>,
- pub components: Vec<(ComponentType, HashMap<String, ParameterExpression>)>,
- pub save: bool,
- pub extract: Vec<(String, ComponentType, String)>
+ arguments: HashMap<String, Option<Parameter>>,
+ components: Vec<(ComponentType, HashMap<String, ParameterExpression>)>,
+ save: bool,
+ extract: Vec<(String, ComponentType, String)>
}
impl Assemblage {
@@ -67,6 +69,26 @@ impl Assemblage {
}
Ok(components)
}
+
+ pub fn apply_arguments(&self, arguments: HashMap<String, Parameter>) -> 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
-};