summaryrefslogtreecommitdiff
path: root/src/systems/die.rs
diff options
context:
space:
mode:
authortroido <troido@protonmail.com>2020-03-02 22:28:03 +0100
committertroido <troido@protonmail.com>2020-03-02 22:28:03 +0100
commit22168c8eedac95fdfde9a536a1d1f6ddf622cfa1 (patch)
tree6870bff418367fc635d64b58b3921d85ee0dbbb0 /src/systems/die.rs
parent27c0795fb70739ce5609a0f424d80491d4a8c5a1 (diff)
added purgatory
Diffstat (limited to 'src/systems/die.rs')
-rw-r--r--src/systems/die.rs40
1 files changed, 40 insertions, 0 deletions
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));
+ }
+ }
+}
+