1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-11-25 22:42:04 +02:00

vcmi: remove code duplication for native terrain

This commit is contained in:
Konstantin
2023-04-09 19:30:29 +03:00
parent 7b9e281f7d
commit 4da97682be
12 changed files with 40 additions and 53 deletions

View File

@@ -9,12 +9,33 @@
*/
#include "StdInc.h"
#include "VCMI_Lib.h"
#include "GameConstants.h"
#include "HeroBonus.h"
#include <vcmi/Entity.h>
#include <vcmi/Faction.h>
#include <vcmi/FactionService.h>
bool INativeTerrainProvider::isItNativeTerrain(TerrainId terrain) const
VCMI_LIB_NAMESPACE_BEGIN
bool INativeTerrainProvider::isNativeTerrain(TerrainId terrain) const
{
auto native = getNativeTerrain();
return native == terrain || native == ETerrainId::ANY_TERRAIN;
}
}
TerrainId IConstBonusNativeTerrainProvider::getNativeTerrain() const
{
constexpr auto any = TerrainId(ETerrainId::ANY_TERRAIN);
const std::string cachingStringNoTerrainPenalty = "type_NO_TERRAIN_PENALTY_sANY";
static const auto selectorNoTerrainPenalty = Selector::typeSubtype(Bonus::NO_TERRAIN_PENALTY, any);
//this code is used in the CreatureTerrainLimiter::limit to setup battle bonuses
//and in the CGHeroInstance::getNativeTerrain() to setup movement bonuses or/and penalties.
return getBonusBearer()->hasBonus(selectorNoTerrainPenalty, cachingStringNoTerrainPenalty)
? any : VLC->factions()->getById(getFaction())->getNativeTerrain();
}
VCMI_LIB_NAMESPACE_END