1
0
Fork 0
roguelike-game/src/gui/item_render.rs

56 lines
1.9 KiB
Rust

use ::rltk::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()
}
}