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

Merge pull request #5739 from IvanSavenko/battleai_fix

Fix handling of double-wide creatures by BattleAI
This commit is contained in:
Ivan Savenko
2025-05-25 11:26:01 +03:00
committed by GitHub
5 changed files with 122 additions and 26 deletions

View File

@@ -262,6 +262,96 @@ public:
}
};
///// getAttackableHexes tests
TEST_F(AttackableHexesTest, getAttackableHexes_SingleWideAttacker_SingleWideDefender)
{
UnitFake & attacker = addRegularMelee(60, BattleSide::ATTACKER);
UnitFake & defender = addRegularMelee(90, BattleSide::DEFENDER);
static const BattleHexArray expectedDef =
{
72,
73,
89,
91,
106,
107
};
auto attackable = defender.getAttackableHexes(&attacker);
attackable.sort([](const auto & l, const auto & r) { return l < r; });
EXPECT_EQ(expectedDef, attackable);
}
TEST_F(AttackableHexesTest, getAttackableHexes_SingleWideAttacker_DoubleWideDefender)
{
UnitFake & attacker = addRegularMelee(60, BattleSide::ATTACKER);
UnitFake & defender = addDragon(90, BattleSide::DEFENDER);
static const BattleHexArray expectedDef =
{
72,
73,
74,
89,
92,
106,
107,
108
};
auto attackable = defender.getAttackableHexes(&attacker);
attackable.sort([](const auto & l, const auto & r) { return l < r; });
EXPECT_EQ(expectedDef, attackable);
}
TEST_F(AttackableHexesTest, getAttackableHexes_DoubleWideAttacker_SingleWideDefender)
{
UnitFake & attacker = addDragon(60, BattleSide::ATTACKER);
UnitFake & defender = addRegularMelee(90, BattleSide::DEFENDER);
static const BattleHexArray expectedDef =
{
72,
73,
74,
89,
92,
106,
107,
108
};
auto attackable = defender.getAttackableHexes(&attacker);
attackable.sort([](const auto & l, const auto & r) { return l < r; });
EXPECT_EQ(expectedDef, attackable);
}
TEST_F(AttackableHexesTest, getAttackableHexes_DoubleWideAttacker_DoubleWideDefender)
{
UnitFake & attacker = addDragon(60, BattleSide::ATTACKER);
UnitFake & defender = addDragon(90, BattleSide::DEFENDER);
static const BattleHexArray expectedDef =
{
72,
73,
74,
75,
89,
93,
106,
107,
108,
109
};
auto attackable = defender.getAttackableHexes(&attacker);
attackable.sort([](const auto & l, const auto & r) { return l < r; });
EXPECT_EQ(expectedDef, attackable);
}
//// CERBERI 3-HEADED ATTACKS
TEST_F(AttackableHexesTest, CerberiAttackerRight)
@@ -276,7 +366,6 @@ TEST_F(AttackableHexesTest, CerberiAttackerRight)
auto attacked = getAttackedUnits(attacker, defender, defender.getPosition());
EXPECT_TRUE(vstd::contains(attacked, &defender));
EXPECT_TRUE(vstd::contains(attacked, &right));
EXPECT_TRUE(vstd::contains(attacked, &left));
}
@@ -356,7 +445,6 @@ TEST_F(AttackableHexesTest, DragonRightRegular_RightHorithontalBreath)
auto attacked = getAttackedUnits(attacker, defender, defender.getPosition());
EXPECT_TRUE(vstd::contains(attacked, &defender));
EXPECT_TRUE(vstd::contains(attacked, &next));
}