diff --git a/assets/voxygen/i18n/en/hud/crafting.ftl b/assets/voxygen/i18n/en/hud/crafting.ftl index 0d61188054..2f580931c7 100644 --- a/assets/voxygen/i18n/en/hud/crafting.ftl +++ b/assets/voxygen/i18n/en/hud/crafting.ftl @@ -30,16 +30,12 @@ hud-crafting-tabs-utility = Utility hud-crafting-tabs-weapon = Weapons hud-crafting-tabs-bag = Bags hud-crafting-tabs-processed_material = Materials -hud-crafting-tabs-repair = Repair hud-crafting-dismantle_title = Dismantling hud-crafting-dismantle_explanation = Hover items in your bag to see what you can salvage. Double-Click them to start dismantling. -hud-crafting-repair_title = Repair Items -hud-crafting-repair_slot_title = Damaged Item -hud-crafting-repair_slot_desc = Place a damaged item here to repair it. hud-crafting-modular_desc = Drag Item-Parts here to craft a weapon hud-crafting-mod_weap_prim_slot_title = Primary Weapon Component hud-crafting-mod_weap_prim_slot_desc = Place a primary weapon component here (e.g. a sword blade, axe head, or bow limbs). diff --git a/common/src/comp/inventory/item/armor.rs b/common/src/comp/inventory/item/armor.rs index 1c8efe8458..4ef7b7c595 100644 --- a/common/src/comp/inventory/item/armor.rs +++ b/common/src/comp/inventory/item/armor.rs @@ -38,7 +38,7 @@ impl ArmorKind { Back => true, Ring => false, Neck => false, - Head => false, + Head => true, Tabard => false, Bag => false, } diff --git a/common/src/comp/inventory/item/tool.rs b/common/src/comp/inventory/item/tool.rs index 3309725771..71df384890 100644 --- a/common/src/comp/inventory/item/tool.rs +++ b/common/src/comp/inventory/item/tool.rs @@ -218,11 +218,12 @@ impl Mul for Stats { fn mul(self, value: DurabilityMultiplier) -> Self { let DurabilityMultiplier(value) = value; + let less_scaled = value * 0.5 + 0.5; Self { - equip_time_secs: self.equip_time_secs / value.max(0.01), + equip_time_secs: self.equip_time_secs / less_scaled.max(0.01), power: self.power * value, effect_power: self.effect_power * value, - speed: self.speed * value, + speed: self.speed * less_scaled, crit_chance: self.crit_chance * value, range: self.range * value, energy_efficiency: self.energy_efficiency * value, diff --git a/voxygen/src/hud/util.rs b/voxygen/src/hud/util.rs index 0dd1abebc1..ffef7e3540 100644 --- a/voxygen/src/hud/util.rs +++ b/voxygen/src/hud/util.rs @@ -5,7 +5,8 @@ use common::{ item::{ armor::{Armor, ArmorKind, Protection}, tool::{Hands, Tool, ToolKind}, - Effects, ItemDefinitionId, ItemDesc, ItemKind, MaterialKind, MaterialStatManifest, + Effects, Item, ItemDefinitionId, ItemDesc, ItemKind, MaterialKind, + MaterialStatManifest, }, BuffKind, }, @@ -355,6 +356,14 @@ pub fn protec2string(stat: Protection) -> String { } } +/// Gets the durability of an item in a format more intuitive for UI +pub fn item_durability(item: &dyn ItemDesc) -> Option { + let durability = item + .durability() + .or_else(|| item.has_durability().then_some(0)); + durability.map(|d| Item::MAX_DURABILITY - d) +} + pub fn ability_image(imgs: &img_ids::Imgs, ability_id: &str) -> image::Id { match ability_id { // Debug stick diff --git a/voxygen/src/ui/widgets/item_tooltip.rs b/voxygen/src/ui/widgets/item_tooltip.rs index e6db678eb8..761fa0818e 100644 --- a/voxygen/src/ui/widgets/item_tooltip.rs +++ b/voxygen/src/ui/widgets/item_tooltip.rs @@ -711,6 +711,13 @@ impl<'a> Widget for ItemTooltip<'a> { equipped_tool_stats.buff_strength, ); + let tool_durability = + util::item_durability(item).unwrap_or(Item::MAX_DURABILITY); + let equipped_durability = + util::item_durability(equipped_item).unwrap_or(Item::MAX_DURABILITY); + let durability_diff = + util::comparison(tool_durability, equipped_durability); + let mut diff_text = |text: String, color, id_index| { widget::Text::new(&text) .align_middle_y_of(state.ids.stats[id_index]) @@ -766,6 +773,14 @@ impl<'a> Widget for ItemTooltip<'a> { ); diff_text(text, buff_strength_diff.1, 6) } + if tool_durability != equipped_durability { + let text = format!( + "{} {}", + &durability_diff.0, + tool_durability as i32 - equipped_durability as i32 + ); + diff_text(text, durability_diff.1, 7) + } } } }, @@ -890,8 +905,7 @@ impl<'a> Widget for ItemTooltip<'a> { index += 1; } - if item.has_durability() { - let durability = Item::MAX_DURABILITY - item.durability().unwrap_or(0); + if let Some(durability) = util::item_durability(item) { stat_text( format!( "{} : {}/{}", @@ -931,6 +945,11 @@ impl<'a> Widget for ItemTooltip<'a> { let stealth_diff = util::option_comparison(&armor_stats.stealth, &equipped_stats.stealth); + let armor_durability = util::item_durability(item); + let equipped_durability = util::item_durability(equipped_item); + let durability_diff = + util::option_comparison(&armor_durability, &equipped_durability); + let mut diff_text = |text: String, color, id_index| { widget::Text::new(&text) .align_middle_y_of(state.ids.stats[id_index]) @@ -999,6 +1018,14 @@ impl<'a> Widget for ItemTooltip<'a> { diff_text(text, stealth_diff.1, index); } } + index += armor_stats.stealth.is_some() as usize; + + if armor_durability != equipped_durability { + let diff = armor_durability.unwrap_or(Item::MAX_DURABILITY) as i32 + - equipped_durability.unwrap_or(Item::MAX_DURABILITY) as i32; + let text = format!("{} {}", &durability_diff.0, diff); + diff_text(text, durability_diff.1, index); + } } } },