From 18a59df0502f562426e83e2bb1fc5d1d1aa25d5a Mon Sep 17 00:00:00 2001 From: Andrei Kortunov Date: Sun, 17 Feb 2019 10:24:25 +0400 Subject: [PATCH 1/7] Throw exceptions by value instead of reference --- apps/openmw/mwgui/widgets.cpp | 2 +- components/sdlutil/sdlinputwrapper.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwgui/widgets.cpp b/apps/openmw/mwgui/widgets.cpp index c3bc1ec196..c90d540721 100644 --- a/apps/openmw/mwgui/widgets.cpp +++ b/apps/openmw/mwgui/widgets.cpp @@ -41,7 +41,7 @@ namespace MWGui else if (skill < ESM::Skill::Length) setSkillId(static_cast(skill)); else - throw new std::runtime_error("Skill number out of range"); + throw std::runtime_error("Skill number out of range"); } void MWSkill::setSkillValue(const SkillValue& value) diff --git a/components/sdlutil/sdlinputwrapper.cpp b/components/sdlutil/sdlinputwrapper.cpp index f7111fdf80..c67edfbf38 100644 --- a/components/sdlutil/sdlinputwrapper.cpp +++ b/components/sdlutil/sdlinputwrapper.cpp @@ -368,7 +368,7 @@ InputWrapper::InputWrapper(SDL_Window* window, osg::ref_ptr v } else { - throw new std::runtime_error("Tried to package non-motion event!"); + throw std::runtime_error("Tried to package non-motion event!"); } return pack_evt; From ad9412a117989cef87e4b43a7d06055a558fe6ab Mon Sep 17 00:00:00 2001 From: Andrei Kortunov Date: Sun, 17 Feb 2019 11:42:22 +0400 Subject: [PATCH 2/7] Remove some redundant checks --- apps/openmw/mwclass/npc.cpp | 2 +- apps/openmw/mwgui/hud.cpp | 2 +- apps/openmw/mwrender/actoranimation.cpp | 46 ++++++++++++------------- 3 files changed, 25 insertions(+), 25 deletions(-) diff --git a/apps/openmw/mwclass/npc.cpp b/apps/openmw/mwclass/npc.cpp index 317764e0cb..869b289796 100644 --- a/apps/openmw/mwclass/npc.cpp +++ b/apps/openmw/mwclass/npc.cpp @@ -780,7 +780,7 @@ namespace MWClass MWWorld::Ptr armor = ((armorslot != inv.end()) ? *armorslot : MWWorld::Ptr()); if(!armor.isEmpty() && armor.getTypeName() == typeid(ESM::Armor).name()) { - if (attacker.isEmpty() || (!attacker.isEmpty() && !(object.isEmpty() && !attacker.getClass().isNpc()))) // Unarmed creature attacks don't affect armor condition + if (!object.isEmpty() || attacker.isEmpty() || attacker.getClass().isNpc()) // Unarmed creature attacks don't affect armor condition { int armorhealth = armor.getClass().getItemHealth(armor); armorhealth -= std::min(damageDiff, armorhealth); diff --git a/apps/openmw/mwgui/hud.cpp b/apps/openmw/mwgui/hud.cpp index de85f296dd..54476c48e3 100644 --- a/apps/openmw/mwgui/hud.cpp +++ b/apps/openmw/mwgui/hud.cpp @@ -262,7 +262,7 @@ namespace MWGui if (mode == GM_Console) MWBase::Environment::get().getWindowManager()->setConsoleSelectedObject(object); - else if ((mode == GM_Container) || (mode == GM_Inventory)) + else //if ((mode == GM_Container) || (mode == GM_Inventory)) { // pick up object if (!object.isEmpty()) diff --git a/apps/openmw/mwrender/actoranimation.cpp b/apps/openmw/mwrender/actoranimation.cpp index 9f2f961ec2..afe8f5cd31 100644 --- a/apps/openmw/mwrender/actoranimation.cpp +++ b/apps/openmw/mwrender/actoranimation.cpp @@ -328,32 +328,32 @@ void ActorAnimation::updateQuiver() suitableAmmo = ammo->get()->mBase->mData.mType == ESM::Weapon::Arrow; } - if (ammoNode && suitableAmmo) + if (!suitableAmmo) + return; + + // We should not show more ammo than equipped and more than quiver mesh has + ammoCount = std::min(ammoCount, ammoNode->getNumChildren()); + + // Remove existing ammo nodes + for (unsigned int i=0; igetNumChildren(); ++i) { - // We should not show more ammo than equipped and more than quiver mesh has - ammoCount = std::min(ammoCount, ammoNode->getNumChildren()); + osg::ref_ptr arrowNode = ammoNode->getChild(i)->asGroup(); + if (!arrowNode->getNumChildren()) + continue; - // Remove existing ammo nodes - for (unsigned int i=0; igetNumChildren(); ++i) - { - osg::ref_ptr arrowNode = ammoNode->getChild(i)->asGroup(); - if (!arrowNode->getNumChildren()) - continue; + osg::ref_ptr arrowChildNode = arrowNode->getChild(0); + arrowNode->removeChild(arrowChildNode); + } - osg::ref_ptr arrowChildNode = arrowNode->getChild(0); - arrowNode->removeChild(arrowChildNode); - } - - // Add new ones - osg::Vec4f glowColor = getEnchantmentColor(*ammo); - std::string model = ammo->getClass().getModel(*ammo); - for (unsigned int i=0; i arrowNode = ammoNode->getChild(i)->asGroup(); - osg::ref_ptr arrow = mResourceSystem->getSceneManager()->getInstance(model, arrowNode); - if (!ammo->getClass().getEnchantment(*ammo).empty()) - addGlow(arrow, glowColor); - } + // Add new ones + osg::Vec4f glowColor = getEnchantmentColor(*ammo); + std::string model = ammo->getClass().getModel(*ammo); + for (unsigned int i=0; i arrowNode = ammoNode->getChild(i)->asGroup(); + osg::ref_ptr arrow = mResourceSystem->getSceneManager()->getInstance(model, arrowNode); + if (!ammo->getClass().getEnchantment(*ammo).empty()) + addGlow(arrow, glowColor); } } From 80c62a4fe17f731f6e3d261dc8b2717d5289fe29 Mon Sep 17 00:00:00 2001 From: Andrei Kortunov Date: Sun, 17 Feb 2019 11:44:45 +0400 Subject: [PATCH 3/7] Fix endsWith() call --- apps/wizard/unshield/unshieldworker.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/wizard/unshield/unshieldworker.cpp b/apps/wizard/unshield/unshieldworker.cpp index 7aa84d3b15..a997c9324e 100644 --- a/apps/wizard/unshield/unshieldworker.cpp +++ b/apps/wizard/unshield/unshieldworker.cpp @@ -876,7 +876,7 @@ QStringList Wizard::UnshieldWorker::findFiles(const QString &fileName, const QSt result.append(info.absoluteFilePath()); break; case Qt::MatchEndsWith: - if (info.fileName().endsWith(fileName), Qt::CaseInsensitive) + if (info.fileName().endsWith(fileName, Qt::CaseInsensitive)) result.append(info.absoluteFilePath()); break; } From dc6ef15571377904d392db29554fc0a117d42f6d Mon Sep 17 00:00:00 2001 From: Andrei Kortunov Date: Sun, 17 Feb 2019 11:53:02 +0400 Subject: [PATCH 4/7] Simplify loop in the addSkills() --- apps/openmw/mwgui/review.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/apps/openmw/mwgui/review.cpp b/apps/openmw/mwgui/review.cpp index f2f1cf8921..004a172b34 100644 --- a/apps/openmw/mwgui/review.cpp +++ b/apps/openmw/mwgui/review.cpp @@ -327,11 +327,9 @@ namespace MWGui addGroup(MWBase::Environment::get().getWindowManager()->getGameSettingString(titleId, titleDefault), coord1, coord2); - SkillList::const_iterator end = skills.end(); - for (SkillList::const_iterator it = skills.begin(); it != end; ++it) + for (const int& skillId : skills) { - int skillId = *it; - if (skillId < 0 || skillId > ESM::Skill::Length) // Skip unknown skill indexes + if (skillId < 0 || skillId >= ESM::Skill::Length) // Skip unknown skill indexes continue; assert(skillId >= 0 && skillId < ESM::Skill::Length); const std::string &skillNameId = ESM::Skill::sSkillNameIds[skillId]; From 229bd8505e021e3d1f991d0ef9c5ce1a9b6b6074 Mon Sep 17 00:00:00 2001 From: Andrei Kortunov Date: Sun, 17 Feb 2019 11:56:24 +0400 Subject: [PATCH 5/7] Init missing variables --- apps/essimporter/importercontext.hpp | 2 ++ apps/openmw/mwmechanics/aiavoiddoor.cpp | 2 +- apps/openmw/mwworld/player.cpp | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/essimporter/importercontext.hpp b/apps/essimporter/importercontext.hpp index 86501b3cb4..1a91b7cead 100644 --- a/apps/essimporter/importercontext.hpp +++ b/apps/essimporter/importercontext.hpp @@ -84,6 +84,8 @@ namespace ESSImport mGlobalMapState.mBounds.mMaxX = 0; mGlobalMapState.mBounds.mMinY = 0; mGlobalMapState.mBounds.mMaxY = 0; + + mPlayerBase.blank(); } int generateActorId() diff --git a/apps/openmw/mwmechanics/aiavoiddoor.cpp b/apps/openmw/mwmechanics/aiavoiddoor.cpp index e7d1ecee12..8fc35de49d 100644 --- a/apps/openmw/mwmechanics/aiavoiddoor.cpp +++ b/apps/openmw/mwmechanics/aiavoiddoor.cpp @@ -12,7 +12,7 @@ #include "steering.hpp" MWMechanics::AiAvoidDoor::AiAvoidDoor(const MWWorld::ConstPtr& doorPtr) -: AiPackage(), mDuration(1), mDoorPtr(doorPtr), mAdjAngle(0) +: AiPackage(), mDuration(1), mDoorPtr(doorPtr), mLastPos(ESM::Position()), mAdjAngle(0) { } diff --git a/apps/openmw/mwworld/player.cpp b/apps/openmw/mwworld/player.cpp index faf15215a8..52a5ab4192 100644 --- a/apps/openmw/mwworld/player.cpp +++ b/apps/openmw/mwworld/player.cpp @@ -30,6 +30,7 @@ namespace MWWorld Player::Player (const ESM::NPC *player) : mCellStore(0), mLastKnownExteriorPosition(0,0,0), + mMarkedPosition(ESM::Position()), mMarkedCell(nullptr), mAutoMove(false), mForwardBackward(0), From 9de0c9045acc39f8f80eea9d4627e69b73b59f87 Mon Sep 17 00:00:00 2001 From: Andrei Kortunov Date: Sun, 17 Feb 2019 11:57:18 +0400 Subject: [PATCH 6/7] Fix API usage errors --- apps/openmw/mwgui/journalwindow.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwgui/journalwindow.cpp b/apps/openmw/mwgui/journalwindow.cpp index a2f6ea1423..fe74b9830b 100644 --- a/apps/openmw/mwgui/journalwindow.cpp +++ b/apps/openmw/mwgui/journalwindow.cpp @@ -631,7 +631,7 @@ namespace if (page+2 < book->pageCount()) { - MWBase::Environment::get().getWindowManager()->playSound("book page", true); + MWBase::Environment::get().getWindowManager()->playSound("book page"); page += 2; updateShowingPages (); @@ -649,7 +649,7 @@ namespace if(page >= 2) { - MWBase::Environment::get().getWindowManager()->playSound("book page", true); + MWBase::Environment::get().getWindowManager()->playSound("book page"); page -= 2; updateShowingPages (); From ff9afda18d79babf9c40412a2a5dcc4938dc9ec2 Mon Sep 17 00:00:00 2001 From: Andrei Kortunov Date: Sun, 17 Feb 2019 12:07:14 +0400 Subject: [PATCH 7/7] Avoid to keep reference to the local 'encoder' variable outside the Engine::go() --- apps/openmw/engine.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/apps/openmw/engine.cpp b/apps/openmw/engine.cpp index 15a8f0f32b..cb106c711c 100644 --- a/apps/openmw/engine.cpp +++ b/apps/openmw/engine.cpp @@ -258,6 +258,9 @@ OMW::Engine::~Engine() mViewer = nullptr; + delete mEncoder; + mEncoder = nullptr; + if (mWindow) { SDL_DestroyWindow(mWindow); @@ -657,8 +660,7 @@ void OMW::Engine::go() settingspath = loadSettings (settings); // Create encoder - ToUTF8::Utf8Encoder encoder (mEncoding); - mEncoder = &encoder; + mEncoder = new ToUTF8::Utf8Encoder(mEncoding); // Setup viewer mViewer = new osgViewer::Viewer;