diff --git a/apps/openmw/mwworld/cellpreloader.cpp b/apps/openmw/mwworld/cellpreloader.cpp index 05d6efc494..e54e9d84df 100644 --- a/apps/openmw/mwworld/cellpreloader.cpp +++ b/apps/openmw/mwworld/cellpreloader.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -105,8 +106,8 @@ namespace MWWorld } } - std::string mesh; - std::string kfname; + VFS::Path::Normalized mesh; + VFS::Path::Normalized kfname; for (std::string_view path : mMeshes) { if (mAbort) @@ -121,19 +122,15 @@ namespace MWWorld if (!vfs.exists(mesh)) continue; - size_t slashpos = mesh.find_last_of("/\\"); - if (slashpos != std::string::npos && slashpos != mesh.size() - 1) + if (Misc::getFileName(mesh).starts_with('x') && Misc::getFileExtension(mesh) == "nif") { - if (Misc::StringUtils::toLower(mesh[slashpos + 1]) == 'x' - && Misc::StringUtils::ciEndsWith(mesh, ".nif")) - { - kfname = mesh; - kfname.replace(kfname.size() - 4, 4, ".kf"); - if (vfs.exists(kfname)) - mPreloadedObjects.insert(mKeyframeManager->get(kfname)); - } + kfname = mesh; + kfname.changeExtension("kf"); + if (vfs.exists(kfname)) + mPreloadedObjects.insert(mKeyframeManager->get(kfname)); } - mPreloadedObjects.insert(mSceneManager->getTemplate(VFS::Path::toNormalized(mesh))); + + mPreloadedObjects.insert(mSceneManager->getTemplate(mesh)); if (mPreloadInstances) mPreloadedObjects.insert(mBulletShapeManager->cacheInstance(mesh)); else