1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-01-02 00:10:22 +02:00

TargetCondition: units with 100% MR is immune

Spells should not consider units with 100% MR as valid targets.
This commit is contained in:
Konstantin 2023-05-03 23:45:55 +03:00 committed by Konstantin P
parent c216292f1e
commit 3d46ee3182
3 changed files with 23 additions and 0 deletions

View File

@ -89,6 +89,18 @@ private:
si32 maxVal = std::numeric_limits<si32>::max();
};
class ResistanceCondition : public TargetConditionItemBase
{
protected:
bool check(const Mechanics * m, const battle::Unit * target) const override
{
if(m->isPositiveSpell()) //Always pass on positive
return true;
return target->magicResistance() < 100;
}
};
class CreatureCondition : public TargetConditionItemBase
{
public:
@ -319,6 +331,12 @@ public:
return elementalCondition;
}
Object createResistance() const override
{
static auto elementalCondition = std::make_shared<ResistanceCondition>();
return elementalCondition;
}
Object createNormalLevel() const override
{
static std::shared_ptr<TargetConditionItem> nlCondition = std::make_shared<NormalLevelCondition>();
@ -451,6 +469,7 @@ void TargetCondition::serializeJson(JsonSerializeFormat & handler, const ItemFac
absolute.push_back(itemFactory->createAbsoluteSpell());
absolute.push_back(itemFactory->createAbsoluteLevel());
normal.push_back(itemFactory->createElemental());
normal.push_back(itemFactory->createResistance());
normal.push_back(itemFactory->createNormalLevel());
normal.push_back(itemFactory->createNormalSpell());
negation.push_back(itemFactory->createReceptiveFeature());

View File

@ -49,6 +49,7 @@ public:
virtual Object createElemental() const = 0;
virtual Object createNormalLevel() const = 0;
virtual Object createNormalSpell() const = 0;
virtual Object createResistance() const = 0;
virtual Object createConfigurable(std::string scope, std::string type, std::string identifier) const = 0;
virtual Object createFromJsonStruct(const JsonNode & jsonStruct) const = 0;

View File

@ -41,6 +41,7 @@ public:
MOCK_CONST_METHOD0(createAbsoluteLevel, Object());
MOCK_CONST_METHOD0(createAbsoluteSpell, Object());
MOCK_CONST_METHOD0(createElemental, Object());
MOCK_CONST_METHOD0(createResistance, Object());
MOCK_CONST_METHOD0(createNormalLevel, Object());
MOCK_CONST_METHOD0(createNormalSpell, Object());
MOCK_CONST_METHOD1(createFromJsonStruct, Object(const JsonNode &));
@ -74,6 +75,7 @@ public:
ON_CALL(factoryMock, createAbsoluteLevel()).WillByDefault(Return(itemStub));
ON_CALL(factoryMock, createAbsoluteSpell()).WillByDefault(Return(itemStub));
ON_CALL(factoryMock, createElemental()).WillByDefault(Return(itemStub));
ON_CALL(factoryMock, createResistance()).WillByDefault(Return(itemStub));
ON_CALL(factoryMock, createNormalLevel()).WillByDefault(Return(itemStub));
ON_CALL(factoryMock, createNormalSpell()).WillByDefault(Return(itemStub));
@ -139,6 +141,7 @@ TEST_F(TargetConditionTest, CreatesSpecialConditions)
EXPECT_CALL(factoryMock, createAbsoluteLevel()).Times(1);
EXPECT_CALL(factoryMock, createAbsoluteSpell()).Times(1);
EXPECT_CALL(factoryMock, createElemental()).Times(1);
EXPECT_CALL(factoryMock, createResistance()).Times(1);
EXPECT_CALL(factoryMock, createNormalLevel()).Times(1);
EXPECT_CALL(factoryMock, createNormalSpell()).Times(1);