From ee200f3003acdfdfde1a746246a7a4669188eb18 Mon Sep 17 00:00:00 2001 From: troido Date: Mon, 13 Apr 2020 14:16:35 +0200 Subject: spawners now also use timer component and triggers --- src/systems/clear.rs | 13 +++++++++---- src/systems/spawn.rs | 22 ++++++++++------------ 2 files changed, 19 insertions(+), 16 deletions(-) (limited to 'src/systems') diff --git a/src/systems/clear.rs b/src/systems/clear.rs index 64588d3..8d15835 100644 --- a/src/systems/clear.rs +++ b/src/systems/clear.rs @@ -1,19 +1,24 @@ use specs::{ Write, + WriteStorage, System }; use crate::{ - resources::Ground + resources::Ground, + components::TriggerBox }; pub struct Clear; impl <'a> System<'a> for Clear { - type SystemData = - Write<'a, Ground>; - fn run(&mut self, mut ground: Self::SystemData) { + type SystemData = ( + Write<'a, Ground>, + WriteStorage<'a, TriggerBox> + ); + fn run(&mut self, (mut ground, mut triggerboxes): Self::SystemData) { ground.changes.clear(); + triggerboxes.clear(); } } diff --git a/src/systems/spawn.rs b/src/systems/spawn.rs index 903b9b2..ad9e8c1 100644 --- a/src/systems/spawn.rs +++ b/src/systems/spawn.rs @@ -5,7 +5,6 @@ use specs::{ WriteStorage, ReadStorage, Write, - Read, System, Join }; @@ -15,9 +14,11 @@ use crate::{ Position, Spawner, Clan, - Home + Home, + TriggerBox, + Trigger }, - resources::{NewEntities, Time}, + resources::{NewEntities}, componentwrapper::ComponentWrapper }; @@ -30,20 +31,19 @@ impl <'a> System<'a> for Spawn { Write<'a, NewEntities>, WriteStorage<'a, Spawner>, ReadStorage<'a, Clan>, - Read<'a, Time> + ReadStorage<'a, TriggerBox> ); - fn run(&mut self, (positions, mut new, mut spawners, clans, time): Self::SystemData) { + fn run(&mut self, (positions, mut new, mut spawners, clans, triggerboxes): Self::SystemData) { let mut clan_nums: HashMap<&Clan, usize> = HashMap::new(); for clan in (&clans).join() { let n: usize = *clan_nums.entry(clan).or_insert(0); clan_nums.insert(clan, n+1); } - for (spawner, position) in (&mut spawners, &positions).join() { - if *clan_nums.get(&spawner.clan).unwrap_or(&0) < spawner.amount { - if let Some(last_spawn) = spawner.last_spawn { - if time.time > last_spawn + spawner.delay { - spawner.last_spawn = None; + for (spawner, position, triggerbox) in (&mut spawners, &positions, &triggerboxes).join() { + for message in triggerbox.messages.iter() { + if *message == Trigger::Spawn { + if *clan_nums.get(&spawner.clan).unwrap_or(&0) < spawner.amount { match new.encyclopedia.construct(&spawner.template) { Ok(mut preent) => { preent.push(ComponentWrapper::Clan(spawner.clan.clone())); @@ -53,8 +53,6 @@ impl <'a> System<'a> for Spawn { Err(err) => {println!("Error: can not spawn entity from spawner: {}", err);} } } - } else { - spawner.last_spawn = Some(time.time) } } } -- cgit