summaryrefslogtreecommitdiff
path: root/src/systems/die.rs
diff options
context:
space:
mode:
authortroido <troido@protonmail.com>2020-04-12 23:10:10 +0200
committertroido <troido@protonmail.com>2020-04-12 23:10:10 +0200
commitcfd462a26b3ed4c5f23760a77ae87ce61dc9bbe2 (patch)
treec5118158196ec9924ba1123f6279cfe88dbca6e5 /src/systems/die.rs
parent883e56e07a48dc0d4916614abc33e40dde1d1d66 (diff)
replaced Dead component with trigger messages
Diffstat (limited to 'src/systems/die.rs')
-rw-r--r--src/systems/die.rs28
1 files changed, 18 insertions, 10 deletions
diff --git a/src/systems/die.rs b/src/systems/die.rs
index e9fb127..c6fd646 100644
--- a/src/systems/die.rs
+++ b/src/systems/die.rs
@@ -9,7 +9,7 @@ use specs::{
};
use crate::{
- components::{Dead, Removed, Player},
+ components::{Trigger, TriggerBox, Removed, Player},
resources::Emigration,
purgatory,
playerstate::RoomPos
@@ -20,19 +20,27 @@ pub struct Die;
impl <'a> System<'a> for Die {
type SystemData = (
Entities<'a>,
- ReadStorage<'a, Dead>,
+ ReadStorage<'a, TriggerBox>,
WriteStorage<'a, Removed>,
Write<'a, Emigration>,
ReadStorage<'a, Player>
);
- fn run(&mut self, (entities, deads, mut removeds, mut emigration, players): Self::SystemData) {
- // npcs etc get removed when dead
- for (entity, _, _) in (&entities, &deads, !&players).join() {
- removeds.insert(entity, Removed).unwrap();
- }
- // players move to purgatory when dead
- for (player, _) in (&players, &deads).join() {
- emigration.emigrants.push((player.id.clone(), purgatory::purgatory_id(), RoomPos::Unknown));
+ 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 => {
+ 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();
+ }
+ }
+ _ => {}
+ }
+ }
}
}
}