diff options
Diffstat (limited to 'src/systems')
| -rw-r--r-- | src/systems/building.rs | 42 | ||||
| -rw-r--r-- | src/systems/die.rs | 2 | ||||
| -rw-r--r-- | src/systems/mod.rs | 4 |
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 }; |
