summaryrefslogtreecommitdiff
path: root/src/systems
diff options
context:
space:
mode:
Diffstat (limited to 'src/systems')
-rw-r--r--src/systems/interact.rs13
-rw-r--r--src/systems/moving.rs25
-rw-r--r--src/systems/useitem.rs49
3 files changed, 39 insertions, 48 deletions
diff --git a/src/systems/interact.rs b/src/systems/interact.rs
index 1eb4589..0629dc1 100644
--- a/src/systems/interact.rs
+++ b/src/systems/interact.rs
@@ -59,16 +59,13 @@ impl <'a> System<'a> for Interact {
for (actor, controller, position) in (&entities, &controllers, &positions).join(){
let mut target = None;
let ear = ears.get_mut(actor);
- match &controller.control {
- Control::Interact(directions, arg) => {
- for (ent, interactable) in ground.components_near(position.pos, directions, &interactables) {
- if interactable.accepts_arg(arg){
- target = Some((ent, interactable, arg.clone()));
- break;
- }
+ if let Control::Interact(directions, arg) = &controller.control {
+ for (ent, interactable) in ground.components_near(position.pos, directions, &interactables) {
+ if interactable.accepts_arg(arg){
+ target = Some((ent, interactable, arg.clone()));
+ break;
}
}
- _ => {}
}
if let Some((ent, interactable, arg)) = target {
let mut cooldown = 2;
diff --git a/src/systems/moving.rs b/src/systems/moving.rs
index ccd29d6..eb7ccef 100644
--- a/src/systems/moving.rs
+++ b/src/systems/moving.rs
@@ -46,22 +46,19 @@ impl <'a> System<'a> for Move {
moved.clear();
entered.clear();
for (ent, controller, mut position, movable) in (&entities, &controllers, &mut positions, &movables).join(){
- match &controller.control {
- Control::Move(direction) => {
- let newpos = position.pos + direction.to_position();
- let ground_flags = ground.flags_on(newpos, &flags);
- if !ground_flags.contains(&Flag::Blocking) && ground_flags.contains(&Flag::Floor) {
- moved.insert(ent, Moved{from: position.pos}).expect("can't insert Moved");
- ground.remove(&position.pos, ent);
- position.pos = newpos;
- ground.insert(newpos, ent);
- for ent in ground.cells.get(&newpos).unwrap() {
- let _ = entered.insert(*ent, Entered);
- }
- cooldowns.insert(ent, ControlCooldown{amount: movable.cooldown}).unwrap();
+ if let Control::Move(direction) = &controller.control {
+ let newpos = position.pos + direction.to_position();
+ let ground_flags = ground.flags_on(newpos, &flags);
+ if !ground_flags.contains(&Flag::Blocking) && ground_flags.contains(&Flag::Floor) {
+ moved.insert(ent, Moved{from: position.pos}).expect("can't insert Moved");
+ ground.remove(&position.pos, ent);
+ position.pos = newpos;
+ ground.insert(newpos, ent);
+ for ent in ground.cells.get(&newpos).unwrap() {
+ let _ = entered.insert(*ent, Entered);
}
+ cooldowns.insert(ent, ControlCooldown{amount: movable.cooldown}).unwrap();
}
- _ => {}
}
}
}
diff --git a/src/systems/useitem.rs b/src/systems/useitem.rs
index a560c18..8b58d75 100644
--- a/src/systems/useitem.rs
+++ b/src/systems/useitem.rs
@@ -42,41 +42,38 @@ impl <'a> System<'a> for Use {
fn run(&mut self, (entities, controllers, positions, mut inventories, mut new, mut attacked, ground, flags, roompermissions): Self::SystemData) {
for (ent, controller, position, inventory) in (&entities, &controllers, &positions, &mut inventories).join(){
- match &controller.control {
- Control::Use(rank) => {
- if let Some(entry) = inventory.items.get_mut(*rank) {
- match &entry.item.action {
- Build(template, required_flags, blocking_flags) => {
- let ground_flags = ground.flags_on(position.pos, &flags);
- if roompermissions.build && required_flags.is_subset(&ground_flags) && blocking_flags.is_disjoint(&ground_flags){
- new.create(position.pos, &template).unwrap();
- inventory.items.remove(*rank);
- }
- }
- Eat(health_diff) => {
- AttackInbox::add_message(&mut attacked, ent, AttackMessage{typ: AttackType::Heal(*health_diff), attacker: Option::None});
+ if let Control::Use(rank) = &controller.control {
+ if let Some(entry) = inventory.items.get_mut(*rank) {
+ match &entry.item.action {
+ Build(template, required_flags, blocking_flags) => {
+ let ground_flags = ground.flags_on(position.pos, &flags);
+ if roompermissions.build && required_flags.is_subset(&ground_flags) && blocking_flags.is_disjoint(&ground_flags){
+ new.create(position.pos, &template).unwrap();
inventory.items.remove(*rank);
}
- Equip(equippable) => {
- if entry.is_equipped {
- inventory.items[*rank].is_equipped = false;
- } else {
- let slot = equippable.slot;
- for otherentry in inventory.items.iter_mut() {
- if let Equip(other) = &otherentry.item.action {
- if other.slot == slot {
- otherentry.is_equipped = false;
- }
+ }
+ Eat(health_diff) => {
+ AttackInbox::add_message(&mut attacked, ent, AttackMessage{typ: AttackType::Heal(*health_diff), attacker: Option::None});
+ inventory.items.remove(*rank);
+ }
+ Equip(equippable) => {
+ if entry.is_equipped {
+ inventory.items[*rank].is_equipped = false;
+ } else {
+ let slot = equippable.slot;
+ for otherentry in inventory.items.iter_mut() {
+ if let Equip(other) = &otherentry.item.action {
+ if other.slot == slot {
+ otherentry.is_equipped = false;
}
}
- inventory.items[*rank].is_equipped = true;
}
+ inventory.items[*rank].is_equipped = true;
}
- None => {}
}
+ None => {}
}
}
- _ => {}
}
}
}