|
@@ -97,13 +97,6 @@ JsonNode ILimiter::toJsonNode() const
|
|
|
return root;
|
|
|
}
|
|
|
|
|
|
-void ILimiter::acceptUpdater(IUpdater& visitor) {}
|
|
|
-
|
|
|
-TLimiterPtr ILimiter::clone() const
|
|
|
-{
|
|
|
- throw std::runtime_error("Clone not implemented for this limiter");
|
|
|
-}
|
|
|
-
|
|
|
ILimiter::EDecision CCreatureTypeLimiter::limit(const BonusLimitationContext &context) const
|
|
|
{
|
|
|
const CCreature *c = retrieveCreature(&context.node);
|
|
@@ -143,16 +136,6 @@ JsonNode CCreatureTypeLimiter::toJsonNode() const
|
|
|
return root;
|
|
|
}
|
|
|
|
|
|
-void CCreatureTypeLimiter::acceptUpdater(IUpdater & visitor)
|
|
|
-{
|
|
|
- visitor.visitLimiter(*this);
|
|
|
-}
|
|
|
-
|
|
|
-TLimiterPtr CCreatureTypeLimiter::clone() const
|
|
|
-{
|
|
|
- return std::make_shared<CCreatureTypeLimiter>(*this);
|
|
|
-}
|
|
|
-
|
|
|
HasAnotherBonusLimiter::HasAnotherBonusLimiter( BonusType bonus )
|
|
|
: type(bonus), isSubtypeRelevant(false), isSourceRelevant(false), isSourceIDRelevant(false)
|
|
|
{
|
|
@@ -236,16 +219,6 @@ JsonNode HasAnotherBonusLimiter::toJsonNode() const
|
|
|
return root;
|
|
|
}
|
|
|
|
|
|
-void HasAnotherBonusLimiter::acceptUpdater(IUpdater & visitor)
|
|
|
-{
|
|
|
- visitor.visitLimiter(*this);
|
|
|
-}
|
|
|
-
|
|
|
-TLimiterPtr HasAnotherBonusLimiter::clone() const
|
|
|
-{
|
|
|
- return std::make_shared<HasAnotherBonusLimiter>(*this);
|
|
|
-}
|
|
|
-
|
|
|
ILimiter::EDecision UnitOnHexLimiter::limit(const BonusLimitationContext &context) const
|
|
|
{
|
|
|
const auto * stack = retrieveStackBattle(&context.node);
|
|
@@ -276,16 +249,6 @@ JsonNode UnitOnHexLimiter::toJsonNode() const
|
|
|
return root;
|
|
|
}
|
|
|
|
|
|
-void UnitOnHexLimiter::acceptUpdater(IUpdater& visitor)
|
|
|
-{
|
|
|
- visitor.visitLimiter(*this);
|
|
|
-}
|
|
|
-
|
|
|
-TLimiterPtr UnitOnHexLimiter::clone() const
|
|
|
-{
|
|
|
- return std::make_shared<UnitOnHexLimiter>(*this);
|
|
|
-}
|
|
|
-
|
|
|
CreatureTerrainLimiter::CreatureTerrainLimiter()
|
|
|
: terrainType(ETerrainId::NATIVE_TERRAIN)
|
|
|
{
|
|
@@ -365,16 +328,6 @@ JsonNode CreatureTerrainLimiter::toJsonNode() const
|
|
|
return root;
|
|
|
}
|
|
|
|
|
|
-void CreatureTerrainLimiter::acceptUpdater(IUpdater & visitor)
|
|
|
-{
|
|
|
- visitor.visitLimiter(*this);
|
|
|
-}
|
|
|
-
|
|
|
-TLimiterPtr CreatureTerrainLimiter::clone() const
|
|
|
-{
|
|
|
- return std::make_shared<CreatureTerrainLimiter>(*this);
|
|
|
-}
|
|
|
-
|
|
|
FactionLimiter::FactionLimiter(FactionID creatureFaction)
|
|
|
: faction(creatureFaction)
|
|
|
{
|
|
@@ -420,16 +373,6 @@ JsonNode FactionLimiter::toJsonNode() const
|
|
|
return root;
|
|
|
}
|
|
|
|
|
|
-void FactionLimiter::acceptUpdater(IUpdater & visitor)
|
|
|
-{
|
|
|
- visitor.visitLimiter(*this);
|
|
|
-}
|
|
|
-
|
|
|
-TLimiterPtr FactionLimiter::clone() const
|
|
|
-{
|
|
|
- return std::make_shared<FactionLimiter>(*this);
|
|
|
-}
|
|
|
-
|
|
|
CreatureLevelLimiter::CreatureLevelLimiter(uint32_t minLevel, uint32_t maxLevel) :
|
|
|
minLevel(minLevel),
|
|
|
maxLevel(maxLevel)
|
|
@@ -464,16 +407,6 @@ JsonNode CreatureLevelLimiter::toJsonNode() const
|
|
|
return root;
|
|
|
}
|
|
|
|
|
|
-void CreatureLevelLimiter::acceptUpdater(IUpdater& visitor)
|
|
|
-{
|
|
|
- visitor.visitLimiter(*this);
|
|
|
-}
|
|
|
-
|
|
|
-TLimiterPtr CreatureLevelLimiter::clone() const
|
|
|
-{
|
|
|
- return std::make_shared<CreatureLevelLimiter>(*this);
|
|
|
-}
|
|
|
-
|
|
|
CreatureAlignmentLimiter::CreatureAlignmentLimiter(EAlignment Alignment)
|
|
|
: alignment(Alignment)
|
|
|
{
|
|
@@ -513,16 +446,6 @@ JsonNode CreatureAlignmentLimiter::toJsonNode() const
|
|
|
return root;
|
|
|
}
|
|
|
|
|
|
-void CreatureAlignmentLimiter::acceptUpdater(IUpdater & visitor)
|
|
|
-{
|
|
|
- visitor.visitLimiter(*this);
|
|
|
-}
|
|
|
-
|
|
|
-TLimiterPtr CreatureAlignmentLimiter::clone() const
|
|
|
-{
|
|
|
- return std::make_shared<CreatureAlignmentLimiter>(*this);
|
|
|
-}
|
|
|
-
|
|
|
RankRangeLimiter::RankRangeLimiter(ui8 Min, ui8 Max)
|
|
|
:minRank(Min), maxRank(Max)
|
|
|
{
|
|
@@ -548,41 +471,20 @@ ILimiter::EDecision RankRangeLimiter::limit(const BonusLimitationContext &contex
|
|
|
return ILimiter::EDecision::NOT_APPLICABLE;
|
|
|
}
|
|
|
|
|
|
-void RankRangeLimiter::acceptUpdater(IUpdater & visitor)
|
|
|
-{
|
|
|
- visitor.visitLimiter(*this);
|
|
|
-}
|
|
|
-
|
|
|
-TLimiterPtr RankRangeLimiter::clone() const
|
|
|
-{
|
|
|
- return std::make_shared<RankRangeLimiter>(*this);
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-OppositeSideLimiter::OppositeSideLimiter(PlayerColor Owner):
|
|
|
- owner(std::move(Owner))
|
|
|
+OppositeSideLimiter::OppositeSideLimiter()
|
|
|
{
|
|
|
}
|
|
|
|
|
|
ILimiter::EDecision OppositeSideLimiter::limit(const BonusLimitationContext & context) const
|
|
|
{
|
|
|
- auto contextOwner = context.node.getOwner();
|
|
|
+ PlayerColor contextOwner = context.node.getOwner();
|
|
|
+ PlayerColor bonusOwner = context.b.bonusOwner;
|
|
|
if (contextOwner == PlayerColor::UNFLAGGABLE)
|
|
|
contextOwner = PlayerColor::NEUTRAL;
|
|
|
- auto decision = (owner == contextOwner || owner == PlayerColor::CANNOT_DETERMINE) ? ILimiter::EDecision::DISCARD : ILimiter::EDecision::ACCEPT;
|
|
|
+ auto decision = (bonusOwner == contextOwner || bonusOwner == PlayerColor::CANNOT_DETERMINE) ? ILimiter::EDecision::DISCARD : ILimiter::EDecision::ACCEPT;
|
|
|
return decision;
|
|
|
}
|
|
|
|
|
|
-void OppositeSideLimiter::acceptUpdater(IUpdater & visitor)
|
|
|
-{
|
|
|
- visitor.visitLimiter(*this);
|
|
|
-}
|
|
|
-
|
|
|
-TLimiterPtr OppositeSideLimiter::clone() const
|
|
|
-{
|
|
|
- return std::make_shared<OppositeSideLimiter>(*this);
|
|
|
-}
|
|
|
-
|
|
|
// Aggregate/Boolean Limiters
|
|
|
|
|
|
AggregateLimiter::AggregateLimiter(std::vector<TLimiterPtr> limiters):
|
|
@@ -605,11 +507,6 @@ JsonNode AggregateLimiter::toJsonNode() const
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
-void AggregateLimiter::acceptUpdater(IUpdater & visitor)
|
|
|
-{
|
|
|
- visitor.visitLimiter(*this);
|
|
|
-}
|
|
|
-
|
|
|
const std::string AllOfLimiter::aggregator = "allOf";
|
|
|
const std::string & AllOfLimiter::getAggregator() const
|
|
|
{
|
|
@@ -637,15 +534,6 @@ ILimiter::EDecision AllOfLimiter::limit(const BonusLimitationContext & context)
|
|
|
return wasntSure ? ILimiter::EDecision::NOT_SURE : ILimiter::EDecision::ACCEPT;
|
|
|
}
|
|
|
|
|
|
-TLimiterPtr AllOfLimiter::clone() const
|
|
|
-{
|
|
|
- std::vector<TLimiterPtr> clonedLimiters;
|
|
|
- clonedLimiters.reserve(limiters.size());
|
|
|
- for (const auto& limiter : limiters)
|
|
|
- clonedLimiters.push_back(limiter->clone());
|
|
|
- return std::make_shared<AllOfLimiter>(clonedLimiters);
|
|
|
-}
|
|
|
-
|
|
|
const std::string AnyOfLimiter::aggregator = "anyOf";
|
|
|
const std::string & AnyOfLimiter::getAggregator() const
|
|
|
{
|
|
@@ -673,15 +561,6 @@ ILimiter::EDecision AnyOfLimiter::limit(const BonusLimitationContext & context)
|
|
|
return wasntSure ? ILimiter::EDecision::NOT_SURE : ILimiter::EDecision::DISCARD;
|
|
|
}
|
|
|
|
|
|
-TLimiterPtr AnyOfLimiter::clone() const
|
|
|
-{
|
|
|
- std::vector<TLimiterPtr> clonedLimiters;
|
|
|
- clonedLimiters.reserve(limiters.size());
|
|
|
- for (const auto& limiter : limiters)
|
|
|
- clonedLimiters.push_back(limiter->clone());
|
|
|
- return std::make_shared<AnyOfLimiter>(clonedLimiters);
|
|
|
-}
|
|
|
-
|
|
|
const std::string NoneOfLimiter::aggregator = "noneOf";
|
|
|
const std::string & NoneOfLimiter::getAggregator() const
|
|
|
{
|
|
@@ -711,13 +590,4 @@ ILimiter::EDecision NoneOfLimiter::limit(const BonusLimitationContext & context)
|
|
|
return wasntSure ? ILimiter::EDecision::NOT_SURE : ILimiter::EDecision::ACCEPT;
|
|
|
}
|
|
|
|
|
|
-TLimiterPtr NoneOfLimiter::clone() const
|
|
|
-{
|
|
|
- std::vector<TLimiterPtr> clonedLimiters;
|
|
|
- clonedLimiters.reserve(limiters.size());
|
|
|
- for (const auto& limiter : limiters)
|
|
|
- clonedLimiters.push_back(limiter->clone());
|
|
|
- return std::make_shared<NoneOfLimiter>(clonedLimiters);
|
|
|
-}
|
|
|
-
|
|
|
VCMI_LIB_NAMESPACE_END
|