Display remaining item health / enchantment charge in HUD icons, display remaining enchanment charge in tooltips

This commit is contained in:
scrawl 2013-04-03 21:14:49 +02:00
parent 8ca88d1a70
commit 43cdbd033d
11 changed files with 25 additions and 11 deletions

View file

@ -182,8 +182,8 @@ namespace MWBase
virtual void activateQuickKey (int index) = 0; virtual void activateQuickKey (int index) = 0;
virtual void setSelectedSpell(const std::string& spellId, int successChancePercent) = 0; virtual void setSelectedSpell(const std::string& spellId, int successChancePercent) = 0;
virtual void setSelectedEnchantItem(const MWWorld::Ptr& item, int chargePercent) = 0; virtual void setSelectedEnchantItem(const MWWorld::Ptr& item) = 0;
virtual void setSelectedWeapon(const MWWorld::Ptr& item, int durabilityPercent) = 0; virtual void setSelectedWeapon(const MWWorld::Ptr& item) = 0;
virtual void unsetSelectedSpell() = 0; virtual void unsetSelectedSpell() = 0;
virtual void unsetSelectedWeapon() = 0; virtual void unsetSelectedWeapon() = 0;

View file

@ -260,6 +260,8 @@ namespace MWClass
} }
info.enchant = ref->mBase->mEnchant; info.enchant = ref->mBase->mEnchant;
if (!info.enchant.empty())
info.remainingEnchantCharge = ptr.getCellRef().mEnchantmentCharge;
info.text = text; info.text = text;

View file

@ -207,6 +207,8 @@ namespace MWClass
} }
info.enchant = ref->mBase->mEnchant; info.enchant = ref->mBase->mEnchant;
if (!info.enchant.empty())
info.remainingEnchantCharge = ptr.getCellRef().mEnchantmentCharge;
info.text = text; info.text = text;

View file

@ -349,6 +349,9 @@ namespace MWClass
info.enchant = ref->mBase->mEnchant; info.enchant = ref->mBase->mEnchant;
if (!info.enchant.empty())
info.remainingEnchantCharge = ptr.getCellRef().mEnchantmentCharge;
if (MWBase::Environment::get().getWindowManager()->getFullHelp()) { if (MWBase::Environment::get().getWindowManager()->getFullHelp()) {
text += MWGui::ToolTips::getMiscString(ref->mRef.mOwner, "Owner"); text += MWGui::ToolTips::getMiscString(ref->mRef.mOwner, "Owner");
text += MWGui::ToolTips::getMiscString(ref->mBase->mScript, "Script"); text += MWGui::ToolTips::getMiscString(ref->mBase->mScript, "Script");

View file

@ -294,7 +294,7 @@ namespace MWGui
if (weaponSlot == invStore.end()) if (weaponSlot == invStore.end())
mWindowManager.unsetSelectedWeapon(); mWindowManager.unsetSelectedWeapon();
else else
mWindowManager.setSelectedWeapon(*weaponSlot, 100); /// \todo track weapon durability mWindowManager.setSelectedWeapon(*weaponSlot); /// \todo track weapon durability
mPreviewDirty = true; mPreviewDirty = true;

View file

@ -346,7 +346,7 @@ namespace MWGui
store.setSelectedEnchantItem(it); store.setSelectedEnchantItem(it);
spells.setSelectedSpell(""); spells.setSelectedSpell("");
mWindowManager.setSelectedEnchantItem(item, 100); /// \todo track charge % mWindowManager.setSelectedEnchantItem(item);
} }
} }

View file

@ -382,7 +382,7 @@ namespace MWGui
store.setSelectedEnchantItem(it); store.setSelectedEnchantItem(it);
spells.setSelectedSpell(""); spells.setSelectedSpell("");
mWindowManager.setSelectedEnchantItem(item, 100); /// \todo track charge % mWindowManager.setSelectedEnchantItem(item);
updateSpells(); updateSpells();
} }

View file

@ -456,8 +456,8 @@ IntSize ToolTips::createToolTip(const MWGui::ToolTipInfo& info)
if (enchant->mData.mType == ESM::Enchantment::WhenStrikes if (enchant->mData.mType == ESM::Enchantment::WhenStrikes
|| enchant->mData.mType == ESM::Enchantment::WhenUsed) || enchant->mData.mType == ESM::Enchantment::WhenUsed)
{ {
/// \todo store the current enchantment charge somewhere int maxCharge = enchant->mData.mCharge;
int charge = enchant->mData.mCharge; int charge = (info.remainingEnchantCharge == -1) ? maxCharge : info.remainingEnchantCharge;
const int chargeWidth = 204; const int chargeWidth = 204;

View file

@ -17,6 +17,7 @@ namespace MWGui
: isPotion(false) : isPotion(false)
, imageSize(32) , imageSize(32)
, wordWrap(true) , wordWrap(true)
, remainingEnchantCharge(-1)
{} {}
std::string caption; std::string caption;
@ -26,6 +27,7 @@ namespace MWGui
// enchantment (for cloth, armor, weapons) // enchantment (for cloth, armor, weapons)
std::string enchant; std::string enchant;
int remainingEnchantCharge;
// effects (for potions, ingredients) // effects (for potions, ingredients)
Widgets::SpellEffectList effects; Widgets::SpellEffectList effects;

View file

@ -933,14 +933,19 @@ void WindowManager::setSelectedSpell(const std::string& spellId, int successChan
mSpellWindow->setTitle(spell->mName); mSpellWindow->setTitle(spell->mName);
} }
void WindowManager::setSelectedEnchantItem(const MWWorld::Ptr& item, int chargePercent) void WindowManager::setSelectedEnchantItem(const MWWorld::Ptr& item)
{ {
const ESM::Enchantment* ench = MWBase::Environment::get().getWorld()->getStore().get<ESM::Enchantment>()
.find(MWWorld::Class::get(item).getEnchantment(item));
int chargePercent = item.getCellRef().mEnchantmentCharge / static_cast<float>(ench->mData.mCharge) * 100;
mHud->setSelectedEnchantItem(item, chargePercent); mHud->setSelectedEnchantItem(item, chargePercent);
mSpellWindow->setTitle(MWWorld::Class::get(item).getName(item)); mSpellWindow->setTitle(MWWorld::Class::get(item).getName(item));
} }
void WindowManager::setSelectedWeapon(const MWWorld::Ptr& item, int durabilityPercent) void WindowManager::setSelectedWeapon(const MWWorld::Ptr& item)
{ {
int durabilityPercent = item.getCellRef().mCharge / static_cast<float>(MWWorld::Class::get(item).getItemMaxHealth(item)) * 100;
mHud->setSelectedWeapon(item, durabilityPercent); mHud->setSelectedWeapon(item, durabilityPercent);
mInventoryWindow->setTitle(MWWorld::Class::get(item).getName(item)); mInventoryWindow->setTitle(MWWorld::Class::get(item).getName(item));
} }

View file

@ -179,8 +179,8 @@ namespace MWGui
virtual void activateQuickKey (int index); virtual void activateQuickKey (int index);
virtual void setSelectedSpell(const std::string& spellId, int successChancePercent); virtual void setSelectedSpell(const std::string& spellId, int successChancePercent);
virtual void setSelectedEnchantItem(const MWWorld::Ptr& item, int chargePercent); virtual void setSelectedEnchantItem(const MWWorld::Ptr& item);
virtual void setSelectedWeapon(const MWWorld::Ptr& item, int durabilityPercent); virtual void setSelectedWeapon(const MWWorld::Ptr& item);
virtual void unsetSelectedSpell(); virtual void unsetSelectedSpell();
virtual void unsetSelectedWeapon(); virtual void unsetSelectedWeapon();