From 22168c8eedac95fdfde9a536a1d1f6ddf622cfa1 Mon Sep 17 00:00:00 2001 From: troido Date: Mon, 2 Mar 2020 22:28:03 +0100 Subject: added purgatory --- src/systems/die.rs | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 src/systems/die.rs (limited to 'src/systems/die.rs') diff --git a/src/systems/die.rs b/src/systems/die.rs new file mode 100644 index 0000000..fd953e0 --- /dev/null +++ b/src/systems/die.rs @@ -0,0 +1,40 @@ + +use specs::{ + Write, + WriteStorage, + ReadStorage, + Entities, + System, + Join +}; + +use crate::{ + components::{Mortal, Dead, Removed, Player}, + resources::Emigration, + purgatory, + playerstate::RoomPos +}; + + +pub struct Die; +impl <'a> System<'a> for Die { + type SystemData = ( + Entities<'a>, + ReadStorage<'a, Mortal>, + ReadStorage<'a, Dead>, + WriteStorage<'a, Removed>, + Write<'a, Emigration>, + ReadStorage<'a, Player> + ); + fn run(&mut self, (entities, mortals, deads, mut removeds, mut emigration, players): Self::SystemData) { + // npcs etc get removed when dead + for (entity, _, _) in (&entities, &mortals, &deads).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)); + } + } +} + -- cgit