From db9bdc05c2f74cc95b924f9a5765fee256e442e4 Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Sat, 26 Apr 2025 00:07:28 +0400 Subject: [PATCH] GUI, game: fixed that attacking creature draws a wrong colored arrow after blocked creature removed (must be gray, close #11894) --- .../src/main/java/mage/client/combat/CombatManager.java | 2 +- Mage.Common/src/main/java/mage/view/CombatGroupView.java | 6 ++++++ .../mage/test/cards/single/dft/KetramoseTheNewDawnTest.java | 1 + 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/Mage.Client/src/main/java/mage/client/combat/CombatManager.java b/Mage.Client/src/main/java/mage/client/combat/CombatManager.java index 6a06996ecb2..ac533e6b679 100644 --- a/Mage.Client/src/main/java/mage/client/combat/CombatManager.java +++ b/Mage.Client/src/main/java/mage/client/combat/CombatManager.java @@ -83,7 +83,7 @@ public enum CombatManager { UUID defenderId = group.getDefenderId(); if (defenderId != null) { // if attacker was blocked then use another arrow color - Color attackColor = group.getBlockers().isEmpty() ? ARROW_COLOR_ATTACKER : ARROW_COLOR_BLOCKED_ATTACKER; + Color attackColor = group.isBlocked() ? ARROW_COLOR_BLOCKED_ATTACKER : ARROW_COLOR_ATTACKER; parentPoint = getParentPoint(attackerCard); PlayAreaPanel p = MageFrame.getGamePlayers(gameId).get(defenderId); if (p != null) { diff --git a/Mage.Common/src/main/java/mage/view/CombatGroupView.java b/Mage.Common/src/main/java/mage/view/CombatGroupView.java index c757ad6ff0d..5dbfdca857c 100644 --- a/Mage.Common/src/main/java/mage/view/CombatGroupView.java +++ b/Mage.Common/src/main/java/mage/view/CombatGroupView.java @@ -19,6 +19,7 @@ public class CombatGroupView implements Serializable { private final CardsView attackers = new CardsView(); private final CardsView blockers = new CardsView(); + private final boolean isBlocked; private String defenderName = ""; private final UUID defenderId; @@ -46,6 +47,7 @@ public class CombatGroupView implements Serializable { blockers.put(id, new PermanentView(blocker, game.getCard(blocker.getId()), null, game)); } } + isBlocked = combatGroup.getBlocked(); } public String getDefenderName() { @@ -63,4 +65,8 @@ public class CombatGroupView implements Serializable { public UUID getDefenderId() { return defenderId; } + + public boolean isBlocked() { + return isBlocked; + } } diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/single/dft/KetramoseTheNewDawnTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/single/dft/KetramoseTheNewDawnTest.java index 452f9a80bf7..41ce65f7cf4 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/single/dft/KetramoseTheNewDawnTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/single/dft/KetramoseTheNewDawnTest.java @@ -40,6 +40,7 @@ public class KetramoseTheNewDawnTest extends CardTestPlayerBase { waitStackResolved(1, PhaseStep.PRECOMBAT_MAIN); checkLife("exile single - after", 1, PhaseStep.PRECOMBAT_MAIN, playerA, 20 - 1); + // exile multiple // must have two triggers: exile on cost and exile on resolve // exile on cost activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{1}, Exile {this}");