summaryrefslogtreecommitdiff
path: root/src/systems/droploot.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/systems/droploot.rs')
-rw-r--r--src/systems/droploot.rs41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/systems/droploot.rs b/src/systems/droploot.rs
new file mode 100644
index 0000000..616d38d
--- /dev/null
+++ b/src/systems/droploot.rs
@@ -0,0 +1,41 @@
+
+use rand::Rng;
+
+use specs::{
+ ReadStorage,
+ WriteStorage,
+ System,
+ Join,
+ Write
+};
+
+use crate::{
+ components::{
+ Position,
+ Loot,
+ Dead
+ },
+ resources::{NewEntities}
+};
+
+
+pub struct DropLoot;
+impl <'a> System<'a> for DropLoot{
+ type SystemData = (
+ WriteStorage<'a, Position>,
+ Write<'a, NewEntities>,
+ ReadStorage<'a, Dead>,
+ ReadStorage<'a, Loot>
+ );
+
+ fn run(&mut self, (positions, mut new, deads, loots): Self::SystemData) {
+ for (position, _, loot) in (&positions, &deads, &loots).join(){
+ 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.clone()).unwrap();
+ }
+ }
+ }
+ }
+}