summaryrefslogtreecommitdiff
path: root/src/systems/spawn.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/systems/spawn.rs')
-rw-r--r--src/systems/spawn.rs22
1 files changed, 10 insertions, 12 deletions
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)
}
}
}