1234567891011121314151617181920212223242526272829303132333435363738394041 |
- /*
- * BasicTypes.cpp, part of VCMI engine
- *
- * Authors: listed in file AUTHORS in main folder
- *
- * License: GNU General Public License v2.0 or later
- * Full text of license available in license.txt file, in main folder
- *
- */
- #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>
- 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
|