diff --git a/libxiv b/libxiv index d0e016e..b11767d 160000 --- a/libxiv +++ b/libxiv @@ -1 +1 @@ -Subproject commit d0e016e5684ab66c29a1bbe688f05fc33b08dad0 +Subproject commit b11767dc0243d06b1811a43982c76dbe2716caaf diff --git a/mdlviewer/include/mainwindow.h b/mdlviewer/include/mainwindow.h index b545240..1f365b3 100644 --- a/mdlviewer/include/mainwindow.h +++ b/mdlviewer/include/mainwindow.h @@ -4,33 +4,8 @@ #include #include "renderer.hpp" - -enum class Slot { - Head = 3, - Hands = 5, - Legs = 7, - Feet = 8, - Body = 4, - Earring = 9, - Neck = 10, - Rings = 12, - Wrists = 11 -}; - -enum class Race { - HyurMidlanderMale, - HyurMidlanderFemale -}; - -inline std::map raceNames = { - {Race::HyurMidlanderMale, "Hyur Midlander Male"}, - {Race::HyurMidlanderFemale, "Hyur Midlander Female"} -}; - -inline std::unordered_map raceIDs = { - {Race::HyurMidlanderMale, "0101"}, - {Race::HyurMidlanderFemale, "0201"} -}; +#include "types/slot.h" +#include "types/race.h" struct ModelInfo { int primaryID; @@ -42,18 +17,6 @@ struct GearInfo { ModelInfo modelInfo; }; -inline std::unordered_map slotToName = { - {Slot::Head, "met"}, - {Slot::Hands, "glv"}, - {Slot::Legs, "dwn"}, - {Slot::Feet, "sho"}, - {Slot::Body, "top"}, - {Slot::Earring, "ear"}, - {Slot::Neck, "nek"}, - {Slot::Rings, "rir"}, - {Slot::Wrists, "wrs"} -}; - class GameData; class VulkanWindow; class StandaloneWindow; diff --git a/mdlviewer/src/mainwindow.cpp b/mdlviewer/src/mainwindow.cpp index 3d995f8..2a74eae 100644 --- a/mdlviewer/src/mainwindow.cpp +++ b/mdlviewer/src/mainwindow.cpp @@ -73,6 +73,8 @@ private: }; #else #include "standalonewindow.h" +#include "equipment.h" + #endif MainWindow::MainWindow(GameData& data) : data(data) { @@ -117,7 +119,7 @@ MainWindow::MainWindow(GameData& data) : data(data) { GearInfo info = {}; info.name = row.data[9].data; - info.slot = (Slot)row.data[17].uint64Data; + info.slot = *get_slot_from_id(row.data[17].uint64Data); info.modelInfo.primaryID = parts[0]; gears.push_back(info); @@ -163,9 +165,12 @@ MainWindow::MainWindow(GameData& data) : data(data) { viewportLayout->addLayout(controlLayout); QComboBox* raceCombo = new QComboBox(); - for(auto [race, raceName] : raceNames) { + raceCombo->addItem("Midlander Male"); + raceCombo->addItem("Midlander Female"); + + /*for(auto [race, raceName] : raceNames) { raceCombo->addItem(raceName.data()); - } + }*/ connect(raceCombo, qOverload(&QComboBox::currentIndexChanged), [this](int index) { currentRace = (Race)index; @@ -222,12 +227,7 @@ void MainWindow::refreshModel() { #endif for(auto gear : loadedGears) { - QString modelID = QString("%1").arg(gear->modelInfo.primaryID, 4, 10, QLatin1Char('0')); - - QString resolvedModelPath = QString("chara/equipment/e%1/model/c%2e%3_%4.mdl"); - resolvedModelPath = resolvedModelPath.arg(modelID, raceIDs[currentRace].data(), modelID, slotToName[gear->slot].data()); - - data.extractFile(resolvedModelPath.toStdString(), "top.mdl"); + data.extractFile(build_equipment_path(gear->modelInfo.primaryID, currentRace, gear->slot), "top.mdl"); #ifndef USE_STANDALONE_WINDOW vkWindow->models.push_back(renderer->addModel(parseMDL("top.mdl"), currentLod));