diff --git a/Mods/vcmi/Content/config/english.json b/Mods/vcmi/Content/config/english.json index 31e3896d2..403eb2959 100644 --- a/Mods/vcmi/Content/config/english.json +++ b/Mods/vcmi/Content/config/english.json @@ -1083,5 +1083,14 @@ "spellSchool.core.air.name" : "Air", "spellSchool.core.earth.name" : "Earth", "spellSchool.core.fire.name" : "Fire", - "spellSchool.core.water.name" : "Water" + "spellSchool.core.water.name" : "Water", + + "resources.core.wood.name" : "Wood", + "resources.core.mercury.name" : "Mercury", + "resources.core.ore.name" : "Ore", + "resources.core.sulfur.name" : "Sulfur", + "resources.core.crystal.name" : "Crystal", + "resources.core.gems.name" : "Gems", + "resources.core.gold.name" : "Gold", + "resources.core.mithril.name" : "Mithril" } diff --git a/Mods/vcmi/Content/config/german.json b/Mods/vcmi/Content/config/german.json index 7a676eccc..c0583962a 100644 --- a/Mods/vcmi/Content/config/german.json +++ b/Mods/vcmi/Content/config/german.json @@ -1076,5 +1076,14 @@ "spellSchool.core.air.name" : "Luft", "spellSchool.core.earth.name" : "Erde", "spellSchool.core.fire.name" : "Feuer", - "spellSchool.core.water.name" : "Wasser" + "spellSchool.core.water.name" : "Wasser", + + "resources.core.wood.name" : "Holz", + "resources.core.mercury.name" : "Quecksilber", + "resources.core.ore.name" : "Erz", + "resources.core.sulfur.name" : "Schwefel", + "resources.core.crystal.name" : "Kristall", + "resources.core.gems.name" : "Edelsteine", + "resources.core.gold.name" : "Gold", + "resources.core.mithril.name" : "Mithril" } \ No newline at end of file diff --git a/client/mainmenu/CStatisticScreen.cpp b/client/mainmenu/CStatisticScreen.cpp index b54f3323a..fa80a6f68 100644 --- a/client/mainmenu/CStatisticScreen.cpp +++ b/client/mainmenu/CStatisticScreen.cpp @@ -28,6 +28,7 @@ #include "../windows/InfoWindows.h" #include "../widgets/Slider.h" +#include "../../lib/entities/ResourceTypeHandler.h" #include "../../lib/gameState/GameStatistics.h" #include "../../lib/gameState/CGameState.h" #include "../../lib/texts/CGeneralTextHandler.h" @@ -79,7 +80,7 @@ void CStatisticScreen::onSelectButton() auto possibleRes = std::vector{EGameResID::GOLD, EGameResID::WOOD, EGameResID::MERCURY, EGameResID::ORE, EGameResID::SULFUR, EGameResID::CRYSTAL, EGameResID::GEMS}; std::vector resourceText; for(const auto & res : possibleRes) - resourceText.emplace_back(LIBRARY->generaltexth->translate(TextIdentifier("core.restypes", res.getNum()).get())); + resourceText.emplace_back(MetaString::createFromTextID(LIBRARY->resourceTypeHandler->getById(res)->getNameTextID()).toString()); ENGINE->windows().createAndPushWindow(resourceText, [this, content, possibleRes](int index) { @@ -169,7 +170,7 @@ std::shared_ptr CStatisticScreen::getContent(Content c, EGameResID r case CHART_RESOURCES: plotData = extractData(statistic, [res](const StatisticDataSetEntry & val) -> float { return val.resources[res]; }); - return std::make_shared(contentArea.resize(-5), LIBRARY->generaltexth->translate(std::get<0>(contentInfo[c])) + " - " + LIBRARY->generaltexth->translate(TextIdentifier("core.restypes", res.getNum()).get()), plotData, icons, 0); + return std::make_shared(contentArea.resize(-5), LIBRARY->generaltexth->translate(std::get<0>(contentInfo[c])) + " - " + MetaString::createFromTextID(LIBRARY->resourceTypeHandler->getById(res)->getNameTextID()).toString(), plotData, icons, 0); case CHART_INCOME: plotData = extractData(statistic, [](const StatisticDataSetEntry & val) -> float { return val.income; }); @@ -193,7 +194,7 @@ std::shared_ptr CStatisticScreen::getContent(Content c, EGameResID r case CHART_NUMBER_OF_MINES: plotData = extractData(statistic, [res](StatisticDataSetEntry val) -> float { return val.numMines[res]; }); - return std::make_shared(contentArea.resize(-5), LIBRARY->generaltexth->translate(std::get<0>(contentInfo[c])) + " - " + LIBRARY->generaltexth->translate(TextIdentifier("core.restypes", res.getNum()).get()), plotData, icons, 0); + return std::make_shared(contentArea.resize(-5), LIBRARY->generaltexth->translate(std::get<0>(contentInfo[c])) + " - " + MetaString::createFromTextID(LIBRARY->resourceTypeHandler->getById(res)->getNameTextID()).toString(), plotData, icons, 0); case CHART_ARMY_STRENGTH: plotData = extractData(statistic, [](const StatisticDataSetEntry & val) -> float { return val.armyStrength; }); @@ -205,11 +206,11 @@ std::shared_ptr CStatisticScreen::getContent(Content c, EGameResID r case CHART_RESOURCES_SPENT_ARMY: plotData = extractData(statistic, [res](const StatisticDataSetEntry & val) -> float { return val.spentResourcesForArmy[res]; }); - return std::make_shared(contentArea.resize(-5), LIBRARY->generaltexth->translate(std::get<0>(contentInfo[c])) + " - " + LIBRARY->generaltexth->translate(TextIdentifier("core.restypes", res.getNum()).get()), plotData, icons, 0); + return std::make_shared(contentArea.resize(-5), LIBRARY->generaltexth->translate(std::get<0>(contentInfo[c])) + " - " + MetaString::createFromTextID(LIBRARY->resourceTypeHandler->getById(res)->getNameTextID()).toString(), plotData, icons, 0); case CHART_RESOURCES_SPENT_BUILDINGS: plotData = extractData(statistic, [res](const StatisticDataSetEntry & val) -> float { return val.spentResourcesForBuildings[res]; }); - return std::make_shared(contentArea.resize(-5), LIBRARY->generaltexth->translate(std::get<0>(contentInfo[c])) + " - " + LIBRARY->generaltexth->translate(TextIdentifier("core.restypes", res.getNum()).get()), plotData, icons, 0); + return std::make_shared(contentArea.resize(-5), LIBRARY->generaltexth->translate(std::get<0>(contentInfo[c])) + " - " + MetaString::createFromTextID(LIBRARY->resourceTypeHandler->getById(res)->getNameTextID()).toString(), plotData, icons, 0); case CHART_MAP_EXPLORED: plotData = extractData(statistic, [](const StatisticDataSetEntry & val) -> float { return val.mapExploredRatio; }); @@ -330,43 +331,43 @@ OverviewPanel::OverviewPanel(Rect position, std::string title, const StatisticDa } }, { - LIBRARY->generaltexth->translate("vcmi.statisticWindow.param.tradeVolume") + " - " + LIBRARY->generaltexth->translate(TextIdentifier("core.restypes", EGameResID::GOLD).get()), [this](PlayerColor color){ + LIBRARY->generaltexth->translate("vcmi.statisticWindow.param.tradeVolume") + " - " + MetaString::createFromTextID(LIBRARY->resourceTypeHandler->getById(EGameResID::GOLD)->getNameTextID()).toString(), [this](PlayerColor color){ auto val = playerDataFilter(color).back(); return std::to_string(val.tradeVolume[EGameResID::GOLD]); } }, { - LIBRARY->generaltexth->translate("vcmi.statisticWindow.param.tradeVolume") + " - " + LIBRARY->generaltexth->translate(TextIdentifier("core.restypes", EGameResID::WOOD).get()), [this](PlayerColor color){ + LIBRARY->generaltexth->translate("vcmi.statisticWindow.param.tradeVolume") + " - " + MetaString::createFromTextID(LIBRARY->resourceTypeHandler->getById(EGameResID::WOOD)->getNameTextID()).toString(), [this](PlayerColor color){ auto val = playerDataFilter(color).back(); return std::to_string(val.tradeVolume[EGameResID::WOOD]); } }, { - LIBRARY->generaltexth->translate("vcmi.statisticWindow.param.tradeVolume") + " - " + LIBRARY->generaltexth->translate(TextIdentifier("core.restypes", EGameResID::MERCURY).get()), [this](PlayerColor color){ + LIBRARY->generaltexth->translate("vcmi.statisticWindow.param.tradeVolume") + " - " + MetaString::createFromTextID(LIBRARY->resourceTypeHandler->getById(EGameResID::MERCURY)->getNameTextID()).toString(), [this](PlayerColor color){ auto val = playerDataFilter(color).back(); return std::to_string(val.tradeVolume[EGameResID::MERCURY]); } }, { - LIBRARY->generaltexth->translate("vcmi.statisticWindow.param.tradeVolume") + " - " + LIBRARY->generaltexth->translate(TextIdentifier("core.restypes", EGameResID::ORE).get()), [this](PlayerColor color){ + LIBRARY->generaltexth->translate("vcmi.statisticWindow.param.tradeVolume") + " - " + MetaString::createFromTextID(LIBRARY->resourceTypeHandler->getById(EGameResID::ORE)->getNameTextID()).toString(), [this](PlayerColor color){ auto val = playerDataFilter(color).back(); return std::to_string(val.tradeVolume[EGameResID::ORE]); } }, { - LIBRARY->generaltexth->translate("vcmi.statisticWindow.param.tradeVolume") + " - " + LIBRARY->generaltexth->translate(TextIdentifier("core.restypes", EGameResID::SULFUR).get()), [this](PlayerColor color){ + LIBRARY->generaltexth->translate("vcmi.statisticWindow.param.tradeVolume") + " - " + MetaString::createFromTextID(LIBRARY->resourceTypeHandler->getById(EGameResID::SULFUR)->getNameTextID()).toString(), [this](PlayerColor color){ auto val = playerDataFilter(color).back(); return std::to_string(val.tradeVolume[EGameResID::SULFUR]); } }, { - LIBRARY->generaltexth->translate("vcmi.statisticWindow.param.tradeVolume") + " - " + LIBRARY->generaltexth->translate(TextIdentifier("core.restypes", EGameResID::CRYSTAL).get()), [this](PlayerColor color){ + LIBRARY->generaltexth->translate("vcmi.statisticWindow.param.tradeVolume") + " - " + MetaString::createFromTextID(LIBRARY->resourceTypeHandler->getById(EGameResID::CRYSTAL)->getNameTextID()).toString(), [this](PlayerColor color){ auto val = playerDataFilter(color).back(); return std::to_string(val.tradeVolume[EGameResID::CRYSTAL]); } }, { - LIBRARY->generaltexth->translate("vcmi.statisticWindow.param.tradeVolume") + " - " + LIBRARY->generaltexth->translate(TextIdentifier("core.restypes", EGameResID::GEMS).get()), [this](PlayerColor color){ + LIBRARY->generaltexth->translate("vcmi.statisticWindow.param.tradeVolume") + " - " + MetaString::createFromTextID(LIBRARY->resourceTypeHandler->getById(EGameResID::GEMS)->getNameTextID()).toString(), [this](PlayerColor color){ auto val = playerDataFilter(color).back(); return std::to_string(val.tradeVolume[EGameResID::GEMS]); } diff --git a/client/widgets/markets/TradePanels.cpp b/client/widgets/markets/TradePanels.cpp index c8dfc71b5..56d8d3998 100644 --- a/client/widgets/markets/TradePanels.cpp +++ b/client/widgets/markets/TradePanels.cpp @@ -23,6 +23,7 @@ #include "../../../lib/entities/artifact/CArtHandler.h" #include "../../../lib/texts/CGeneralTextHandler.h" #include "../../../lib/mapObjects/CGHeroInstance.h" +#include "../../../lib/entities/ResourceTypeHandler.h" CTradeableItem::CTradeableItem(const Rect & area, EType Type, int32_t ID, int32_t serial) : SelectableSlot(area, Point(1, 1)) @@ -175,7 +176,7 @@ void CTradeableItem::hover(bool on) ENGINE->statusbar()->write(LIBRARY->artifacts()->getByIndex(id)->getNameTranslated()); break; case EType::RESOURCE: - ENGINE->statusbar()->write(LIBRARY->generaltexth->restypes[id]); + ENGINE->statusbar()->write(MetaString::createFromTextID(LIBRARY->resourceTypeHandler->getById(id)->getNameTextID()).toString()); break; case EType::PLAYER: ENGINE->statusbar()->write(LIBRARY->generaltexth->capColors[id]); diff --git a/client/windows/CCastleInterface.cpp b/client/windows/CCastleInterface.cpp index 5f5468f56..78795e459 100644 --- a/client/windows/CCastleInterface.cpp +++ b/client/windows/CCastleInterface.cpp @@ -58,10 +58,10 @@ #include "../../lib/campaign/CampaignState.h" #include "../../lib/entities/artifact/CArtifact.h" #include "../../lib/entities/building/CBuilding.h" +#include "../../lib/entities/ResourceTypeHandler.h" #include "../../lib/mapObjects/CGHeroInstance.h" #include "../../lib/mapObjects/CGTownInstance.h" #include "../../lib/mapObjects/TownBuildingInstance.h" -#include "../../lib/entities/ResourceTypeHandler.h" static bool useCompactCreatureBox() @@ -1127,7 +1127,7 @@ void CCastleBuildings::enterFountain(const BuildingID & building, BuildingSubID: else //Mystic Pond produced something; { descr += "\n\n" + hasProduced; - boost::algorithm::replace_first(descr,"%s",LIBRARY->generaltexth->restypes[town->bonusValue.first]); + boost::algorithm::replace_first(descr,"%s",MetaString::createFromTextID(LIBRARY->resourceTypeHandler->getById(town->bonusValue.first)->getNameTextID()).toString()); boost::algorithm::replace_first(descr,"%d",std::to_string(town->bonusValue.second)); } } diff --git a/lib/mapObjectConstructors/CommonConstructors.cpp b/lib/mapObjectConstructors/CommonConstructors.cpp index 3019e0e28..f3c0dbcfa 100644 --- a/lib/mapObjectConstructors/CommonConstructors.cpp +++ b/lib/mapObjectConstructors/CommonConstructors.cpp @@ -17,6 +17,7 @@ #include "../callback/IGameInfoCallback.h" #include "../entities/faction/CTownHandler.h" #include "../entities/hero/CHeroClass.h" +#include "../entities/ResourceTypeHandler.h" #include "../mapObjects/CGHeroInstance.h" #include "../mapObjects/CGTownInstance.h" #include "../mapObjects/MiscObjects.h" @@ -60,7 +61,7 @@ bool ResourceInstanceConstructor::hasNameTextID() const std::string ResourceInstanceConstructor::getNameTextID() const { - return TextIdentifier("core", "restypes", resourceType.getNum()).get(); + return LIBRARY->resourceTypeHandler->getById(resourceType)->getNameTextID(); } GameResID ResourceInstanceConstructor::getResourceType() const diff --git a/lib/mapObjects/CGResource.cpp b/lib/mapObjects/CGResource.cpp index e95d25069..68c6733cf 100644 --- a/lib/mapObjects/CGResource.cpp +++ b/lib/mapObjects/CGResource.cpp @@ -21,6 +21,7 @@ #include "../gameState/CGameState.h" #include "../serializer/JsonSerializeFormat.h" #include "../CSoundBase.h" +#include "../entities/ResourceTypeHandler.h" #include @@ -50,7 +51,7 @@ GameResID CGResource::resourceID() const std::string CGResource::getHoverText(PlayerColor player) const { - return LIBRARY->generaltexth->restypes[resourceID().getNum()]; + return MetaString::createFromTextID(LIBRARY->resourceTypeHandler->getById(resourceID())->getNameTextID()).toString(); } void CGResource::pickRandomObject(IGameRandomizer & gameRandomizer) diff --git a/lib/mapObjects/MiscObjects.cpp b/lib/mapObjects/MiscObjects.cpp index a198d5a09..dfd0bd3d3 100644 --- a/lib/mapObjects/MiscObjects.cpp +++ b/lib/mapObjects/MiscObjects.cpp @@ -165,7 +165,7 @@ std::string CGMine::getHoverText(PlayerColor player) const std::string hoverName = CArmedInstance::getHoverText(player); if (tempOwner != PlayerColor::NEUTRAL) - hoverName += "\n(" + LIBRARY->generaltexth->restypes[producedResource.getNum()] + ")"; + hoverName += "\n(" + MetaString::createFromTextID(LIBRARY->resourceTypeHandler->getById(producedResource.getNum())->getNameTextID()).toString() + ")"; if(stacksCount()) { diff --git a/lib/texts/MetaString.cpp b/lib/texts/MetaString.cpp index 60a3375b4..90256ec8c 100644 --- a/lib/texts/MetaString.cpp +++ b/lib/texts/MetaString.cpp @@ -14,6 +14,7 @@ #include "entities/artifact/CArtifact.h" #include "entities/faction/CFaction.h" #include "entities/hero/CHero.h" +#include "entities/ResourceTypeHandler.h" #include "texts/CGeneralTextHandler.h" #include "CSkillHandler.h" #include "GameConstants.h" @@ -378,7 +379,7 @@ void MetaString::appendName(const CreatureID & id, TQuantity count) void MetaString::appendName(const GameResID& id) { - appendTextID(TextIdentifier("core.restypes", id.getNum()).get()); + appendTextID(LIBRARY->resourceTypeHandler->getById(id)->getNameTextID()); } void MetaString::appendNameSingular(const CreatureID & id) @@ -423,7 +424,7 @@ void MetaString::replaceName(const SpellID & id) void MetaString::replaceName(const GameResID& id) { - replaceTextID(TextIdentifier("core.restypes", id.getNum()).get()); + replaceTextID(LIBRARY->resourceTypeHandler->getById(id)->getNameTextID()); } void MetaString::replaceNameSingular(const CreatureID & id) diff --git a/mapeditor/templateeditor/mineselector.cpp b/mapeditor/templateeditor/mineselector.cpp index fcb2b8176..9a731aa1a 100644 --- a/mapeditor/templateeditor/mineselector.cpp +++ b/mapeditor/templateeditor/mineselector.cpp @@ -15,8 +15,10 @@ #include "../../lib/GameLibrary.h" #include "../../lib/texts/CGeneralTextHandler.h" +#include "../../lib/texts/MetaString.h" +#include "../../lib/entities/ResourceTypeHandler.h" -auto resources = std::vector{EGameResID::GOLD, EGameResID::WOOD, EGameResID::MERCURY, EGameResID::ORE, EGameResID::SULFUR, EGameResID::CRYSTAL, EGameResID::GEMS}; +auto resourcesToShow = std::vector{EGameResID::GOLD, EGameResID::WOOD, EGameResID::MERCURY, EGameResID::ORE, EGameResID::SULFUR, EGameResID::CRYSTAL, EGameResID::GEMS}; MineSelector::MineSelector(std::map & mines) : ui(new Ui::MineSelector), @@ -29,18 +31,18 @@ MineSelector::MineSelector(std::map & mines) : setWindowModality(Qt::ApplicationModal); ui->tableWidgetMines->setColumnCount(2); - ui->tableWidgetMines->setRowCount(resources.size()); + ui->tableWidgetMines->setRowCount(resourcesToShow.size()); ui->tableWidgetMines->setHorizontalHeaderLabels({tr("Resource"), tr("Mines")}); - for (int row = 0; row < resources.size(); ++row) + for (int row = 0; row < resourcesToShow.size(); ++row) { - auto name = LIBRARY->generaltexth->translate(TextIdentifier("core.restypes", resources[row].getNum()).get()); + auto name = MetaString::createFromTextID(LIBRARY->resourceTypeHandler->getById(resourcesToShow[row].getNum())->getNameTextID()).toString(); auto label = new QLabel(QString::fromStdString(name)); label->setAlignment(Qt::AlignCenter); ui->tableWidgetMines->setCellWidget(row, 0, label); auto spinBox = new QSpinBox(); spinBox->setRange(0, 100); - spinBox->setValue(mines[resources[row]]); + spinBox->setValue(mines[resourcesToShow[row]]); ui->tableWidgetMines->setCellWidget(row, 1, spinBox); } ui->tableWidgetMines->resizeColumnsToContents(); @@ -57,8 +59,8 @@ void MineSelector::showMineSelector(std::map & mines) void MineSelector::on_buttonBoxResult_accepted() { - for (int row = 0; row < resources.size(); ++row) - minesSelected[resources[row]] = static_cast(ui->tableWidgetMines->cellWidget(row, 1))->value(); + for (int row = 0; row < resourcesToShow.size(); ++row) + minesSelected[resourcesToShow[row]] = static_cast(ui->tableWidgetMines->cellWidget(row, 1))->value(); close(); }