From 885dce0c2701d66e54a36564f468d247d8b385e4 Mon Sep 17 00:00:00 2001 From: Ivan Savenko Date: Thu, 2 Nov 2023 16:56:02 +0200 Subject: [PATCH] Replace static_cast's of Identifiers with getNum call --- lib/CHeroHandler.cpp | 2 +- lib/JsonRandom.cpp | 6 +++--- lib/battle/CBattleInfoCallback.cpp | 2 +- lib/bonuses/Limiters.cpp | 4 ++-- lib/campaign/CampaignState.cpp | 10 +++++----- lib/constants/EntityIdentifiers.cpp | 2 +- lib/constants/IdentifierBase.h | 5 ----- lib/gameState/CGameStateCampaign.cpp | 6 +++--- lib/mapObjects/CArmedInstance.cpp | 2 +- lib/mapping/CMap.cpp | 14 +++----------- lib/networkPacks/NetPacksLib.cpp | 2 +- lib/pathfinder/CGPathNode.h | 2 +- lib/rewardable/Info.cpp | 2 +- 13 files changed, 23 insertions(+), 36 deletions(-) diff --git a/lib/CHeroHandler.cpp b/lib/CHeroHandler.cpp index 8bb900e12..f284dbf16 100644 --- a/lib/CHeroHandler.cpp +++ b/lib/CHeroHandler.cpp @@ -209,7 +209,7 @@ CHeroClass::CHeroClass(): void CHeroClassHandler::fillPrimarySkillData(const JsonNode & node, CHeroClass * heroClass, PrimarySkill pSkill) const { - const auto & skillName = NPrimarySkill::names[static_cast(pSkill)]; + const auto & skillName = NPrimarySkill::names[pSkill.getNum()]; auto currentPrimarySkillValue = static_cast(node["primarySkills"][skillName].Integer()); //minimal value is 0 for attack and defense and 1 for spell power and knowledge auto primarySkillLegalMinimum = (pSkill == PrimarySkill::ATTACK || pSkill == PrimarySkill::DEFENSE) ? 0 : 1; diff --git a/lib/JsonRandom.cpp b/lib/JsonRandom.cpp index 2e78df61f..e0c4fcc33 100644 --- a/lib/JsonRandom.cpp +++ b/lib/JsonRandom.cpp @@ -113,7 +113,7 @@ namespace JsonRandom if (value.empty() || value[0] != '@') return PrimarySkill(*VLC->identifiers()->getIdentifier(modScope, "primarySkill", value)); else - return PrimarySkill(loadVariable("primarySkill", value, variables, static_cast(PrimarySkill::NONE))); + return PrimarySkill(loadVariable("primarySkill", value, variables, PrimarySkill::NONE.getNum())); } /// Method that allows type-specific object filtering @@ -322,7 +322,7 @@ namespace JsonRandom for(const auto & pair : value.Struct()) { PrimarySkill id = decodeKey(pair.second.meta, pair.first, variables); - ret[static_cast(id)] += loadValue(pair.second, rng, variables); + ret[id.getNum()] += loadValue(pair.second, rng, variables); } } if(value.isVector()) @@ -333,7 +333,7 @@ namespace JsonRandom PrimarySkill skillID = *RandomGeneratorUtil::nextItem(potentialPicks, rng); defaultSkills.erase(skillID); - ret[static_cast(skillID)] += loadValue(element, rng, variables); + ret[skillID.getNum()] += loadValue(element, rng, variables); } } return ret; diff --git a/lib/battle/CBattleInfoCallback.cpp b/lib/battle/CBattleInfoCallback.cpp index 7da7ced1d..2e8412d0a 100644 --- a/lib/battle/CBattleInfoCallback.cpp +++ b/lib/battle/CBattleInfoCallback.cpp @@ -1155,7 +1155,7 @@ std::pair CBattleInfoCallback::getNearestStack( BattleHex CBattleInfoCallback::getAvaliableHex(const CreatureID & creID, ui8 side, int initialPos) const { - bool twoHex = VLC->creh->objects[creID]->isDoubleWide(); + bool twoHex = VLC->creatures()->getById(creID)->isDoubleWide(); int pos; if (initialPos > -1) diff --git a/lib/bonuses/Limiters.cpp b/lib/bonuses/Limiters.cpp index a2461b1e7..93bf63eb9 100644 --- a/lib/bonuses/Limiters.cpp +++ b/lib/bonuses/Limiters.cpp @@ -317,7 +317,7 @@ ILimiter::EDecision FactionLimiter::limit(const BonusLimitationContext &context) std::string FactionLimiter::toString() const { boost::format fmt("FactionLimiter(faction=%s)"); - fmt % VLC->factions()->getByIndex(faction)->getJsonKey(); + fmt % VLC->factions()->getById(faction)->getJsonKey(); return fmt.str(); } @@ -326,7 +326,7 @@ JsonNode FactionLimiter::toJsonNode() const JsonNode root(JsonNode::JsonType::DATA_STRUCT); root["type"].String() = "FACTION_LIMITER"; - root["parameters"].Vector().push_back(JsonUtils::stringNode(VLC->factions()->getByIndex(faction)->getJsonKey())); + root["parameters"].Vector().push_back(JsonUtils::stringNode(VLC->factions()->getById(faction)->getJsonKey())); return root; } diff --git a/lib/campaign/CampaignState.cpp b/lib/campaign/CampaignState.cpp index eb6144f3e..d23ffd314 100644 --- a/lib/campaign/CampaignState.cpp +++ b/lib/campaign/CampaignState.cpp @@ -73,13 +73,13 @@ ImagePath CampaignRegions::getBackgroundName() const Point CampaignRegions::getPosition(CampaignScenarioID which) const { - auto const & region = regions[static_cast(which)]; + auto const & region = regions[which.getNum()]; return Point(region.xpos, region.ypos); } ImagePath CampaignRegions::getNameFor(CampaignScenarioID which, int colorIndex, std::string type) const { - auto const & region = regions[static_cast(which)]; + auto const & region = regions[which.getNum()]; static const std::string colors[2][8] = { @@ -267,7 +267,7 @@ void CampaignState::setCurrentMapAsConquered(std::vector heroe return a->getHeroStrength() > b->getHeroStrength(); }); - logGlobal->info("Scenario %d of campaign %s (%s) has been completed", static_cast(*currentMap), getFilename(), getNameTranslated()); + logGlobal->info("Scenario %d of campaign %s (%s) has been completed", currentMap->getNum(), getFilename(), getNameTranslated()); mapsConquered.push_back(*currentMap); auto reservedHeroes = getReservedHeroes(); @@ -320,7 +320,7 @@ std::unique_ptr CampaignState::getMap(CampaignScenarioID scenarioId) const CMapService mapService; std::string scenarioName = getFilename().substr(0, getFilename().find('.')); boost::to_lower(scenarioName); - scenarioName += ':' + std::to_string(static_cast(scenarioId)); + scenarioName += ':' + std::to_string(scenarioId.getNum()); const auto & mapContent = mapPieces.find(scenarioId)->second; return mapService.loadMap(mapContent.data(), mapContent.size(), scenarioName, getModName(), getEncoding()); } @@ -333,7 +333,7 @@ std::unique_ptr CampaignState::getMapHeader(CampaignScenarioID scena CMapService mapService; std::string scenarioName = getFilename().substr(0, getFilename().find('.')); boost::to_lower(scenarioName); - scenarioName += ':' + std::to_string(static_cast(scenarioId)); + scenarioName += ':' + std::to_string(scenarioId.getNum()); const auto & mapContent = mapPieces.find(scenarioId)->second; return mapService.loadMapHeader(mapContent.data(), mapContent.size(), scenarioName, getModName(), getEncoding()); } diff --git a/lib/constants/EntityIdentifiers.cpp b/lib/constants/EntityIdentifiers.cpp index 722033f51..1eb5d3c9d 100644 --- a/lib/constants/EntityIdentifiers.cpp +++ b/lib/constants/EntityIdentifiers.cpp @@ -369,7 +369,7 @@ si32 FactionID::decode(const std::string & identifier) if(rawId) return rawId.value(); else - return FactionID::DEFAULT; + return FactionID::DEFAULT.getNum(); } std::string FactionID::encode(const si32 index) diff --git a/lib/constants/IdentifierBase.h b/lib/constants/IdentifierBase.h index 5ad0a8dd3..b4a8686f9 100644 --- a/lib/constants/IdentifierBase.h +++ b/lib/constants/IdentifierBase.h @@ -52,11 +52,6 @@ public: num += change; } - constexpr operator int32_t () const - { - return num; - } - friend std::ostream& operator<<(std::ostream& os, const IdentifierBase& dt) { return os << dt.num; diff --git a/lib/gameState/CGameStateCampaign.cpp b/lib/gameState/CGameStateCampaign.cpp index 79ee3b3c1..076403a31 100644 --- a/lib/gameState/CGameStateCampaign.cpp +++ b/lib/gameState/CGameStateCampaign.cpp @@ -90,7 +90,7 @@ void CGameStateCampaign::trimCrossoverHeroesParameters(std::vectorgetBonusLocalFirst(sel)->val = cgh->type->heroClass->primarySkillInitial[g]; + cgh->getBonusLocalFirst(sel)->val = cgh->type->heroClass->primarySkillInitial[g.getNum()]; } } } @@ -375,7 +375,7 @@ std::vector CGameStateCampaign::generateCampaignHeroesT auto * heroPlaceholder = dynamic_cast(obj.get()); // only 1 field must be set - assert(heroPlaceholder->powerRank != heroPlaceholder->heroType); + assert(heroPlaceholder->powerRank.has_value() != heroPlaceholder->heroType.has_value()); if(heroPlaceholder->powerRank) placeholdersByPower.push_back(heroPlaceholder); @@ -498,7 +498,7 @@ void CGameStateCampaign::initStartingResources() std::vector people = getHumanPlayerInfo(); //players we will give resource bonus for(const PlayerSettings *ps : people) { - std::vector res; //resources we will give + std::vector res; //resources we will give switch (chosenBonus->info1) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: diff --git a/lib/mapObjects/CArmedInstance.cpp b/lib/mapObjects/CArmedInstance.cpp index 39f7ed971..b1108fd40 100644 --- a/lib/mapObjects/CArmedInstance.cpp +++ b/lib/mapObjects/CArmedInstance.cpp @@ -92,7 +92,7 @@ void CArmedInstance::updateMoraleBonusFromArmy() for(auto f : factions) { - if (VLC->factions()->getByIndex(f)->getAlignment() != EAlignment::EVIL) + if (VLC->factions()->getById(f)->getAlignment() != EAlignment::EVIL) mixableFactions++; } if (mixableFactions > 0) diff --git a/lib/mapping/CMap.cpp b/lib/mapping/CMap.cpp index 46156dac6..b0c49057c 100644 --- a/lib/mapping/CMap.cpp +++ b/lib/mapping/CMap.cpp @@ -71,16 +71,8 @@ void CMapEvent::serializeJson(JsonSerializeFormat & handler) void CCastleEvent::serializeJson(JsonSerializeFormat & handler) { CMapEvent::serializeJson(handler); - { - std::vector temp(buildings.begin(), buildings.end()); - auto a = handler.enterArray("buildings"); - a.syncSize(temp); - for(int i = 0; i < temp.size(); ++i) - { - a.serializeInt(i, temp[i]); - buildings.insert(temp[i]); - } - } + + handler.serializeIdArray("buildings", buildings); { auto a = handler.enterArray("creatures"); a.syncSize(creatures); @@ -393,7 +385,7 @@ const CGObjectInstance * CMap::getObjectiveObjectFrom(const int3 & pos, Obj type // There is weird bug because of which sometimes heroes will not be found properly despite having correct position // Try to workaround that and find closest object that we can use - logGlobal->error("Failed to find object of type %d at %s", static_cast(type), pos.toString()); + logGlobal->error("Failed to find object of type %d at %s", type.getNum(), pos.toString()); logGlobal->error("Will try to find closest matching object"); CGObjectInstance * bestMatch = nullptr; diff --git a/lib/networkPacks/NetPacksLib.cpp b/lib/networkPacks/NetPacksLib.cpp index 4dab06f35..c7041fd2e 100644 --- a/lib/networkPacks/NetPacksLib.cpp +++ b/lib/networkPacks/NetPacksLib.cpp @@ -2113,7 +2113,7 @@ void BattleStart::applyGs(CGameState * gs) const info->battleID = gs->nextBattleID; info->localInit(); - gs->nextBattleID = vstd::next(gs->nextBattleID, 1); + gs->nextBattleID = BattleID(gs->nextBattleID.getNum() + 1); } void BattleNextRound::applyGs(CGameState * gs) const diff --git a/lib/pathfinder/CGPathNode.h b/lib/pathfinder/CGPathNode.h index ad6e90383..15363f419 100644 --- a/lib/pathfinder/CGPathNode.h +++ b/lib/pathfinder/CGPathNode.h @@ -197,7 +197,7 @@ struct DLL_LINKAGE CPathsInfo STRONG_INLINE CGPathNode * getNode(const int3 & coord, const ELayer layer) { - return &nodes[layer][coord.z][coord.x][coord.y]; + return &nodes[layer.getNum()][coord.z][coord.x][coord.y]; } }; diff --git a/lib/rewardable/Info.cpp b/lib/rewardable/Info.cpp index 47600c915..cb3a61ac4 100644 --- a/lib/rewardable/Info.cpp +++ b/lib/rewardable/Info.cpp @@ -234,7 +234,7 @@ void Rewardable::Info::configureVariables(Rewardable::Configuration & object, CR value = JsonRandom::loadSpell(input, rng, object.variables.values).getNum(); if (category.first == "primarySkill") - value = static_cast(JsonRandom::loadPrimary(input, rng, object.variables.values)); + value = JsonRandom::loadPrimary(input, rng, object.variables.values).getNum(); if (category.first == "secondarySkill") value = JsonRandom::loadSecondary(input, rng, object.variables.values).getNum();