From c2f1472db71089d6f948deb87b0b7e5e39e27f97 Mon Sep 17 00:00:00 2001 From: tool4EvEr Date: Sun, 19 Dec 2021 20:25:14 +0100 Subject: [PATCH] Fix player highlighting when selected --- forge-ai/src/main/java/forge/ai/ability/DrawAi.java | 10 ++++------ .../java/forge/game/ability/effects/PumpEffect.java | 2 +- .../java/forge/gamemodes/match/AbstractGuiGame.java | 7 +++---- .../gamemodes/match/input/InputSelectManyBase.java | 8 ++++++++ .../gamemodes/match/input/InputSelectTargets.java | 7 +++++++ 5 files changed, 23 insertions(+), 11 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/ability/DrawAi.java b/forge-ai/src/main/java/forge/ai/ability/DrawAi.java index 6fc55a0a8b5..a93d368805f 100644 --- a/forge-ai/src/main/java/forge/ai/ability/DrawAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/DrawAi.java @@ -385,10 +385,10 @@ public class DrawAi extends SpellAbilityAi { } } - boolean aiTarget = sa.canTarget(ai); + boolean aiTarget = sa.canTarget(ai) && (mandatory || ai.canDraw()); // checks what the ai prevent from casting it on itself // if spell is not mandatory - if (aiTarget && !ai.cantLose() && ai.canDraw()) { + if (aiTarget && !ai.cantLose()) { if (numCards >= computerLibrarySize - 3) { if (xPaid) { numCards = computerLibrarySize - 1; @@ -426,7 +426,7 @@ public class DrawAi extends SpellAbilityAi { } if (aiTarget) { - if (computerHandSize + numCards > computerMaxHandSize && game.getPhaseHandler().isPlayerTurn(ai)) { + if (!ai.isCardInPlay("Laboratory Maniac") && computerHandSize + numCards > computerMaxHandSize && game.getPhaseHandler().isPlayerTurn(ai)) { if (xPaid) { numCards = computerMaxHandSize - computerHandSize; if (source.isInZone(ZoneType.Hand)) { @@ -472,10 +472,8 @@ public class DrawAi extends SpellAbilityAi { } // ally would lose because of poison - if (getPoison != null && ally.canReceiveCounters(CounterType.get(CounterEnumType.POISON))) { - if (ally.getPoisonCounters() + numCards > 9) { + if (getPoison != null && ally.canReceiveCounters(CounterType.get(CounterEnumType.POISON)) && ally.getPoisonCounters() + numCards > 9) { continue; - } } sa.getTargets().add(ally); diff --git a/forge-game/src/main/java/forge/game/ability/effects/PumpEffect.java b/forge-game/src/main/java/forge/game/ability/effects/PumpEffect.java index 0fff8f47c1c..5e8d30f477a 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/PumpEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/PumpEffect.java @@ -179,7 +179,7 @@ public class PumpEffect extends SpellAbilityEffect { final int atk = AbilityUtils.calculateAmount(sa.getHostCard(), sa.getParam("NumAtt"), sa, true); final int def = AbilityUtils.calculateAmount(sa.getHostCard(), sa.getParam("NumDef"), sa, true); - boolean gets = (sa.hasParam("NumAtt") || sa.hasParam("NumDef")); + boolean gets = sa.hasParam("NumAtt") || sa.hasParam("NumDef"); boolean gains = !keywords.isEmpty(); if (gets) { diff --git a/forge-gui/src/main/java/forge/gamemodes/match/AbstractGuiGame.java b/forge-gui/src/main/java/forge/gamemodes/match/AbstractGuiGame.java index 9458f34b700..3c463db2b4b 100644 --- a/forge-gui/src/main/java/forge/gamemodes/match/AbstractGuiGame.java +++ b/forge-gui/src/main/java/forge/gamemodes/match/AbstractGuiGame.java @@ -255,10 +255,9 @@ public abstract class AbstractGuiGame implements IGuiGame, IMayViewCards { private final Set highlightedPlayers = Sets.newHashSet(); @Override public void setHighlighted(final PlayerView pv, final boolean b) { - if (b) { - highlightedPlayers.add(pv); - } else { - highlightedPlayers.remove(pv); + final boolean hasChanged = b ? highlightedPlayers.add(pv) : highlightedPlayers.remove(pv); + if (hasChanged) { + updateLives(Collections.singleton(pv)); } } diff --git a/forge-gui/src/main/java/forge/gamemodes/match/input/InputSelectManyBase.java b/forge-gui/src/main/java/forge/gamemodes/match/input/InputSelectManyBase.java index 6af0dd5f0d4..ec6d1095826 100644 --- a/forge-gui/src/main/java/forge/gamemodes/match/input/InputSelectManyBase.java +++ b/forge-gui/src/main/java/forge/gamemodes/match/input/InputSelectManyBase.java @@ -7,6 +7,8 @@ import com.google.common.collect.Iterables; import forge.game.GameEntity; import forge.game.card.Card; import forge.game.card.CardView; +import forge.game.player.Player; +import forge.game.player.PlayerView; import forge.game.spellability.SpellAbility; import forge.localinstance.properties.ForgePreferences; import forge.model.FModel; @@ -110,6 +112,9 @@ public abstract class InputSelectManyBase extends InputSyn if (c instanceof Card) { getController().getGui().setUsedToPay(CardView.get((Card) c), newState); // UI supports card highlighting though this abstraction-breaking mechanism } + else if (c instanceof Player) { + getController().getGui().setHighlighted(PlayerView.get((Player) c), newState); + } } private void resetUsedToPay() { @@ -117,6 +122,9 @@ public abstract class InputSelectManyBase extends InputSyn if (c instanceof Card) { getController().getGui().setUsedToPay(CardView.get((Card) c), false); } + else if (c instanceof Player) { + getController().getGui().setHighlighted(PlayerView.get((Player) c), false); + } } } diff --git a/forge-gui/src/main/java/forge/gamemodes/match/input/InputSelectTargets.java b/forge-gui/src/main/java/forge/gamemodes/match/input/InputSelectTargets.java index e43e267af86..ec8da2c1a9b 100644 --- a/forge-gui/src/main/java/forge/gamemodes/match/input/InputSelectTargets.java +++ b/forge-gui/src/main/java/forge/gamemodes/match/input/InputSelectTargets.java @@ -17,6 +17,7 @@ import forge.game.card.Card; import forge.game.card.CardPredicates; import forge.game.card.CardView; import forge.game.player.Player; +import forge.game.player.PlayerView; import forge.game.spellability.SpellAbility; import forge.game.spellability.TargetRestrictions; import forge.gui.FThreads; @@ -356,6 +357,9 @@ public final class InputSelectTargets extends InputSyncronizedBase { getController().getGui().setUsedToPay(CardView.get((Card) ge), true); lastTarget = (Card) ge; } + else if (ge instanceof Player) { + getController().getGui().setHighlighted(PlayerView.get((Player) ge), true); + } final Integer val = targetDepth.get(ge); targetDepth.put(ge, val == null ? Integer.valueOf(1) : Integer.valueOf(val.intValue() + 1) ); @@ -377,6 +381,9 @@ public final class InputSelectTargets extends InputSyncronizedBase { if (c instanceof Card) { getController().getGui().setUsedToPay(CardView.get((Card) c), false); } + else if (c instanceof Player) { + getController().getGui().setHighlighted(PlayerView.get((Player) c), false); + } } this.stop();