weapon fix, and inability to remove cursed items

This commit is contained in:
Llywelwyn 2023-08-22 08:43:56 +01:00
parent d277384cc5
commit e403a6d845
6 changed files with 79 additions and 23 deletions

View file

@ -2,7 +2,7 @@ use crate::{
gamelog,
gui::{item_colour, obfuscate_name},
Beatitude, EquipmentChanged, Equippable, Equipped, InBackpack, MagicItem, MasterDungeonMap, Name, ObfuscatedName,
WantsToUseItem,
WantsToUseItem, BUC,
};
use specs::prelude::*;
@ -47,14 +47,40 @@ impl<'a> System<'a> for ItemEquipSystem {
if let Some(can_equip) = equippable.get(wants_to_use_item.item) {
let target_slot = can_equip.slot;
let mut logger = gamelog::Logger::new();
// Remove any items target has in item's slot
let mut can_equip = true;
let mut to_unequip: Vec<Entity> = Vec::new();
for (item_entity, already_equipped, _name) in (&entities, &equipped, &names).join() {
if already_equipped.owner == target && already_equipped.slot == target_slot {
if let Some(beatitude) = beatitudes.get(item_entity) {
if beatitude.buc == BUC::Cursed {
can_equip = false;
logger = logger
.append("You can't remove the")
.colour(item_colour(item_entity, &beatitudes, &dm))
.append_n(
obfuscate_name(
item_entity,
&names,
&magic_items,
&obfuscated_names,
&beatitudes,
&dm,
None,
)
.0,
)
.colour(rltk::WHITE)
.append("!");
}
}
to_unequip.push(item_entity);
}
}
if !can_equip {
logger.log();
continue;
}
for item in to_unequip.iter() {
equipped.remove(*item);
backpack.insert(*item, InBackpack { owner: target }).expect("Unable to insert backpack");

View file

@ -1,8 +1,9 @@
use crate::{
gamelog,
gui::{item_colour, obfuscate_name},
Beatitude, Equipped, InBackpack, MagicItem, MasterDungeonMap, Name, ObfuscatedName, WantsToRemoveItem,
Beatitude, Equipped, InBackpack, MagicItem, MasterDungeonMap, Name, ObfuscatedName, WantsToRemoveItem, BUC,
};
use rltk::prelude::*;
use specs::prelude::*;
pub struct ItemRemoveSystem {}
@ -37,11 +38,14 @@ impl<'a> System<'a> for ItemRemoveSystem {
) = data;
for (entity, to_remove) in (&entities, &wants_remove).join() {
equipped.remove(to_remove.item);
if let Some(_) = names.get(to_remove.item) {
if entity == *player_entity {
let mut can_remove = true;
if let Some(beatitude) = beatitudes.get(to_remove.item) {
// If cursed, can't remove!
if beatitude.buc == BUC::Cursed {
can_remove = false;
gamelog::Logger::new()
.append("You unequip the")
.append("You can't remove the")
.colour(item_colour(to_remove.item, &beatitudes, &dm))
.append_n(
obfuscate_name(
to_remove.item,
@ -54,7 +58,34 @@ impl<'a> System<'a> for ItemRemoveSystem {
)
.0,
)
.colour(WHITE)
.append("!")
.log();
}
}
if !can_remove {
continue;
}
// If not cursed, remove it
equipped.remove(to_remove.item);
if let Some(_) = names.get(to_remove.item) {
if entity == *player_entity {
gamelog::Logger::new()
.append("You unequip the")
.colour(item_colour(to_remove.item, &beatitudes, &dm))
.append_n(
obfuscate_name(
to_remove.item,
&names,
&magic_items,
&obfuscated_names,
&beatitudes,
&dm,
None,
)
.0,
)
.colour(WHITE)
.period()
.log();
}