rust-rl/src/inventory/remove_system.rs
Llywelwyn 85efe13dc5 made the switch to using bracket-lib directly, instead of rltk wrapper
this should solve the build issues; it makes using the non-crashing github build a lot easier, because it lets the explicit rltk dependency be removed.
2023-09-05 02:23:31 +01:00

109 lines
3.4 KiB
Rust

use crate::{
gamelog,
gui::{ item_colour, obfuscate_name },
Beatitude,
Equipped,
InBackpack,
MagicItem,
MasterDungeonMap,
Name,
ObfuscatedName,
WantsToRemoveItem,
BUC,
};
use bracket_lib::prelude::*;
use specs::prelude::*;
use crate::data::messages;
pub struct ItemRemoveSystem {}
impl<'a> System<'a> for ItemRemoveSystem {
#[allow(clippy::type_complexity)]
type SystemData = (
Entities<'a>,
ReadExpect<'a, Entity>,
ReadStorage<'a, Name>,
WriteStorage<'a, WantsToRemoveItem>,
WriteStorage<'a, Equipped>,
WriteStorage<'a, InBackpack>,
ReadStorage<'a, MagicItem>,
ReadStorage<'a, ObfuscatedName>,
ReadStorage<'a, Beatitude>,
ReadExpect<'a, MasterDungeonMap>,
);
fn run(&mut self, data: Self::SystemData) {
let (
entities,
player_entity,
names,
mut wants_remove,
mut equipped,
mut backpack,
magic_items,
obfuscated_names,
beatitudes,
dm,
) = data;
for (entity, to_remove) in (&entities, &wants_remove).join() {
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(messages::YOU_REMOVE_ITEM_CURSED)
.colour(item_colour(to_remove.item, &beatitudes))
.append_n(
obfuscate_name(
to_remove.item,
&names,
&magic_items,
&obfuscated_names,
&beatitudes,
&dm,
None
).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(messages::YOU_REMOVE_ITEM)
.colour(item_colour(to_remove.item, &beatitudes))
.append_n(
obfuscate_name(
to_remove.item,
&names,
&magic_items,
&obfuscated_names,
&beatitudes,
&dm,
None
).0
)
.colour(WHITE)
.period()
.log();
}
}
backpack
.insert(to_remove.item, InBackpack { owner: entity })
.expect("Unable to insert backpack");
}
wants_remove.clear();
}
}