summaryrefslogtreecommitdiff
path: root/src/systems
diff options
context:
space:
mode:
Diffstat (limited to 'src/systems')
-rw-r--r--src/systems/building.rs42
-rw-r--r--src/systems/die.rs2
-rw-r--r--src/systems/mod.rs4
3 files changed, 46 insertions, 2 deletions
diff --git a/src/systems/building.rs b/src/systems/building.rs
new file mode 100644
index 0000000..876554e
--- /dev/null
+++ b/src/systems/building.rs
@@ -0,0 +1,42 @@
+
+use specs::{
+ ReadStorage,
+ System,
+ Join,
+ Write
+};
+
+use crate::{
+ components::{
+ Position,
+ Build,
+ Trigger,
+ TriggerBox
+ },
+ resources::{NewEntities}
+};
+
+
+pub struct Building;
+impl <'a> System<'a> for Building{
+ type SystemData = (
+ ReadStorage<'a, Position>,
+ Write<'a, NewEntities>,
+ ReadStorage<'a, TriggerBox>,
+ ReadStorage<'a, Build>
+ );
+
+ fn run(&mut self, (positions, mut new, triggerboxes, builds): Self::SystemData) {
+ for (position, triggerbox, build) in (&positions, &triggerboxes, &builds).join(){
+ for message in triggerbox.messages.iter() {
+ match message {
+ Trigger::Build | Trigger::Change => {
+ // todo: better error handling
+ new.create(position.pos, &build.obj).unwrap();
+ }
+ _ => {}
+ }
+ }
+ }
+ }
+}
diff --git a/src/systems/die.rs b/src/systems/die.rs
index c6fd646..021448e 100644
--- a/src/systems/die.rs
+++ b/src/systems/die.rs
@@ -29,7 +29,7 @@ impl <'a> System<'a> for Die {
for (entity, triggerbox) in (&entities, &triggerboxes).join() {
for trigger in triggerbox.messages.iter() {
match trigger {
- Trigger::Die | Trigger::Remove => {
+ Trigger::Die | Trigger::Remove | Trigger::Change => {
if let Some(player) = players.get(entity) {
// players move to purgatory when dead
emigration.emigrants.push((player.id.clone(), purgatory::purgatory_id(), RoomPos::Unknown));
diff --git a/src/systems/mod.rs b/src/systems/mod.rs
index 3f990a7..72a6845 100644
--- a/src/systems/mod.rs
+++ b/src/systems/mod.rs
@@ -21,6 +21,7 @@ mod interact;
mod droploot;
mod growth;
mod clear;
+mod building;
pub use self::{
controlinput::ControlInput,
@@ -44,5 +45,6 @@ pub use self::{
interact::Interact,
droploot::DropLoot,
growth::Growth,
- clear::Clear
+ clear::Clear,
+ building::Building
};