From ea275a8aa85c6952e015a85e5fe5e30d0deced3d Mon Sep 17 00:00:00 2001 From: scrawl Date: Mon, 30 Apr 2012 18:11:34 +0200 Subject: [PATCH 1/5] extended the list of spells with no magnitude / no duration --- apps/openmw/mwgui/widgets.cpp | 100 ++++++++++++++++++++++++++++------ apps/openmw/mwgui/widgets.hpp | 2 + 2 files changed, 86 insertions(+), 16 deletions(-) diff --git a/apps/openmw/mwgui/widgets.cpp b/apps/openmw/mwgui/widgets.cpp index 2f5af64736..0af035d310 100644 --- a/apps/openmw/mwgui/widgets.cpp +++ b/apps/openmw/mwgui/widgets.cpp @@ -356,18 +356,6 @@ void MWSpellEffect::updateWidgets() if (!mWindowManager) return; - // lists effects that have no magnitude (e.g. invisiblity) - /// \todo this list is probably incomplete - std::vector effectsWithoutMagnitude; - effectsWithoutMagnitude.push_back("sEffectInvisibility"); - effectsWithoutMagnitude.push_back("sEffectStuntedMagicka"); - effectsWithoutMagnitude.push_back("sEffectParalyze"); - - // lists effects that have no duration (e.g. open lock) - /// \todo this list is probably incomplete - std::vector effectsWithoutDuration; - effectsWithoutDuration.push_back("sEffectOpen"); - const ESMS::ESMStore &store = mWindowManager->getStore(); const ESM::MagicEffect *magicEffect = store.magicEffects.search(effect.effectID); if (textWidget) @@ -401,8 +389,7 @@ void MWSpellEffect::updateWidgets() spellLine += " " + mWindowManager->getGameSettingString(attributes[effect.attribute], ""); } - bool hasMagnitude = (std::find(effectsWithoutMagnitude.begin(), effectsWithoutMagnitude.end(), effectIDStr) == effectsWithoutMagnitude.end()); - if ((effect.magnMin >= 0 || effect.magnMax >= 0) && hasMagnitude) + if ((effect.magnMin >= 0 || effect.magnMax >= 0) && effectHasMagnitude(effectIDStr)) { if (effect.magnMin == effect.magnMax) spellLine += " " + boost::lexical_cast(effect.magnMin) + " " + ((effect.magnMin == 1) ? pt : pts); @@ -415,8 +402,7 @@ void MWSpellEffect::updateWidgets() // constant effects have no duration and no target if (!(mFlags & MWEffectList::EF_Constant)) { - bool hasDuration = (std::find(effectsWithoutDuration.begin(), effectsWithoutDuration.end(), effectIDStr) == effectsWithoutDuration.end()); - if (effect.duration >= 0 && hasDuration) + if (effect.duration >= 0 && effectHasDuration(effectIDStr)) { spellLine += " " + mWindowManager->getGameSettingString("sfor", "") + " " + boost::lexical_cast(effect.duration) + ((effect.duration == 1) ? sec : secs); } @@ -590,11 +576,93 @@ std::string MWSpellEffect::effectIDToString(const short effectID) names[35] ="sEffectWeaknesstoPoison"; names[30] ="sEffectWeaknesstoShock"; + /// \todo bloodmoon and tribunal spells - can't find the IDs anywhere? + assert(names.find(effectID) != names.end() && "Unimplemented effect type"); return names[effectID]; } +bool MWSpellEffect::effectHasDuration(const std::string& effect) +{ + // lists effects that have no duration (e.g. open lock) + std::vector effectsWithoutDuration; + effectsWithoutDuration.push_back("sEffectOpen"); + effectsWithoutDuration.push_back("sOpen"); + effectsWithoutDuration.push_back("sLock"); + effectsWithoutDuration.push_back("sDispel"); + effectsWithoutDuration.push_back("sSunDamage"); + effectsWithoutDuration.push_back("sCorprus"); + effectsWithoutDuration.push_back("sVampirism"); + effectsWithoutDuration.push_back("sMark"); + effectsWithoutDuration.push_back("sRecall"); + effectsWithoutDuration.push_back("sDivineIntervention"); + effectsWithoutDuration.push_back("sAlmsiviIntervention"); + effectsWithoutDuration.push_back("sCureCommonDisease"); + effectsWithoutDuration.push_back("sCureBlightDisease"); + effectsWithoutDuration.push_back("sCureCorprusDisease"); + effectsWithoutDuration.push_back("sCurePoison"); + effectsWithoutDuration.push_back("sCureParalyzation"); + effectsWithoutDuration.push_back("sRemoveCurse"); + + return (std::find(effectsWithoutDuration.begin(), effectsWithoutDuration.end(), effect) == effectsWithoutDuration.end()); +} + +bool MWSpellEffect::effectHasMagnitude(const std::string& effect) +{ + // lists effects that have no magnitude (e.g. invisiblity) + std::vector effectsWithoutMagnitude; + effectsWithoutMagnitude.push_back("sEffectInvisibility"); + effectsWithoutMagnitude.push_back("sEffectStuntedMagicka"); + effectsWithoutMagnitude.push_back("sEffectParalyze"); + effectsWithoutMagnitude.push_back("sSoultrap"); + effectsWithoutMagnitude.push_back("sSilence"); + effectsWithoutMagnitude.push_back("sParalyze"); + effectsWithoutMagnitude.push_back("sInvisibility"); + effectsWithoutMagnitude.push_back("sWaterWalking"); + effectsWithoutMagnitude.push_back("sWaterBreathing"); + effectsWithoutMagnitude.push_back("sSummonScamp"); + effectsWithoutMagnitude.push_back("sSummonClannfear"); + effectsWithoutMagnitude.push_back("sSummonDaedroth"); + effectsWithoutMagnitude.push_back("sSummonDremora"); + effectsWithoutMagnitude.push_back("sSummonAncestralGhost"); + effectsWithoutMagnitude.push_back("sSummonSkeletalMinion"); + effectsWithoutMagnitude.push_back("sSummonBonewalker"); + effectsWithoutMagnitude.push_back("sSummonGreaterBonewalker"); + effectsWithoutMagnitude.push_back("sSummonBonelord"); + effectsWithoutMagnitude.push_back("sSummonWingedTwilight"); + effectsWithoutMagnitude.push_back("sSummonHunger"); + effectsWithoutMagnitude.push_back("sSummonGoldenSaint"); + effectsWithoutMagnitude.push_back("sSummonFlameAtronach"); + effectsWithoutMagnitude.push_back("sSummonFrostAtronach"); + effectsWithoutMagnitude.push_back("sSummonStormAtronach"); + effectsWithoutMagnitude.push_back("sSummonCenturionSphere"); + effectsWithoutMagnitude.push_back("sBoundDagger"); + effectsWithoutMagnitude.push_back("sBoundLongsword"); + effectsWithoutMagnitude.push_back("sBoundMace"); + effectsWithoutMagnitude.push_back("sBoundBattleAxe"); + effectsWithoutMagnitude.push_back("sBoundSpear"); + effectsWithoutMagnitude.push_back("sBoundLongbow"); + effectsWithoutMagnitude.push_back("sBoundCuirass"); + effectsWithoutMagnitude.push_back("sBoundHelm"); + effectsWithoutMagnitude.push_back("sBoundBoots"); + effectsWithoutMagnitude.push_back("sBoundShield"); + effectsWithoutMagnitude.push_back("sBoundGloves"); + effectsWithoutMagnitude.push_back("sStuntedMagicka"); + effectsWithoutMagnitude.push_back("sMark"); + effectsWithoutMagnitude.push_back("sRecall"); + effectsWithoutMagnitude.push_back("sDivineIntervention"); + effectsWithoutMagnitude.push_back("sAlmsiviIntervention"); + effectsWithoutMagnitude.push_back("sCureCommonDisease"); + effectsWithoutMagnitude.push_back("sCureBlightDisease"); + effectsWithoutMagnitude.push_back("sCureCorprusDisease"); + effectsWithoutMagnitude.push_back("sCurePoison"); + effectsWithoutMagnitude.push_back("sCureParalyzation"); + effectsWithoutMagnitude.push_back("sRemoveCurse"); + + return (std::find(effectsWithoutMagnitude.begin(), effectsWithoutMagnitude.end(), effect) == effectsWithoutMagnitude.end()); +} + MWSpellEffect::~MWSpellEffect() { } diff --git a/apps/openmw/mwgui/widgets.hpp b/apps/openmw/mwgui/widgets.hpp index c0e62533d8..74da7fc933 100644 --- a/apps/openmw/mwgui/widgets.hpp +++ b/apps/openmw/mwgui/widgets.hpp @@ -197,6 +197,8 @@ namespace MWGui void setFlags(int flags) { mFlags = flags; } std::string effectIDToString(const short effectID); + bool effectHasMagnitude (const std::string& effect); + bool effectHasDuration (const std::string& effect); const SpellEffectValue &getSpellEffect() const { return effect; } From fc06dc72c9f94774851452747d0993b6722c39ed Mon Sep 17 00:00:00 2001 From: scrawl Date: Mon, 30 Apr 2012 18:20:44 +0200 Subject: [PATCH 2/5] small fix --- apps/openmw/mwgui/widgets.cpp | 120 +++++++++++++++++----------------- 1 file changed, 60 insertions(+), 60 deletions(-) diff --git a/apps/openmw/mwgui/widgets.cpp b/apps/openmw/mwgui/widgets.cpp index 0af035d310..3c7f33ecd4 100644 --- a/apps/openmw/mwgui/widgets.cpp +++ b/apps/openmw/mwgui/widgets.cpp @@ -588,22 +588,22 @@ bool MWSpellEffect::effectHasDuration(const std::string& effect) // lists effects that have no duration (e.g. open lock) std::vector effectsWithoutDuration; effectsWithoutDuration.push_back("sEffectOpen"); - effectsWithoutDuration.push_back("sOpen"); - effectsWithoutDuration.push_back("sLock"); - effectsWithoutDuration.push_back("sDispel"); - effectsWithoutDuration.push_back("sSunDamage"); - effectsWithoutDuration.push_back("sCorprus"); - effectsWithoutDuration.push_back("sVampirism"); - effectsWithoutDuration.push_back("sMark"); - effectsWithoutDuration.push_back("sRecall"); - effectsWithoutDuration.push_back("sDivineIntervention"); - effectsWithoutDuration.push_back("sAlmsiviIntervention"); - effectsWithoutDuration.push_back("sCureCommonDisease"); - effectsWithoutDuration.push_back("sCureBlightDisease"); - effectsWithoutDuration.push_back("sCureCorprusDisease"); - effectsWithoutDuration.push_back("sCurePoison"); - effectsWithoutDuration.push_back("sCureParalyzation"); - effectsWithoutDuration.push_back("sRemoveCurse"); + effectsWithoutDuration.push_back("sEffectLock"); + effectsWithoutDuration.push_back("sEffectDispel"); + effectsWithoutDuration.push_back("sEffectSunDamage"); + effectsWithoutDuration.push_back("sEffectCorpus"); + effectsWithoutDuration.push_back("sEffectVampirism"); + effectsWithoutDuration.push_back("sEffectMark"); + effectsWithoutDuration.push_back("sEffectRecall"); + effectsWithoutDuration.push_back("sEffectDivineIntervention"); + effectsWithoutDuration.push_back("sEffectAlmsiviIntervention"); + effectsWithoutDuration.push_back("sEffectCureCommonDisease"); + effectsWithoutDuration.push_back("sEffectCureBlightDisease"); + effectsWithoutDuration.push_back("sEffectCureCorprusDisease"); + effectsWithoutDuration.push_back("sEffectCurePoison"); + effectsWithoutDuration.push_back("sEffectCureParalyzation"); + effectsWithoutDuration.push_back("sEffectRemoveCurse"); + effectsWithoutDuration.push_back("sEffectRestoreAttribute"); return (std::find(effectsWithoutDuration.begin(), effectsWithoutDuration.end(), effect) == effectsWithoutDuration.end()); } @@ -615,50 +615,50 @@ bool MWSpellEffect::effectHasMagnitude(const std::string& effect) effectsWithoutMagnitude.push_back("sEffectInvisibility"); effectsWithoutMagnitude.push_back("sEffectStuntedMagicka"); effectsWithoutMagnitude.push_back("sEffectParalyze"); - effectsWithoutMagnitude.push_back("sSoultrap"); - effectsWithoutMagnitude.push_back("sSilence"); - effectsWithoutMagnitude.push_back("sParalyze"); - effectsWithoutMagnitude.push_back("sInvisibility"); - effectsWithoutMagnitude.push_back("sWaterWalking"); - effectsWithoutMagnitude.push_back("sWaterBreathing"); - effectsWithoutMagnitude.push_back("sSummonScamp"); - effectsWithoutMagnitude.push_back("sSummonClannfear"); - effectsWithoutMagnitude.push_back("sSummonDaedroth"); - effectsWithoutMagnitude.push_back("sSummonDremora"); - effectsWithoutMagnitude.push_back("sSummonAncestralGhost"); - effectsWithoutMagnitude.push_back("sSummonSkeletalMinion"); - effectsWithoutMagnitude.push_back("sSummonBonewalker"); - effectsWithoutMagnitude.push_back("sSummonGreaterBonewalker"); - effectsWithoutMagnitude.push_back("sSummonBonelord"); - effectsWithoutMagnitude.push_back("sSummonWingedTwilight"); - effectsWithoutMagnitude.push_back("sSummonHunger"); - effectsWithoutMagnitude.push_back("sSummonGoldenSaint"); - effectsWithoutMagnitude.push_back("sSummonFlameAtronach"); - effectsWithoutMagnitude.push_back("sSummonFrostAtronach"); - effectsWithoutMagnitude.push_back("sSummonStormAtronach"); - effectsWithoutMagnitude.push_back("sSummonCenturionSphere"); - effectsWithoutMagnitude.push_back("sBoundDagger"); - effectsWithoutMagnitude.push_back("sBoundLongsword"); - effectsWithoutMagnitude.push_back("sBoundMace"); - effectsWithoutMagnitude.push_back("sBoundBattleAxe"); - effectsWithoutMagnitude.push_back("sBoundSpear"); - effectsWithoutMagnitude.push_back("sBoundLongbow"); - effectsWithoutMagnitude.push_back("sBoundCuirass"); - effectsWithoutMagnitude.push_back("sBoundHelm"); - effectsWithoutMagnitude.push_back("sBoundBoots"); - effectsWithoutMagnitude.push_back("sBoundShield"); - effectsWithoutMagnitude.push_back("sBoundGloves"); - effectsWithoutMagnitude.push_back("sStuntedMagicka"); - effectsWithoutMagnitude.push_back("sMark"); - effectsWithoutMagnitude.push_back("sRecall"); - effectsWithoutMagnitude.push_back("sDivineIntervention"); - effectsWithoutMagnitude.push_back("sAlmsiviIntervention"); - effectsWithoutMagnitude.push_back("sCureCommonDisease"); - effectsWithoutMagnitude.push_back("sCureBlightDisease"); - effectsWithoutMagnitude.push_back("sCureCorprusDisease"); - effectsWithoutMagnitude.push_back("sCurePoison"); - effectsWithoutMagnitude.push_back("sCureParalyzation"); - effectsWithoutMagnitude.push_back("sRemoveCurse"); + effectsWithoutMagnitude.push_back("sEffectSoultrap"); + effectsWithoutMagnitude.push_back("sEffectSilence"); + effectsWithoutMagnitude.push_back("sEffectParalyze"); + effectsWithoutMagnitude.push_back("sEffectInvisibility"); + effectsWithoutMagnitude.push_back("sEffectWaterWalking"); + effectsWithoutMagnitude.push_back("sEffectWaterBreathing"); + effectsWithoutMagnitude.push_back("sEffectSummonScamp"); + effectsWithoutMagnitude.push_back("sEffectSummonClannfear"); + effectsWithoutMagnitude.push_back("sEffectSummonDaedroth"); + effectsWithoutMagnitude.push_back("sEffectSummonDremora"); + effectsWithoutMagnitude.push_back("sEffectSummonAncestralGhost"); + effectsWithoutMagnitude.push_back("sEffectSummonSkeletalMinion"); + effectsWithoutMagnitude.push_back("sEffectSummonBonewalker"); + effectsWithoutMagnitude.push_back("sEffectSummonGreaterBonewalker"); + effectsWithoutMagnitude.push_back("sEffectSummonBonelord"); + effectsWithoutMagnitude.push_back("sEffectSummonWingedTwilight"); + effectsWithoutMagnitude.push_back("sEffectSummonHunger"); + effectsWithoutMagnitude.push_back("sEffectSummonGoldenSaint"); + effectsWithoutMagnitude.push_back("sEffectSummonFlameAtronach"); + effectsWithoutMagnitude.push_back("sEffectSummonFrostAtronach"); + effectsWithoutMagnitude.push_back("sEffectSummonStormAtronach"); + effectsWithoutMagnitude.push_back("sEffectSummonCenturionSphere"); + effectsWithoutMagnitude.push_back("sEffectBoundDagger"); + effectsWithoutMagnitude.push_back("sEffectBoundLongsword"); + effectsWithoutMagnitude.push_back("sEffectBoundMace"); + effectsWithoutMagnitude.push_back("sEffectBoundBattleAxe"); + effectsWithoutMagnitude.push_back("sEffectBoundSpear"); + effectsWithoutMagnitude.push_back("sEffectBoundLongbow"); + effectsWithoutMagnitude.push_back("sEffectBoundCuirass"); + effectsWithoutMagnitude.push_back("sEffectBoundHelm"); + effectsWithoutMagnitude.push_back("sEffectBoundBoots"); + effectsWithoutMagnitude.push_back("sEffectBoundShield"); + effectsWithoutMagnitude.push_back("sEffectBoundGloves"); + effectsWithoutMagnitude.push_back("sEffectStuntedMagicka"); + effectsWithoutMagnitude.push_back("sEffectMark"); + effectsWithoutMagnitude.push_back("sEffectRecall"); + effectsWithoutMagnitude.push_back("sEffectDivineIntervention"); + effectsWithoutMagnitude.push_back("sEffectAlmsiviIntervention"); + effectsWithoutMagnitude.push_back("sEffectCureCommonDisease"); + effectsWithoutMagnitude.push_back("sEffectCureBlightDisease"); + effectsWithoutMagnitude.push_back("sEffectCureCorprusDisease"); + effectsWithoutMagnitude.push_back("sEffectCurePoison"); + effectsWithoutMagnitude.push_back("sEffectCureParalyzation"); + effectsWithoutMagnitude.push_back("sEffectRemoveCurse"); return (std::find(effectsWithoutMagnitude.begin(), effectsWithoutMagnitude.end(), effect) == effectsWithoutMagnitude.end()); } From 6d21fe3115518c36fec2877a1c9048a8941c3927 Mon Sep 17 00:00:00 2001 From: scrawl Date: Mon, 30 Apr 2012 21:07:25 +0200 Subject: [PATCH 3/5] fixed mygui leaking some stuff resulting in lower fps after looking at tooltips and low-quality text --- apps/openmw/mwgui/tooltips.cpp | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/apps/openmw/mwgui/tooltips.cpp b/apps/openmw/mwgui/tooltips.cpp index 90b5baa679..e1cb051111 100644 --- a/apps/openmw/mwgui/tooltips.cpp +++ b/apps/openmw/mwgui/tooltips.cpp @@ -31,13 +31,10 @@ void ToolTips::onFrame(float frameDuration) { /// \todo Store a MWWorld::Ptr in the widget user data, retrieve it here and construct a tooltip dynamically - /// \todo we are destroying/creating the tooltip widgets every frame here, - /// because the tooltip might change (e.g. when trap is activated) - /// is there maybe a better way (listener when the object changes)? - for (size_t i=0; igetChildCount(); ++i) - { - mDynamicToolTipBox->_destroyChildWidget(mDynamicToolTipBox->getChildAt(i)); - } + MyGUI::Gui::getInstance().destroyWidget(mDynamicToolTipBox); + mDynamicToolTipBox = mMainWidget->createWidget("HUD_Box", + IntCoord(0, 0, mMainWidget->getCoord().width, mMainWidget->getCoord().height), + Align::Stretch, "DynamicToolTipBox"); const IntSize &viewSize = RenderManager::getInstance().getViewSize(); From 48e3c4382376089e2657e665469eeb871c1f352b Mon Sep 17 00:00:00 2001 From: scrawl Date: Mon, 30 Apr 2012 21:36:45 +0200 Subject: [PATCH 4/5] added the bloodmoon/tribunal spells --- apps/openmw/mwgui/widgets.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/apps/openmw/mwgui/widgets.cpp b/apps/openmw/mwgui/widgets.cpp index 3c7f33ecd4..0422bb0e23 100644 --- a/apps/openmw/mwgui/widgets.cpp +++ b/apps/openmw/mwgui/widgets.cpp @@ -576,7 +576,15 @@ std::string MWSpellEffect::effectIDToString(const short effectID) names[35] ="sEffectWeaknesstoPoison"; names[30] ="sEffectWeaknesstoShock"; - /// \todo bloodmoon and tribunal spells - can't find the IDs anywhere? + // bloodmoon + names[138] ="sEffectSummonCreature01"; + names[139] ="sEffectSummonCreature02"; + names[140] ="sEffectSummonCreature03"; + names[141] ="sEffectSummonCreature04"; + names[142] ="sEffectSummonCreature05"; + + // tribunal + names[137] ="sEffectSummonFabricant"; assert(names.find(effectID) != names.end() && "Unimplemented effect type"); @@ -659,6 +667,12 @@ bool MWSpellEffect::effectHasMagnitude(const std::string& effect) effectsWithoutMagnitude.push_back("sEffectCurePoison"); effectsWithoutMagnitude.push_back("sEffectCureParalyzation"); effectsWithoutMagnitude.push_back("sEffectRemoveCurse"); + effectsWithoutMagnitude.push_back("sEffectSummonCreature01"); + effectsWithoutMagnitude.push_back("sEffectSummonCreature02"); + effectsWithoutMagnitude.push_back("sEffectSummonCreature03"); + effectsWithoutMagnitude.push_back("sEffectSummonCreature04"); + effectsWithoutMagnitude.push_back("sEffectSummonCreature05"); + effectsWithoutMagnitude.push_back("sEffectSummonFabricant"); return (std::find(effectsWithoutMagnitude.begin(), effectsWithoutMagnitude.end(), effect) == effectsWithoutMagnitude.end()); } From bd132074af1541b00b3d458fb7283199a1ba17f0 Mon Sep 17 00:00:00 2001 From: scrawl Date: Mon, 30 Apr 2012 22:37:23 +0200 Subject: [PATCH 5/5] some formatting tweaks --- apps/openmw/mwgui/tooltips.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/apps/openmw/mwgui/tooltips.cpp b/apps/openmw/mwgui/tooltips.cpp index e1cb051111..9d7a7ee874 100644 --- a/apps/openmw/mwgui/tooltips.cpp +++ b/apps/openmw/mwgui/tooltips.cpp @@ -53,7 +53,6 @@ void ToolTips::onFrame(float frameDuration) std::string text = focus->getUserString("ToolTipText"); ToolTipInfo info; - if (type == "") { mDynamicToolTipBox->setVisible(false); @@ -61,7 +60,7 @@ void ToolTips::onFrame(float frameDuration) } else if (type == "Text") { - info.caption = text; + info.text = text; } else if (type == "CaptionText") { @@ -197,8 +196,8 @@ IntSize ToolTips::createToolTip(const ToolTipInfo& info) const IntPoint padding(8, 8); - const int imageCaptionHPadding = 8; - const int imageCaptionVPadding = 4; + const int imageCaptionHPadding = (caption != "" ? 8 : 0); + const int imageCaptionVPadding = (caption != "" ? 4 : 0); std::string realImage = "icons\\" + image; findImageExtension(realImage); @@ -208,7 +207,7 @@ IntSize ToolTips::createToolTip(const ToolTipInfo& info) captionWidget->setCaption(caption); IntSize captionSize = captionWidget->getTextSize(); - int captionHeight = std::max(captionSize.height, imageSize); + int captionHeight = std::max(caption != "" ? captionSize.height : 0, imageSize); EditBox* textWidget = mDynamicToolTipBox->createWidget("SandText", IntCoord(0, captionHeight+imageCaptionVPadding, 300, 300-captionHeight-imageCaptionVPadding), Align::Stretch, "ToolTipText"); textWidget->setProperty("Static", "true");