diff --git a/armoury/src/gearview.cpp b/armoury/src/gearview.cpp index 5477f4a..a6e578c 100644 --- a/armoury/src/gearview.cpp +++ b/armoury/src/gearview.cpp @@ -278,7 +278,7 @@ void GearView::updatePart() if (gearDirty) { for (auto &gearAddition : queuedGearAdditions) { - QLatin1String mdlPath = QLatin1String( + auto mdlPath = QLatin1String( physis_build_equipment_path(gearAddition.info.modelInfo.primaryID, currentRace, currentSubrace, currentGender, gearAddition.info.slot)); qInfo() << "Looking up" << magic_enum::enum_name(currentRace) << magic_enum::enum_name(currentSubrace) << magic_enum::enum_name(currentGender); @@ -320,7 +320,7 @@ void GearView::updatePart() maxLod = std::max(mdl.num_lod, maxLod); - mdlPart->addModel(mdl, materials, currentLod); + mdlPart->addModel(mdl, QString(mdlPath).section(QLatin1Char('/'), -1), materials, currentLod); gearAddition.mdl = mdl; gearAddition.path = mdlPath; loadedGears.push_back(gearAddition); @@ -339,8 +339,8 @@ void GearView::updatePart() } if (face) { - auto mdl_data = - cache.lookupFile(QLatin1String(physis_build_character_path(CharacterCategory::Face, *face, currentRace, currentSubrace, currentGender))); + const auto mdlPath = QLatin1String(physis_build_character_path(CharacterCategory::Face, *face, currentRace, currentSubrace, currentGender)); + auto mdl_data = cache.lookupFile(mdlPath); if (mdl_data.size > 0) { auto mdl = physis_mdl_parse(mdl_data.size, mdl_data.data); @@ -356,13 +356,13 @@ void GearView::updatePart() } } - mdlPart->addModel(mdl, materials, currentLod); + mdlPart->addModel(mdl, QString(mdlPath).section(QLatin1Char('/'), -1), materials, currentLod); } } if (hair) { - auto mdl_data = - cache.lookupFile(QLatin1String(physis_build_character_path(CharacterCategory::Hair, *hair, currentRace, currentSubrace, currentGender))); + const auto mdlPath = QLatin1String(physis_build_character_path(CharacterCategory::Hair, *hair, currentRace, currentSubrace, currentGender)); + auto mdl_data = cache.lookupFile(mdlPath); if (mdl_data.size > 0) { auto mdl = physis_mdl_parse(mdl_data.size, mdl_data.data); @@ -378,12 +378,13 @@ void GearView::updatePart() } } - mdlPart->addModel(mdl, materials, currentLod); + mdlPart->addModel(mdl, QString(mdlPath).section(QLatin1Char('/'), -1), materials, currentLod); } } if (ear) { - auto mdl_data = cache.lookupFile(QLatin1String(physis_build_character_path(CharacterCategory::Hair, *ear, currentRace, currentSubrace, currentGender))); + const auto mdlPath = QLatin1String(physis_build_character_path(CharacterCategory::Ear, *ear, currentRace, currentSubrace, currentGender)); + auto mdl_data = cache.lookupFile(mdlPath); if (mdl_data.size > 0) { auto mdl = physis_mdl_parse(mdl_data.size, mdl_data.data); @@ -399,13 +400,13 @@ void GearView::updatePart() } } - mdlPart->addModel(mdl, materials, currentLod); + mdlPart->addModel(mdl, QString(mdlPath).section(QLatin1Char('/'), -1), materials, currentLod); } } if (tail) { - auto mdl_data = - cache.lookupFile(QLatin1String(physis_build_character_path(CharacterCategory::Tail, *tail, currentRace, currentSubrace, currentGender))); + const auto mdlPath = QLatin1String(physis_build_character_path(CharacterCategory::Tail, *tail, currentRace, currentSubrace, currentGender)); + auto mdl_data = cache.lookupFile(mdlPath); if (mdl_data.size > 0) { auto mdl = physis_mdl_parse(mdl_data.size, mdl_data.data); @@ -415,7 +416,7 @@ void GearView::updatePart() if (cache.fileExists(QLatin1String(skinmtrl_path.c_str()))) { auto mat = physis_material_parse(cache.lookupFile(QLatin1String(skinmtrl_path.c_str()))); - mdlPart->addModel(mdl, {mat}, currentLod); + mdlPart->addModel(mdl, QString(mdlPath).section(QLatin1Char('/'), -1), {mat}, currentLod); } } } diff --git a/parts/mdl/mdlpart.cpp b/parts/mdl/mdlpart.cpp index a2b16a4..2e50d3b 100644 --- a/parts/mdl/mdlpart.cpp +++ b/parts/mdl/mdlpart.cpp @@ -270,13 +270,13 @@ void MDLPart::exportModel(const QString& fileName) { for (int i = 0; i < lod.num_parts; i++) { auto& gltfNode = gltfModel.nodes.emplace_back();; - gltfNode.name = "placeholder Part 0.1"; + gltfNode.name = models[0].name.toStdString() + " Part " + std::to_string(i) + ".0"; gltfNode.skin = 0; gltfNode.mesh = gltfModel.meshes.size(); auto& gltfMesh = gltfModel.meshes.emplace_back(); - gltfMesh.name = "what?"; + gltfMesh.name = gltfNode.name + " Mesh Attribute"; auto& gltfPrimitive = gltfMesh.primitives.emplace_back(); gltfPrimitive.attributes["POSITION"] = gltfModel.accessors.size(); @@ -366,10 +366,12 @@ void MDLPart::clear() { Q_EMIT modelChanged(); } -void MDLPart::addModel(physis_MDL mdl, std::vector materials, int lod) { +void MDLPart::addModel(physis_MDL mdl, const QString &name, std::vector materials, int lod) +{ qDebug() << "Adding model to MDLPart"; auto model = renderer->addModel(mdl, lod); + model.name = name; std::transform( materials.begin(), materials.end(), std::back_inserter(model.materials), [this](const physis_Material& mat) { diff --git a/parts/mdl/mdlpart.h b/parts/mdl/mdlpart.h index b14bc1a..f0d3ffd 100644 --- a/parts/mdl/mdlpart.h +++ b/parts/mdl/mdlpart.h @@ -58,7 +58,7 @@ public Q_SLOTS: void clear(); /// Adds a new MDL with a list of materials used. - void addModel(physis_MDL mdl, std::vector materials, int lod); + void addModel(physis_MDL mdl, const QString &name, std::vector materials, int lod); void removeModel(const physis_MDL &mdl); diff --git a/renderer/include/renderer.hpp b/renderer/include/renderer.hpp index 75c1666..7e4e65b 100644 --- a/renderer/include/renderer.hpp +++ b/renderer/include/renderer.hpp @@ -3,6 +3,7 @@ #pragma once +#include #include #include #include @@ -42,6 +43,8 @@ struct RenderMaterial { }; struct RenderModel { + QString name; + physis_MDL model; std::vector parts; std::array boneData;