diff --git a/armoury/src/gearview.cpp b/armoury/src/gearview.cpp index 427cd71..cebf2f8 100644 --- a/armoury/src/gearview.cpp +++ b/armoury/src/gearview.cpp @@ -49,7 +49,7 @@ std::vector> GearView::supportedRaces() const { auto equip_path = physis_build_equipment_path(gear.modelInfo.primaryID, race, subrace, currentGender, gear.slot); - if (physis_gamedata_exists(data, equip_path)) + if (cache.fileExists(QLatin1String(equip_path))) races.emplace_back(race, subrace); } } @@ -65,7 +65,7 @@ std::vector GearView::supportedGenders() const { auto equip_path = physis_build_equipment_path( gear.modelInfo.primaryID, currentRace, Subrace::Midlander, currentGender, gear.slot); - if (physis_gamedata_exists(data, equip_path)) + if (cache.fileExists(QLatin1String(equip_path))) genders.push_back(gender); } } @@ -230,12 +230,12 @@ void GearView::reloadModel() { const std::string mtrl_path = gear.getMtrlPath(material_name); const std::string skinmtrl_path = physis_build_skin_material_path(physis_get_race_code(fallbackRace, fallbackSubrace, currentGender), 1, material_name); - if (physis_gamedata_exists(data, mtrl_path.c_str())) { + if (cache.fileExists(QLatin1String(mtrl_path.c_str()))) { auto mat = physis_material_parse(cache.lookupFile(mtrl_path.c_str())); materials.push_back(mat); } - if (physis_gamedata_exists(data, skinmtrl_path.c_str())) { + if (cache.fileExists(QLatin1String(skinmtrl_path.c_str()))) { auto mat = physis_material_parse(cache.lookupFile(skinmtrl_path.c_str())); materials.push_back(mat); } @@ -259,7 +259,7 @@ void GearView::reloadModel() { const char* material_name = mdl.material_names[i]; const std::string skinmtrl_path = physis_build_face_material_path(physis_get_race_code(currentRace, currentSubrace, currentGender), *face, material_name); - if (physis_gamedata_exists(data, skinmtrl_path.c_str())) { + if (cache.fileExists(QLatin1String(skinmtrl_path.c_str()))) { auto mat = physis_material_parse(cache.lookupFile(skinmtrl_path.c_str())); materials.push_back(mat); } @@ -281,7 +281,7 @@ void GearView::reloadModel() { const char* material_name = mdl.material_names[i]; const std::string skinmtrl_path = physis_build_hair_material_path(physis_get_race_code(currentRace, currentSubrace, currentGender), *hair, material_name); - if (physis_gamedata_exists(data, skinmtrl_path.c_str())) { + if (cache.fileExists(QLatin1String(skinmtrl_path.c_str()))) { auto mat = physis_material_parse(cache.lookupFile(skinmtrl_path.c_str())); materials.push_back(mat); } @@ -303,7 +303,7 @@ void GearView::reloadModel() { const char* material_name = mdl.material_names[i]; const std::string skinmtrl_path = physis_build_ear_material_path(physis_get_race_code(currentRace, currentSubrace, currentGender), *ear, material_name); - if (physis_gamedata_exists(data, skinmtrl_path.c_str())) { + if (cache.fileExists(QLatin1String(skinmtrl_path.c_str()))) { auto mat = physis_material_parse(cache.lookupFile(skinmtrl_path.c_str())); materials.push_back(mat); } @@ -323,7 +323,7 @@ void GearView::reloadModel() { const char* material_name = mdl.material_names[0]; const std::string skinmtrl_path = physis_build_tail_material_path(physis_get_race_code(currentRace, currentSubrace, currentGender), *tail, material_name); - if (physis_gamedata_exists(data, skinmtrl_path.c_str())) { + if (cache.fileExists(QLatin1String(skinmtrl_path.c_str()))) { auto mat = physis_material_parse(cache.lookupFile(skinmtrl_path.c_str())); mdlPart->addModel(mdl, {mat}, currentLod); } diff --git a/common/include/filecache.h b/common/include/filecache.h index 9ef4e17..4adb40e 100644 --- a/common/include/filecache.h +++ b/common/include/filecache.h @@ -3,6 +3,7 @@ #pragma once +#include #include #include #include @@ -13,9 +14,11 @@ class FileCache { public: explicit FileCache(GameData& data); + bool fileExists(const QLatin1String &path); physis_Buffer& lookupFile(const QString& path); private: QMap cachedBuffers; + QHash cachedExist; GameData& data; }; \ No newline at end of file diff --git a/common/src/filecache.cpp b/common/src/filecache.cpp index 16f01f8..10a136b 100644 --- a/common/src/filecache.cpp +++ b/common/src/filecache.cpp @@ -15,3 +15,11 @@ physis_Buffer& FileCache::lookupFile(const QString& path) { return cachedBuffers[path]; } +bool FileCache::fileExists(const QLatin1String &path) +{ + if (!cachedExist.contains(path)) { + cachedExist[path] = physis_gamedata_exists(&data, path.data()); + } + + return cachedExist[path]; +}