summaryrefslogtreecommitdiff
path: root/src/systems
diff options
context:
space:
mode:
Diffstat (limited to 'src/systems')
-rw-r--r--src/systems/building.rs17
-rw-r--r--src/systems/die.rs19
-rw-r--r--src/systems/droploot.rs15
-rw-r--r--src/systems/spawn.rs18
4 files changed, 26 insertions, 43 deletions
diff --git a/src/systems/building.rs b/src/systems/building.rs
index 0f23467..e7924b4 100644
--- a/src/systems/building.rs
+++ b/src/systems/building.rs
@@ -31,18 +31,13 @@ impl <'a> System<'a> for Building{
fn run(&mut self, (positions, mut new, triggerboxes, builds, time_offsets): Self::SystemData) {
for (position, triggerbox, build, time_offset) in (&positions, &triggerboxes, &builds, (&time_offsets).maybe()).join(){
- for message in triggerbox.messages.iter() {
- match message {
- Trigger::Build | Trigger::Change => {
- // todo: better error handling
- let mut preent = new.encyclopedia.construct(&build.obj).unwrap();
- if let Some(time) = time_offset {
- preent.push(ComponentWrapper::TimeOffset(time.clone()));
- }
- new.to_build.push((position.pos, preent));
- }
- _ => {}
+ if triggerbox.has_message(&[Trigger::Build, Trigger::Change]) {
+ // todo: better error handling
+ let mut preent = new.encyclopedia.construct(&build.obj).unwrap();
+ if let Some(time) = time_offset {
+ preent.push(ComponentWrapper::TimeOffset(time.clone()));
}
+ new.to_build.push((position.pos, preent));
}
}
}
diff --git a/src/systems/die.rs b/src/systems/die.rs
index 021448e..755ac7f 100644
--- a/src/systems/die.rs
+++ b/src/systems/die.rs
@@ -27,18 +27,13 @@ impl <'a> System<'a> for Die {
);
fn run(&mut self, (entities, triggerboxes, mut removeds, mut emigration, players): Self::SystemData) {
for (entity, triggerbox) in (&entities, &triggerboxes).join() {
- for trigger in triggerbox.messages.iter() {
- match trigger {
- 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));
- } else {
- // npcs etc get removed when dead
- removeds.insert(entity, Removed).unwrap();
- }
- }
- _ => {}
+ if triggerbox.has_message(&[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));
+ } else {
+ // npcs etc get removed when dead
+ removeds.insert(entity, Removed).unwrap();
}
}
}
diff --git a/src/systems/droploot.rs b/src/systems/droploot.rs
index 33e71c0..2b0281d 100644
--- a/src/systems/droploot.rs
+++ b/src/systems/droploot.rs
@@ -30,17 +30,12 @@ impl <'a> System<'a> for DropLoot{
fn run(&mut self, (positions, mut new, triggerboxes, loots): Self::SystemData) {
for (position, triggerbox, loot) in (&positions, &triggerboxes, &loots).join(){
- for message in triggerbox.messages.iter() {
- match message {
- Trigger::Die | Trigger::Loot => {
- for (template, chance) in &loot.loot {
- if *chance > rand::thread_rng().gen_range(0.0, 1.0) {
- // todo: better error handling
- new.create(position.pos, &template).unwrap();
- }
- }
+ if triggerbox.has_message(&[Trigger::Die, Trigger::Loot]) {
+ for (template, chance) in &loot.loot {
+ if *chance > rand::thread_rng().gen_range(0.0, 1.0) {
+ // todo: better error handling
+ new.create(position.pos, &template).unwrap();
}
- _ => {}
}
}
}
diff --git a/src/systems/spawn.rs b/src/systems/spawn.rs
index ad9e8c1..1698ca5 100644
--- a/src/systems/spawn.rs
+++ b/src/systems/spawn.rs
@@ -41,17 +41,15 @@ impl <'a> System<'a> for Spawn {
clan_nums.insert(clan, n+1);
}
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()));
- preent.push(ComponentWrapper::Home(Home{home: position.pos}));
- new.to_build.push((position.pos, preent));
- }
- Err(err) => {println!("Error: can not spawn entity from spawner: {}", err);}
+ if triggerbox.has_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()));
+ preent.push(ComponentWrapper::Home(Home{home: position.pos}));
+ new.to_build.push((position.pos, preent));
}
+ Err(err) => {println!("Error: can not spawn entity from spawner: {}", err);}
}
}
}