56 lines
1.9 KiB
Rust
56 lines
1.9 KiB
Rust
use ::bracket_lib::prelude::*;
|
|
use ::specs::prelude::*;
|
|
|
|
use crate::components::{Consumable, CursedItem, MagicItem, MagicItemClass, Name, ObfuscatedName};
|
|
use crate::{colors, MasterDungeonMap};
|
|
|
|
pub fn get_item_color(ecs: &World, item: Entity) -> RGB {
|
|
let dm = ecs.fetch::<crate::map::MasterDungeonMap>();
|
|
|
|
// If the item is cursed, and you have identified it, display it in red
|
|
if let Some(name) = ecs.read_storage::<Name>().get(item) {
|
|
if ecs.read_storage::<CursedItem>().get(item).is_some()
|
|
&& dm.identified_items.contains(&name.name)
|
|
{
|
|
return colors::RED;
|
|
}
|
|
}
|
|
|
|
if let Some(magic) = ecs.read_storage::<MagicItem>().get(item) {
|
|
return match magic.class {
|
|
MagicItemClass::Common => colors::EQUIP_COMMON,
|
|
MagicItemClass::Rare => colors::EQUIP_RARE,
|
|
MagicItemClass::Legendary => colors::EQUIP_LEGEND,
|
|
};
|
|
}
|
|
|
|
colors::WHITE
|
|
}
|
|
|
|
pub fn get_item_display_name(ecs: &World, item: Entity) -> String {
|
|
if let Some(name) = ecs.read_storage::<Name>().get(item) {
|
|
if ecs.read_storage::<MagicItem>().get(item).is_some() {
|
|
let dm = ecs.fetch::<MasterDungeonMap>();
|
|
if dm.identified_items.contains(&name.name) {
|
|
if let Some(c) = ecs.read_storage::<Consumable>().get(item) {
|
|
if c.max_charges > 1 {
|
|
format!("{} ({})", name.name.clone(), c.charges)
|
|
} else {
|
|
name.name.clone()
|
|
}
|
|
} else {
|
|
name.name.clone()
|
|
}
|
|
} else if let Some(obfuscated) = ecs.read_storage::<ObfuscatedName>().get(item) {
|
|
obfuscated.name.clone()
|
|
} else {
|
|
"Unidentified magic item".to_string()
|
|
}
|
|
} else {
|
|
name.name.clone()
|
|
}
|
|
} else {
|
|
"Nameless item (bug)".to_string()
|
|
}
|
|
}
|