Use normalized path in ActorAnimation::attachMesh

pull/3236/head
elsid 3 months ago
parent f1533c215d
commit d7e99f988b
No known key found for this signature in database
GPG Key ID: 4DE04C198CBA7625

@ -67,14 +67,13 @@ namespace MWRender
} }
PartHolderPtr ActorAnimation::attachMesh( PartHolderPtr ActorAnimation::attachMesh(
const std::string& model, std::string_view bonename, bool enchantedGlow, osg::Vec4f* glowColor) VFS::Path::NormalizedView model, std::string_view bonename, bool enchantedGlow, osg::Vec4f* glowColor)
{ {
osg::Group* parent = getBoneByName(bonename); osg::Group* parent = getBoneByName(bonename);
if (!parent) if (!parent)
return nullptr; return nullptr;
osg::ref_ptr<osg::Node> instance osg::ref_ptr<osg::Node> instance = mResourceSystem->getSceneManager()->getInstance(model, parent);
= mResourceSystem->getSceneManager()->getInstance(VFS::Path::toNormalized(model), parent);
const NodeMap& nodeMap = getNodeMap(); const NodeMap& nodeMap = getNodeMap();
NodeMap::const_iterator found = nodeMap.find(bonename); NodeMap::const_iterator found = nodeMap.find(bonename);
@ -217,13 +216,13 @@ namespace MWRender
return; return;
} }
std::string mesh = getSheathedShieldMesh(*shield); const VFS::Path::Normalized mesh = getSheathedShieldMesh(*shield);
if (mesh.empty()) if (mesh.empty())
return; return;
std::string_view boneName = "Bip01 AttachShield"; constexpr std::string_view boneName = "Bip01 AttachShield";
osg::Vec4f glowColor = shield->getClass().getEnchantmentColor(*shield); osg::Vec4f glowColor = shield->getClass().getEnchantmentColor(*shield);
const std::string holsteredName = addSuffixBeforeExtension(mesh, "_sh"); const VFS::Path::Normalized holsteredName = addSuffixBeforeExtension(mesh, "_sh");
bool isEnchanted = !shield->getClass().getEnchantment(*shield).empty(); bool isEnchanted = !shield->getClass().getEnchantment(*shield).empty();
// If we have no dedicated sheath model, use basic shield model as fallback. // If we have no dedicated sheath model, use basic shield model as fallback.
@ -244,8 +243,7 @@ namespace MWRender
// file. // file.
if (shieldNode && !shieldNode->getNumChildren()) if (shieldNode && !shieldNode->getNumChildren())
{ {
osg::ref_ptr<osg::Node> fallbackNode osg::ref_ptr<osg::Node> fallbackNode = mResourceSystem->getSceneManager()->getInstance(mesh, shieldNode);
= mResourceSystem->getSceneManager()->getInstance(VFS::Path::toNormalized(mesh), shieldNode);
if (isEnchanted) if (isEnchanted)
SceneUtil::addEnchantedGlow(shieldNode, mResourceSystem, glowColor); SceneUtil::addEnchantedGlow(shieldNode, mResourceSystem, glowColor);
} }
@ -340,13 +338,16 @@ namespace MWRender
if (MWMechanics::getWeaponType(type)->mWeaponClass == ESM::WeaponType::Thrown) if (MWMechanics::getWeaponType(type)->mWeaponClass == ESM::WeaponType::Thrown)
showHolsteredWeapons = false; showHolsteredWeapons = false;
std::string mesh = weapon->getClass().getCorrectedModel(*weapon); const VFS::Path::Normalized mesh = weapon->getClass().getCorrectedModel(*weapon);
std::string_view boneName = getHolsteredWeaponBoneName(*weapon); if (mesh.empty())
if (mesh.empty() || boneName.empty()) return;
const std::string_view boneName = getHolsteredWeaponBoneName(*weapon);
if (boneName.empty())
return; return;
// If the scabbard is not found, use the weapon mesh as fallback. // If the scabbard is not found, use the weapon mesh as fallback.
const std::string scabbardName = addSuffixBeforeExtension(mesh, "_sh"); const VFS::Path::Normalized scabbardName = addSuffixBeforeExtension(mesh, "_sh");
bool isEnchanted = !weapon->getClass().getEnchantment(*weapon).empty(); bool isEnchanted = !weapon->getClass().getEnchantment(*weapon).empty();
if (!mResourceSystem->getVFS()->exists(scabbardName)) if (!mResourceSystem->getVFS()->exists(scabbardName))
{ {

@ -53,13 +53,16 @@ namespace MWRender
std::string getShieldMesh(const MWWorld::ConstPtr& shield, bool female) const; std::string getShieldMesh(const MWWorld::ConstPtr& shield, bool female) const;
virtual std::string getSheathedShieldMesh(const MWWorld::ConstPtr& shield) const; virtual std::string getSheathedShieldMesh(const MWWorld::ConstPtr& shield) const;
virtual std::string_view getHolsteredWeaponBoneName(const MWWorld::ConstPtr& weapon); virtual std::string_view getHolsteredWeaponBoneName(const MWWorld::ConstPtr& weapon);
virtual PartHolderPtr attachMesh(
const std::string& model, std::string_view bonename, bool enchantedGlow, osg::Vec4f* glowColor); PartHolderPtr attachMesh(
virtual PartHolderPtr attachMesh(const std::string& model, std::string_view bonename) VFS::Path::NormalizedView model, std::string_view bonename, bool enchantedGlow, osg::Vec4f* glowColor);
PartHolderPtr attachMesh(VFS::Path::NormalizedView model, std::string_view bonename)
{ {
osg::Vec4f stubColor = osg::Vec4f(0, 0, 0, 0); osg::Vec4f stubColor = osg::Vec4f(0, 0, 0, 0);
return attachMesh(model, bonename, false, &stubColor); return attachMesh(model, bonename, false, &stubColor);
} }
osg::ref_ptr<osg::Node> attach( osg::ref_ptr<osg::Node> attach(
VFS::Path::NormalizedView model, std::string_view bonename, std::string_view bonefilter, bool isLight); VFS::Path::NormalizedView model, std::string_view bonename, std::string_view bonefilter, bool isLight);

Loading…
Cancel
Save