From e171d34192b9ffca36a6d7842363fa2c4f6f14c3 Mon Sep 17 00:00:00 2001 From: Andrei Kortunov Date: Wed, 20 Mar 2019 11:52:47 +0400 Subject: [PATCH] Init NPC type properly in the NpcAnimation --- apps/openmw/mwrender/npcanimation.cpp | 30 ++++++++++++++++----------- apps/openmw/mwrender/npcanimation.hpp | 2 ++ 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/apps/openmw/mwrender/npcanimation.cpp b/apps/openmw/mwrender/npcanimation.cpp index f1ebc80df..877c0d99b 100644 --- a/apps/openmw/mwrender/npcanimation.cpp +++ b/apps/openmw/mwrender/npcanimation.cpp @@ -238,6 +238,18 @@ void HeadAnimationTime::setBlinkStop(float value) // ---------------------------------------------------- +NpcAnimation::NpcType NpcAnimation::getNpcType() +{ + const MWWorld::Class &cls = mPtr.getClass(); + NpcAnimation::NpcType curType = Type_Normal; + if (cls.getCreatureStats(mPtr).getMagicEffects().get(ESM::MagicEffect::Vampirism).getMagnitude() > 0) + curType = Type_Vampire; + if (cls.getNpcStats(mPtr).isWerewolf()) + curType = Type_Werewolf; + + return curType; +} + static NpcAnimation::PartBoneMap createPartListMap() { NpcAnimation::PartBoneMap result; @@ -283,7 +295,7 @@ NpcAnimation::NpcAnimation(const MWWorld::Ptr& ptr, osg::ref_ptr par mViewMode(viewMode), mShowWeapons(false), mShowCarriedLeft(true), - mNpcType(Type_Normal), + mNpcType(getNpcType()), mFirstPersonFieldOfView(firstPersonFieldOfView), mSoundsDisabled(disableSounds), mAccurateAiming(false), @@ -431,8 +443,9 @@ void NpcAnimation::updateNpcBase() const MWWorld::ESMStore &store = MWBase::Environment::get().getWorld()->getStore(); const ESM::Race *race = store.get().find(mNpc->mRace); - bool isWerewolf = (mNpcType == Type_Werewolf); - bool isVampire = (mNpcType == Type_Vampire); + NpcType curType = getNpcType(); + bool isWerewolf = (curType == Type_Werewolf); + bool isVampire = (curType == Type_Vampire); bool isFemale = !mNpc->isMale(); if (isWerewolf) @@ -517,14 +530,7 @@ void NpcAnimation::updateParts() if (!mObjectRoot.get()) return; - const MWWorld::Class &cls = mPtr.getClass(); - - NpcType curType = Type_Normal; - if (cls.getCreatureStats(mPtr).getMagicEffects().get(ESM::MagicEffect::Vampirism).getMagnitude() > 0) - curType = Type_Vampire; - if (cls.getNpcStats(mPtr).isWerewolf()) - curType = Type_Werewolf; - + NpcType curType = getNpcType(); if (curType != mNpcType) { mNpcType = curType; @@ -632,7 +638,7 @@ void NpcAnimation::updateParts() showWeapons(mShowWeapons); showCarriedLeft(mShowCarriedLeft); - bool isWerewolf = (mNpcType == Type_Werewolf); + bool isWerewolf = (getNpcType() == Type_Werewolf); std::string race = (isWerewolf ? "werewolf" : Misc::StringUtils::lowerCase(mNpc->mRace)); const std::vector &parts = getBodyParts(race, !mNpc->isMale(), mViewMode == VM_FirstPerson, isWerewolf); diff --git a/apps/openmw/mwrender/npcanimation.hpp b/apps/openmw/mwrender/npcanimation.hpp index 1ec0dfa59..bed07dcdc 100644 --- a/apps/openmw/mwrender/npcanimation.hpp +++ b/apps/openmw/mwrender/npcanimation.hpp @@ -74,6 +74,8 @@ private: void updateNpcBase(); + NpcType getNpcType(); + PartHolderPtr insertBoundedPart(const std::string &model, const std::string &bonename, const std::string &bonefilter, bool enchantedGlow, osg::Vec4f* glowColor=nullptr);