From 8fb0b26c1826faf7ab595464cdaf4f984b1bfbe8 Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Fri, 7 Jul 2023 16:29:43 -0400 Subject: [PATCH] Add subrace combo to FMV --- mdlviewer/include/fullmodelviewer.h | 1 + mdlviewer/src/fullmodelviewer.cpp | 29 +++++++++++++++++++++++------ mdlviewer/src/gearview.cpp | 5 ++++- mdlviewer/src/singlegearview.cpp | 16 ++++++++++------ 4 files changed, 38 insertions(+), 13 deletions(-) diff --git a/mdlviewer/include/fullmodelviewer.h b/mdlviewer/include/fullmodelviewer.h index 252e24a..0e88577 100644 --- a/mdlviewer/include/fullmodelviewer.h +++ b/mdlviewer/include/fullmodelviewer.h @@ -25,6 +25,7 @@ private: void updateHeightScaling(float scale); void updateBustScaling(float scale); void updateCharacterParameters(); + void updateSupportedSubraces(); std::optional topSlot; std::optional bottomSlot; diff --git a/mdlviewer/src/fullmodelviewer.cpp b/mdlviewer/src/fullmodelviewer.cpp index 9eaf2c0..b0956b6 100644 --- a/mdlviewer/src/fullmodelviewer.cpp +++ b/mdlviewer/src/fullmodelviewer.cpp @@ -56,23 +56,33 @@ FullModelViewer::FullModelViewer(GameData* data) : data(data) { layout->addLayout(controlLayout); raceCombo = new QComboBox(); - connect(raceCombo, qOverload(&QComboBox::currentIndexChanged), [this](int index) { - gearView->setRace((Race)index); - }); controlLayout->addWidget(raceCombo); for (auto [race, race_name] : magic_enum::enum_entries()) { - raceCombo->addItem(race_name.data()); + raceCombo->addItem(race_name.data(), (int)race); } + subraceCombo = new QComboBox(); + connect(subraceCombo, qOverload(&QComboBox::currentIndexChanged), [this](int index) { + gearView->setSubrace((Subrace)subraceCombo->itemData(index).toInt()); + }); + controlLayout->addWidget(subraceCombo); + + connect(raceCombo, qOverload(&QComboBox::currentIndexChanged), [this](int index) { + gearView->setRace((Race)raceCombo->itemData(index).toInt()); + + updateSupportedSubraces(); + }); + updateSupportedSubraces(); + genderCombo = new QComboBox(); connect(genderCombo, qOverload(&QComboBox::currentIndexChanged), [this](int index) { - gearView->setGender((Gender)index); + gearView->setGender((Gender)genderCombo->itemData(index).toInt()); }); controlLayout->addWidget(genderCombo); for (auto [gender, gender_name] : magic_enum::enum_entries()) { - genderCombo->addItem(gender_name.data()); + genderCombo->addItem(gender_name.data(), (int)gender); } connect(this, &FullModelViewer::gearChanged, this, &FullModelViewer::reloadGear); @@ -182,4 +192,11 @@ void FullModelViewer::updateCharacterParameters() { updateBustScaling(bustScale); } +void FullModelViewer::updateSupportedSubraces() { + subraceCombo->clear(); + for (auto subrace : physis_get_supported_subraces(gearView->currentRace).subraces) { + subraceCombo->addItem(magic_enum::enum_name(subrace).data(), (int)subrace); + } +} + #include "moc_fullmodelviewer.cpp" \ No newline at end of file diff --git a/mdlviewer/src/gearview.cpp b/mdlviewer/src/gearview.cpp index 57d7a04..bd2d22b 100644 --- a/mdlviewer/src/gearview.cpp +++ b/mdlviewer/src/gearview.cpp @@ -16,11 +16,14 @@ GearView::GearView(GameData* data) : data(data) { connect(this, &GearView::gearChanged, this, [=] { reloadModel(); }); - connect(this, &GearView::raceChanged, this, [=] { reloadRaceDeforms(); reloadModel(); }); + connect(this, &GearView::subraceChanged, this, [=] { + reloadRaceDeforms(); + reloadModel(); + }); connect(this, &GearView::genderChanged, this, [=] { reloadRaceDeforms(); reloadModel(); diff --git a/mdlviewer/src/singlegearview.cpp b/mdlviewer/src/singlegearview.cpp index e3c9b8f..7e00a78 100644 --- a/mdlviewer/src/singlegearview.cpp +++ b/mdlviewer/src/singlegearview.cpp @@ -21,7 +21,7 @@ SingleGearView::SingleGearView(GameData* data) : data(data) { if (loadingComboData) return; - setRace((Race)index); + setRace((Race)raceCombo->itemData(index).toInt()); }); controlLayout->addWidget(raceCombo); @@ -30,7 +30,7 @@ SingleGearView::SingleGearView(GameData* data) : data(data) { if (loadingComboData) return; - setSubrace((Subrace)index); + setSubrace((Subrace)raceCombo->itemData(index).toInt()); }); controlLayout->addWidget(subraceCombo); @@ -39,7 +39,7 @@ SingleGearView::SingleGearView(GameData* data) : data(data) { if (loadingComboData) return; - setGender((Gender)index); + setGender((Gender)genderCombo->itemData(index).toInt()); }); controlLayout->addWidget(genderCombo); @@ -72,6 +72,9 @@ SingleGearView::SingleGearView(GameData* data) : data(data) { connect(this, &SingleGearView::raceChanged, this, [=] { gearView->setRace(currentRace); }); + connect(this, &SingleGearView::subraceChanged, this, [=] { + gearView->setSubrace(currentSubrace); + }); connect(this, &SingleGearView::genderChanged, this, [=] { gearView->setGender(currentGender); }); @@ -134,6 +137,7 @@ void SingleGearView::reloadGear() { gearView->clear(); raceCombo->setEnabled(currentGear.has_value()); + subraceCombo->setEnabled(currentGear.has_value()); genderCombo->setEnabled(currentGear.has_value()); lodCombo->setEnabled(currentGear.has_value()); addToFMVButton->setEnabled(currentGear.has_value()); @@ -147,13 +151,13 @@ void SingleGearView::reloadGear() { raceCombo->clear(); subraceCombo->clear(); for (auto [race, subrace] : gearView->supportedRaces()) { - raceCombo->addItem(magic_enum::enum_name(race).data()); - subraceCombo->addItem(magic_enum::enum_name(subrace).data()); + raceCombo->addItem(magic_enum::enum_name(race).data(), (int)race); + subraceCombo->addItem(magic_enum::enum_name(subrace).data(), (int)subrace); } genderCombo->clear(); for (auto gender : gearView->supportedGenders()) { - genderCombo->addItem(magic_enum::enum_name(gender).data()); + genderCombo->addItem(magic_enum::enum_name(gender).data(), (int)gender); } lodCombo->clear();