diff --git a/src/Profile/Profile.cpp b/src/Profile/Profile.cpp index c4559d0..41f5dc9 100644 --- a/src/Profile/Profile.cpp +++ b/src/Profile/Profile.cpp @@ -133,33 +133,33 @@ Profile::refreshValues() { _lastMissionId = prop ? prop->value : 0; LOG_INFO("Getting the materials."); - _verseSteel = getResource(PROFILE_MATERIAL, VerseSteel); - _undinium = getResource(PROFILE_MATERIAL, Undinium); - _necriumAlloy = getResource(PROFILE_MATERIAL, NecriumAlloy); - _lunarite = getResource(PROFILE_MATERIAL, Lunarite); - _asterite = getResource(PROFILE_MATERIAL, Asterite); - _halliteFragma = getResource(PROFILE_MATERIAL, HalliteFragma); + _materials[VerseSteel] = getResource(PROFILE_MATERIAL, VerseSteel); + _materials[Undinium] = getResource(PROFILE_MATERIAL, Undinium); + _materials[NecriumAlloy] = getResource(PROFILE_MATERIAL, NecriumAlloy); + _materials[Lunarite] = getResource(PROFILE_MATERIAL, Lunarite); + _materials[Asterite] = getResource(PROFILE_MATERIAL, Asterite); + _materials[HalliteFragma] = getResource(PROFILE_MATERIAL, HalliteFragma); - _ednil = getResource(PROFILE_MATERIAL, Ednil); - _nuflalt = getResource(PROFILE_MATERIAL, Nuflalt); - _aurelene = getResource(PROFILE_MATERIAL, Aurelene); - _soldus = getResource(PROFILE_MATERIAL, Soldus); - _synthesisedN = getResource(PROFILE_MATERIAL, SynthesisedN); - _nanoc = getResource(PROFILE_MATERIAL, Nanoc); + _materials[Ednil] = getResource(PROFILE_MATERIAL, Ednil); + _materials[Nuflalt] = getResource(PROFILE_MATERIAL, Nuflalt); + _materials[Aurelene] = getResource(PROFILE_MATERIAL, Aurelene); + _materials[Soldus] = getResource(PROFILE_MATERIAL, Soldus); + _materials[SynthesisedN] = getResource(PROFILE_MATERIAL, SynthesisedN); + _materials[Nanoc] = getResource(PROFILE_MATERIAL, Nanoc); - _alcarbonite = getResource(PROFILE_MATERIAL, Alcarbonite); - _keriphene = getResource(PROFILE_MATERIAL, Keriphene); - _nitinolCM = getResource(PROFILE_MATERIAL, NitinolCM); - _quarkium = getResource(PROFILE_MATERIAL, Quarkium); - _alterene = getResource(PROFILE_MATERIAL, Alterene); - _cosmium = getResource(PROFILE_MATERIAL, Cosmium); + _materials[Alcarbonite] = getResource(PROFILE_MATERIAL, Alcarbonite); + _materials[Keriphene] = getResource(PROFILE_MATERIAL, Keriphene); + _materials[NitinolCM] = getResource(PROFILE_MATERIAL, NitinolCM); + _materials[Quarkium] = getResource(PROFILE_MATERIAL, Quarkium); + _materials[Alterene] = getResource(PROFILE_MATERIAL, Alterene); + _materials[Cosmium] = getResource(PROFILE_MATERIAL, Cosmium); - _mixedComposition = getResource(PROFILE_QUARK_DATA, MixedComposition); - _voidResidue = getResource(PROFILE_QUARK_DATA, VoidResidue); - _muscularConstruction = getResource(PROFILE_QUARK_DATA, MuscularConstruction); - _mineralExoskeletology = getResource(PROFILE_QUARK_DATA, MineralExoskeletology); - _carbonisedSkin = getResource(PROFILE_QUARK_DATA, CarbonisedSkin); - _isolatedVoidParticle = getResource(PROFILE_QUARK_DATA, IsolatedVoidParticle); + _materials[MixedComposition] = getResource(PROFILE_QUARK_DATA, MixedComposition); + _materials[VoidResidue] = getResource(PROFILE_QUARK_DATA, VoidResidue); + _materials[MuscularConstruction] = getResource(PROFILE_QUARK_DATA, MuscularConstruction); + _materials[MineralExoskeletology] = getResource(PROFILE_QUARK_DATA, MineralExoskeletology); + _materials[CarbonisedSkin] = getResource(PROFILE_QUARK_DATA, CarbonisedSkin); + _materials[IsolatedVoidParticle] = getResource(PROFILE_QUARK_DATA, IsolatedVoidParticle); _valid = true; } @@ -252,264 +252,13 @@ Profile::lastMissionId() const { } std::int32_t -Profile::verseSteel() const { - return _verseSteel; +Profile::material(MaterialID id) const { + return _materials.at(id); } bool -Profile::setVerseSteel(std::int32_t amount) { - return setResource(PROFILE_MATERIAL, VerseSteel, amount); -} - -std::int32_t -Profile::undinium() const { - return _undinium; -} - -bool -Profile::setUndinium(std::int32_t amount) { - return setResource(PROFILE_MATERIAL, Undinium, amount); -} - -std::int32_t -Profile::necriumAlloy() const { - return _necriumAlloy; -} - -bool -Profile::setNecriumAlloy(std::int32_t amount) { - return setResource(PROFILE_MATERIAL, NecriumAlloy, amount); -} - -std::int32_t -Profile::lunarite() const { - return _lunarite; -} - -bool -Profile::setLunarite(std::int32_t amount) { - return setResource(PROFILE_MATERIAL, Lunarite, amount); -} - -std::int32_t -Profile::asterite() const { - return _asterite; -} - -bool -Profile::setAsterite(std::int32_t amount) { - return setResource(PROFILE_MATERIAL, Asterite, amount); -} - -std::int32_t -Profile::halliteFragma() const { - return _halliteFragma; -} - -bool -Profile::setHalliteFragma(std::int32_t amount) { - return setResource(PROFILE_MATERIAL, HalliteFragma, amount); -} - -std::int32_t -Profile::ednil() const { - return _ednil; -} - -bool -Profile::setEdnil(std::int32_t amount) { - return setResource(PROFILE_MATERIAL, Ednil, amount); -} - -std::int32_t -Profile::nuflalt() const { - return _nuflalt; -} - -bool -Profile::setNuflalt(std::int32_t amount) { - return setResource(PROFILE_MATERIAL, Nuflalt, amount); -} - -std::int32_t -Profile::aurelene() const { - return _aurelene; -} - -bool -Profile::setAurelene(std::int32_t amount) { - return setResource(PROFILE_MATERIAL, Aurelene, amount); -} - -std::int32_t -Profile::soldus() const { - return _soldus; -} - -bool -Profile::setSoldus(std::int32_t amount) { - return setResource(PROFILE_MATERIAL, Soldus, amount); -} - -std::int32_t -Profile::synthesisedN() const { - return _synthesisedN; -} - -bool -Profile::setSynthesisedN(std::int32_t amount) { - return setResource(PROFILE_MATERIAL, SynthesisedN, amount); -} - -std::int32_t -Profile::nanoc() const { - return _nanoc; -} - -bool -Profile::setNanoc(std::int32_t amount) { - return setResource(PROFILE_MATERIAL, Nanoc, amount); -} - -std::int32_t -Profile::alcarbonite() const { - return _alcarbonite; -} - -bool -Profile::setAlcarbonite(std::int32_t amount) { - return setResource(PROFILE_MATERIAL, Alcarbonite, amount); -} - -std::int32_t -Profile::keriphene() const { - return _keriphene; -} - -bool -Profile::setKeriphene(std::int32_t amount) { - return setResource(PROFILE_MATERIAL, Keriphene, amount); -} - -std::int32_t -Profile::nitinolCM() const { - return _nitinolCM; -} - -bool -Profile::setNitinolCM(std::int32_t amount) { - return setResource(PROFILE_MATERIAL, NitinolCM, amount); -} - -std::int32_t -Profile::quarkium() const { - return _quarkium; -} - -bool -Profile::setQuarkium(std::int32_t amount) { - return setResource(PROFILE_MATERIAL, Quarkium, amount); -} - -std::int32_t -Profile::alterene() const { - return _alterene; -} - -bool -Profile::setAlterene(std::int32_t amount) { - return setResource(PROFILE_MATERIAL, Alterene, amount); -} - -std::int32_t -Profile::cosmium() const { - return _cosmium; -} - -bool -Profile::setCosmium(std::int32_t amount) { - return setResource(PROFILE_MATERIAL, Cosmium, amount); -} - -std::int32_t -Profile::mixedComposition() const { - return _mixedComposition; -} - -bool -Profile::setMixedComposition(std::int32_t amount) { - return setResource(PROFILE_QUARK_DATA, MixedComposition, amount); -} - -std::int32_t -Profile::voidResidue() const { - return _voidResidue; -} - -bool -Profile::setVoidResidue(std::int32_t amount) { - return setResource(PROFILE_QUARK_DATA, VoidResidue, amount); -} - -std::int32_t -Profile::muscularConstruction() const { - return _muscularConstruction; -} - -bool -Profile::setMuscularConstruction(std::int32_t amount) { - return setResource(PROFILE_QUARK_DATA, MuscularConstruction, amount); -} - -std::int32_t -Profile::mineralExoskeletology() const { - return _mineralExoskeletology; -} - -bool -Profile::setMineralExoskeletology(std::int32_t amount) { - return setResource(PROFILE_QUARK_DATA, MineralExoskeletology, amount); -} - -std::int32_t -Profile::carbonisedSkin() const { - return _carbonisedSkin; -} - -bool -Profile::setCarbonisedSkin(std::int32_t amount) { - return setResource(PROFILE_QUARK_DATA, CarbonisedSkin, amount); -} - -std::int32_t -Profile::isolatedVoidParticle() const { - return _isolatedVoidParticle; -} - -bool -Profile::setIsolatedVoidParticle(std::int32_t amount) { - return setResource(PROFILE_QUARK_DATA, IsolatedVoidParticle, amount); -} - -std::int32_t -Profile::getResource(Containers::StringView container, MaterialID id) { - auto mats_prop = _profile.at(container); - - if(!mats_prop) { - return 0; - } - - auto predicate = [&id](UnrealPropertyBase::ptr& prop){ - auto res_prop = static_cast(prop.get()); - return res_prop->id == id; - }; - - auto it = std::find_if(mats_prop->items.begin(), mats_prop->items.end(), predicate); - return it != mats_prop->items.end() ? static_cast(it->get())->quantity : 0; -} - -bool -Profile::setResource(Containers::StringView container, MaterialID id, std::int32_t amount) { +Profile::setMaterial(MaterialID id, std::int32_t amount) { + Containers::StringView container = id > MixedComposition ? PROFILE_QUARK_DATA : PROFILE_MATERIAL; auto mats_prop = _profile.at(container); if(!mats_prop) { @@ -549,3 +298,20 @@ Profile::setResource(Containers::StringView container, MaterialID id, std::int32 return true; } + +std::int32_t +Profile::getResource(Containers::StringView container, MaterialID id) { + auto mats_prop = _profile.at(container); + + if(!mats_prop) { + return 0; + } + + auto predicate = [&id](UnrealPropertyBase::ptr& prop){ + auto res_prop = static_cast(prop.get()); + return res_prop->id == id; + }; + + auto it = std::find_if(mats_prop->items.begin(), mats_prop->items.end(), predicate); + return it != mats_prop->items.end() ? static_cast(it->get())->quantity : 0; +} diff --git a/src/Profile/Profile.h b/src/Profile/Profile.h index 2539de9..46c9c08 100644 --- a/src/Profile/Profile.h +++ b/src/Profile/Profile.h @@ -16,6 +16,8 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +#include + #include #include @@ -60,81 +62,11 @@ class Profile { std::int32_t lastMissionId() const; - std::int32_t verseSteel() const; - bool setVerseSteel(std::int32_t amount); - - std::int32_t undinium() const; - bool setUndinium(std::int32_t amount); - - std::int32_t necriumAlloy() const; - bool setNecriumAlloy(std::int32_t amount); - - std::int32_t lunarite() const; - bool setLunarite(std::int32_t amount); - - std::int32_t asterite() const; - bool setAsterite(std::int32_t amount); - - std::int32_t halliteFragma() const; - bool setHalliteFragma(std::int32_t amount); - - std::int32_t ednil() const; - bool setEdnil(std::int32_t amount); - - std::int32_t nuflalt() const; - bool setNuflalt(std::int32_t amount); - - std::int32_t aurelene() const; - bool setAurelene(std::int32_t amount); - - std::int32_t soldus() const; - bool setSoldus(std::int32_t amount); - - std::int32_t synthesisedN() const; - bool setSynthesisedN(std::int32_t amount); - - std::int32_t nanoc() const; - bool setNanoc(std::int32_t amount); - - std::int32_t alcarbonite() const; - bool setAlcarbonite(std::int32_t amount); - - std::int32_t keriphene() const; - bool setKeriphene(std::int32_t amount); - - std::int32_t nitinolCM() const; - bool setNitinolCM(std::int32_t amount); - - std::int32_t quarkium() const; - bool setQuarkium(std::int32_t amount); - - std::int32_t alterene() const; - bool setAlterene(std::int32_t amount); - - std::int32_t cosmium() const; - bool setCosmium(std::int32_t amount); - - std::int32_t mixedComposition() const; - bool setMixedComposition(std::int32_t amount); - - std::int32_t voidResidue() const; - bool setVoidResidue(std::int32_t amount); - - std::int32_t muscularConstruction() const; - bool setMuscularConstruction(std::int32_t amount); - - std::int32_t mineralExoskeletology() const; - bool setMineralExoskeletology(std::int32_t amount); - - std::int32_t carbonisedSkin() const; - bool setCarbonisedSkin(std::int32_t amount); - - std::int32_t isolatedVoidParticle() const; - bool setIsolatedVoidParticle(std::int32_t amount); + std::int32_t material(MaterialID id) const; + bool setMaterial(MaterialID id, std::int32_t amount); private: std::int32_t getResource(Containers::StringView container, MaterialID id); - bool setResource(Containers::StringView container, MaterialID id, std::int32_t amount); Containers::String _filename; @@ -148,33 +80,7 @@ class Profile { std::int32_t _storyProgress = 0; std::int32_t _lastMissionId = 0; - std::int32_t _verseSteel = 0; - std::int32_t _undinium = 0; - std::int32_t _necriumAlloy = 0; - std::int32_t _lunarite = 0; - std::int32_t _asterite = 0; - std::int32_t _halliteFragma = 0; - - std::int32_t _ednil = 0; - std::int32_t _nuflalt = 0; - std::int32_t _aurelene = 0; - std::int32_t _soldus = 0; - std::int32_t _synthesisedN = 0; - std::int32_t _nanoc = 0; - - std::int32_t _alcarbonite = 0; - std::int32_t _keriphene = 0; - std::int32_t _nitinolCM = 0; - std::int32_t _quarkium = 0; - std::int32_t _alterene = 0; - std::int32_t _cosmium = 0; - - std::int32_t _mixedComposition = 0; - std::int32_t _voidResidue = 0; - std::int32_t _muscularConstruction = 0; - std::int32_t _mineralExoskeletology = 0; - std::int32_t _carbonisedSkin = 0; - std::int32_t _isolatedVoidParticle = 0; + std::map _materials; Containers::String _account; diff --git a/src/SaveTool/SaveTool.h b/src/SaveTool/SaveTool.h index df4ee27..dfd9de9 100644 --- a/src/SaveTool/SaveTool.h +++ b/src/SaveTool/SaveTool.h @@ -125,8 +125,7 @@ class SaveTool: public Platform::Sdl2Application, public efsw::FileWatchListener bool drawRenamePopup(Containers::ArrayView name_view); void drawGeneralInfo(); void drawResearchInventory(); - template - void drawMaterialRow(Containers::StringView name, std::int32_t tier, Getter getter, Setter setter); + void drawMaterialRow(Containers::StringView name, std::int32_t tier, MaterialID id); void drawUnavailableMaterialRow(Containers::StringView name, std::int32_t tier); void drawMassManager(); ImGuiID drawDeleteMassPopup(int mass_index); diff --git a/src/SaveTool/SaveTool_MainManager.cpp b/src/SaveTool/SaveTool_MainManager.cpp index cd9d6a0..93ec331 100644 --- a/src/SaveTool/SaveTool_MainManager.cpp +++ b/src/SaveTool/SaveTool_MainManager.cpp @@ -106,7 +106,7 @@ SaveTool::drawIntEditPopup(int* value_to_edit, int max) { drawHelpMarker("You can either drag the widget left or right to change the value,\n" "or click on it while holding Ctrl to edit the value directly."); ImGui::SameLine(); - drawUnsafeWidget([](auto... args){ return ImGui::SliderInt("", args...); }, + drawUnsafeWidget([](auto... args){ return ImGui::SliderInt("##IntSlider", args...); }, value_to_edit, 0, max, "%d", ImGuiSliderFlags_AlwaysClamp); ImGui::SameLine(); if(drawUnsafeWidget([]{ return ImGui::Button("Apply"); })) { @@ -137,13 +137,15 @@ SaveTool::drawRenamePopup(Containers::ArrayView name_view) { (name_view[0] != ' ' && name_view[len - 1] != ' ') ? ICON_FA_CHECK : ICON_FA_TIMES); static auto callback = [](ImGuiInputTextCallbackData* data)->int { - if(data->EventChar < 256 && std::strchr("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789- ", char(data->EventChar))) { + if(data->EventChar < 256 && + std::strchr("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789- ", char(data->EventChar))) + { return 0; } return 1; }; - drawUnsafeWidget([](auto... args){ return ImGui::InputText("", args...); }, + drawUnsafeWidget([](auto... args){ return ImGui::InputText("##NameField", args...); }, name_view.data(), name_view.size(), ImGuiInputTextFlags_CallbackCharFilter, callback, nullptr); @@ -298,137 +300,80 @@ SaveTool::drawResearchInventory() { ImGui::TableNextRow(ImGuiTableRowFlags_Headers); ImGui::TableSetColumnIndex(1); - ImGui::Text("Engine materials"); + ImGui::TextUnformatted("Engine materials"); - drawMaterialRow("Verse steel", 1, - [this]{ return _currentProfile->verseSteel(); }, - [this](std::int32_t amount){ return _currentProfile->setVerseSteel(amount); }); - drawMaterialRow("Undinium", 2, - [this]{ return _currentProfile->undinium(); }, - [this](std::int32_t amount){ return _currentProfile->setUndinium(amount); }); - drawMaterialRow("Necrium alloy", 3, - [this]{ return _currentProfile->necriumAlloy(); }, - [this](std::int32_t amount){ return _currentProfile->setNecriumAlloy(amount); }); - drawMaterialRow("Lunarite", 4, - [this]{ return _currentProfile->lunarite(); }, - [this](std::int32_t amount){ return _currentProfile->setLunarite(amount); }); - drawMaterialRow("Asterite", 5, - [this]{ return _currentProfile->asterite(); }, - [this](std::int32_t amount){ return _currentProfile->setAsterite(amount); }); - drawMaterialRow("Hallite fragma", 6, - [this]{ return _currentProfile->halliteFragma(); }, - [this](std::int32_t amount){ return _currentProfile->setHalliteFragma(amount); }); + drawMaterialRow("Verse steel", 1, VerseSteel); + drawMaterialRow("Undinium", 2, Undinium); + drawMaterialRow("Necrium alloy", 3, NecriumAlloy); + drawMaterialRow("Lunarite", 4, Lunarite); + drawMaterialRow("Asterite", 5, Asterite); + drawMaterialRow("Hallite fragma", 6, HalliteFragma); drawUnavailableMaterialRow("Unnoctinium", 7); ImGui::TableNextRow(ImGuiTableRowFlags_Headers); ImGui::TableSetColumnIndex(1); - ImGui::Text("OS materials"); + ImGui::TextUnformatted("OS materials"); - drawMaterialRow("Ednil", 1, - [this]{ return _currentProfile->ednil(); }, - [this](std::int32_t amount){ return _currentProfile->setEdnil(amount); }); - drawMaterialRow("Nuflalt", 2, - [this]{ return _currentProfile->nuflalt(); }, - [this](std::int32_t amount){ return _currentProfile->setNuflalt(amount); }); - drawMaterialRow("Aurelene", 3, - [this]{ return _currentProfile->aurelene(); }, - [this](std::int32_t amount){ return _currentProfile->setAurelene(amount); }); - drawMaterialRow("Soldus", 4, - [this]{ return _currentProfile->soldus(); }, - [this](std::int32_t amount){ return _currentProfile->setSoldus(amount); }); - drawMaterialRow("Synthesized N", 5, - [this]{ return _currentProfile->synthesisedN(); }, - [this](std::int32_t amount){ return _currentProfile->setSynthesisedN(amount); }); - drawMaterialRow("Nanoc", 6, - [this]{ return _currentProfile->nanoc(); }, - [this](std::int32_t amount){ return _currentProfile->setNanoc(amount); }); + drawMaterialRow("Ednil", 1, Ednil); + drawMaterialRow("Nuflalt", 2, Nuflalt); + drawMaterialRow("Aurelene", 3, Aurelene); + drawMaterialRow("Soldus", 4, Soldus); + drawMaterialRow("Synthesized N", 5, SynthesisedN); + drawMaterialRow("Nanoc", 6, Nanoc); drawUnavailableMaterialRow("Abyssillite", 7); ImGui::TableNextRow(ImGuiTableRowFlags_Headers); ImGui::TableSetColumnIndex(1); - ImGui::Text("Architect materials"); + ImGui::TextUnformatted("Architect materials"); - drawMaterialRow("Alcarbonite", 1, - [this]{ return _currentProfile->alcarbonite(); }, - [this](std::int32_t amount){ return _currentProfile->setAlcarbonite(amount); }); - drawMaterialRow("Keripehene", 2, - [this]{ return _currentProfile->keriphene(); }, - [this](std::int32_t amount){ return _currentProfile->setKeriphene(amount); }); - drawMaterialRow("Nitinol-CM", 3, - [this]{ return _currentProfile->nitinolCM(); }, - [this](std::int32_t amount){ return _currentProfile->setNitinolCM(amount); }); - drawMaterialRow("Quarkium", 4, - [this]{ return _currentProfile->quarkium(); }, - [this](std::int32_t amount){ return _currentProfile->setQuarkium(amount); }); - drawMaterialRow("Alterene", 5, - [this]{ return _currentProfile->alterene(); }, - [this](std::int32_t amount){ return _currentProfile->setAlterene(amount); }); - drawMaterialRow("Cosmium", 6, - [this]{ return _currentProfile->cosmium(); }, - [this](std::int32_t amount){ return _currentProfile->setCosmium(amount); }); + drawMaterialRow("Alcarbonite", 1, Alcarbonite); + drawMaterialRow("Keriphene", 2, Keriphene); + drawMaterialRow("Nitinol-CM", 3, NitinolCM); + drawMaterialRow("Quarkium", 4, Quarkium); + drawMaterialRow("Alterene", 5, Alterene); + drawMaterialRow("Cosmium", 6, Cosmium); drawUnavailableMaterialRow("Purified quarkium", 7); ImGui::TableNextRow(ImGuiTableRowFlags_Headers); ImGui::TableSetColumnIndex(1); - ImGui::Text("Quark data"); + ImGui::TextUnformatted("Quark data"); - drawMaterialRow("Mixed composition", 1, - [this]{ return _currentProfile->mixedComposition(); }, - [this](std::int32_t amount){ return _currentProfile->setMixedComposition(amount); }); - drawMaterialRow("Void residue", 2, - [this]{ return _currentProfile->voidResidue(); }, - [this](std::int32_t amount){ return _currentProfile->setVoidResidue(amount); }); - drawMaterialRow("Muscular construction", 3, - [this]{ return _currentProfile->muscularConstruction(); }, - [this](std::int32_t amount){ return _currentProfile->setMuscularConstruction(amount); }); - drawMaterialRow("Mineral exoskeletology", 4, - [this]{ return _currentProfile->mineralExoskeletology(); }, - [this](std::int32_t amount){ return _currentProfile->setMineralExoskeletology(amount); }); - drawMaterialRow("Carbonized skin", 5, - [this]{ return _currentProfile->carbonisedSkin(); }, - [this](std::int32_t amount){ return _currentProfile->setCarbonisedSkin(amount); }); - drawMaterialRow("Isolated void particle", 6, - [this]{ return _currentProfile->isolatedVoidParticle(); }, - [this](std::int32_t amount){ return _currentProfile->setIsolatedVoidParticle(amount); }); + drawMaterialRow("Mixed composition", 1, MixedComposition); + drawMaterialRow("Void residue", 2, VoidResidue); + drawMaterialRow("Muscular construction", 3, MuscularConstruction); + drawMaterialRow("Mineral exoskeletology", 4, MineralExoskeletology); + drawMaterialRow("Carbonized skin", 5, CarbonisedSkin); + drawMaterialRow("Isolated void particle", 6, IsolatedVoidParticle); drawUnavailableMaterialRow("Weaponised physiology", 7); ImGui::EndTable(); } } -template void -SaveTool::drawMaterialRow(Containers::StringView name, std::int32_t tier, Getter getter, Setter setter) { - static_assert(std::is_same::value, "getter doesn't return an std::int32_t, and/or doesn't take zero arguments."); - static_assert(std::is_same::value, "setter doesn't return a bool, and/or doesn't take a single std::int32_t as an argument."); - +SaveTool::drawMaterialRow(Containers::StringView name, std::int32_t tier, MaterialID id) { ImGui::TableNextRow(); ImGui::TableSetColumnIndex(0); ImGui::Text("T%i", tier); ImGui::TableSetColumnIndex(1); ImGui::TextUnformatted(name.data()); ImGui::TableSetColumnIndex(2); - if(getter() != -1) { - ImGui::Text("%i", getter()); - if(conf().cheatMode()) { - ImGui::TableSetColumnIndex(3); - ImGui::PushID(name.data()); - static std::int32_t var = 0; - if(drawUnsafeWidget(ImGui::SmallButton, ICON_FA_EDIT)) { - (var) = getter(); - ImGui::OpenPopup("int_edit"); - } - drawTooltip("Edit"); - if(drawIntEditPopup(&(var), 9999)) { - if(!setter(var)) { - _queue.addToast(Toast::Type::Error, _currentProfile->lastError()); - } - } - ImGui::PopID(); + ImGui::Text("%i", _currentProfile->material(id)); + if(conf().cheatMode()) { + ImGui::TableSetColumnIndex(3); + ImGui::PushID(name.data()); + static std::int32_t var = 0; + if(drawUnsafeWidget(ImGui::SmallButton, ICON_FA_EDIT)) { + var = _currentProfile->material(id); + ImGui::OpenPopup("int_edit"); } - } - else { - ImGui::TextDisabled("Not found in the save file"); + drawTooltip("Edit"); + if(drawIntEditPopup(&var, 9999)) { + if(!_currentProfile->setMaterial(id, var)) { + _queue.addToast(Toast::Type::Error, _currentProfile->lastError()); + } + } + ImGui::PopID(); } }