diff --git a/armoury/src/gearview.cpp b/armoury/src/gearview.cpp index 4176c08..d0a2a6c 100644 --- a/armoury/src/gearview.cpp +++ b/armoury/src/gearview.cpp @@ -56,8 +56,8 @@ GearView::GearView(GameData* data, FileCache& cache) : data(data), cache(cache) std::vector> GearView::supportedRaces() const { std::vector> races; for (const auto &gear : loadedGears) { - for (auto [race, race_name] : magic_enum::enum_entries()) { - for (auto subrace : physis_get_supported_subraces(race).subraces) { + for (const auto [race, race_name] : magic_enum::enum_entries()) { + for (const auto subrace : physis_get_supported_subraces(race).subraces) { auto equip_path = physis_build_equipment_path(gear.info.modelInfo.primaryID, race, subrace, currentGender, gear.info.slot); if (cache.fileExists(QLatin1String(equip_path))) @@ -277,6 +277,7 @@ void GearView::updatePart() if (gearDirty) { for (auto &gearAddition : queuedGearAdditions) { + qInfo() << "Looking up" << magic_enum::enum_name(currentRace) << magic_enum::enum_name(currentSubrace) << magic_enum::enum_name(currentGender); auto mdl_data = cache.lookupFile(QLatin1String( physis_build_equipment_path(gearAddition.info.modelInfo.primaryID, currentRace, currentSubrace, currentGender, gearAddition.info.slot))); diff --git a/armoury/src/singlegearview.cpp b/armoury/src/singlegearview.cpp index 2043e68..3befd56 100644 --- a/armoury/src/singlegearview.cpp +++ b/armoury/src/singlegearview.cpp @@ -41,7 +41,7 @@ SingleGearView::SingleGearView(GameData* data, FileCache& cache) : data(data) { if (loadingComboData) return; - setSubrace(static_cast(raceCombo->itemData(index).toInt())); + setSubrace(static_cast(subraceCombo->itemData(index).toInt())); }); controlLayout->addWidget(subraceCombo); @@ -81,7 +81,11 @@ SingleGearView::SingleGearView(GameData* data, FileCache& cache) : data(data) { }); controlLayout->addWidget(exportButton); - connect(this, &SingleGearView::gearChanged, this, &SingleGearView::reloadGear); + connect(gearView, &GearView::loadingChanged, this, [this](const bool loading) { + if (!loading) { + reloadGear(); + } + }); connect(this, &SingleGearView::raceChanged, this, [=] { gearView->setRace(currentRace); }); @@ -134,6 +138,8 @@ void SingleGearView::setSubrace(Subrace subrace) { return; } + qInfo() << "Setting subrace to" << magic_enum::enum_name(subrace); + currentSubrace = subrace; Q_EMIT subraceChanged(); } @@ -183,16 +189,22 @@ void SingleGearView::reloadGear() for (auto [race, subrace] : supportedRaces) { // TODO: supportedRaces should be designed better if (!addedRaces.contains(race)) { - raceCombo->addItem(QLatin1String(magic_enum::enum_name(race).data(), static_cast(race))); + raceCombo->addItem(QLatin1String(magic_enum::enum_name(race).data()), static_cast(race)); addedRaces.push_back(race); } - subraceCombo->addItem(QLatin1String(magic_enum::enum_name(subrace).data(), static_cast(subrace))); } if (auto it = std::find_if(supportedRaces.begin(), supportedRaces.end(), [oldRace](auto p) { return std::get<0>(p) == oldRace; }); it != supportedRaces.end()) { raceCombo->setCurrentIndex(std::distance(supportedRaces.begin(), it)); } + const Race selectedRace = static_cast(raceCombo->currentData().toInt()); + for (auto [race, subrace] : supportedRaces) { + if (race == selectedRace) { + subraceCombo->addItem(QLatin1String(magic_enum::enum_name(subrace).data()), static_cast(subrace)); + } + } + if (auto it = std::find_if(supportedRaces.begin(), supportedRaces.end(), [oldSubrace](auto p) { return std::get<1>(p) == oldSubrace; }); it != supportedRaces.end()) { subraceCombo->setCurrentIndex(std::distance(supportedRaces.begin(), it)); } @@ -202,7 +214,7 @@ void SingleGearView::reloadGear() const auto supportedGenders = gearView->supportedGenders(); for (auto gender : supportedGenders) { - genderCombo->addItem(QLatin1String(magic_enum::enum_name(gender).data(), static_cast(gender))); + genderCombo->addItem(QLatin1String(magic_enum::enum_name(gender).data()), static_cast(gender)); } if (auto it = std::find_if(supportedGenders.begin(), supportedGenders.end(), [oldGender](auto p) { return p == oldGender; }); it != supportedGenders.end()) { @@ -213,6 +225,9 @@ void SingleGearView::reloadGear() for (int i = 0; i < gearView->lodCount(); i++) { lodCombo->addItem(QStringLiteral("LOD %1").arg(i), i); } + if (oldLod < gearView->lodCount()) { + lodCombo->setCurrentIndex(oldLod); + } loadingComboData = false; }