diff --git a/src/main/java/forge/card/trigger/TriggerHandler.java b/src/main/java/forge/card/trigger/TriggerHandler.java index 20bec24c1aa..50eb9f9c2a1 100644 --- a/src/main/java/forge/card/trigger/TriggerHandler.java +++ b/src/main/java/forge/card/trigger/TriggerHandler.java @@ -24,7 +24,6 @@ import java.util.List; import java.util.Map; import forge.Card; -import forge.CardLists; import forge.card.ability.AbilityFactory; import forge.card.ability.AbilityUtils; import forge.card.ability.ApiType; @@ -71,7 +70,6 @@ public class TriggerHandler { c.getTriggers().get(i).setTemporarilySuppressed(false); } } - } public final void registerDelayedTrigger(final Trigger trig) { diff --git a/src/main/java/forge/game/player/PlayerController.java b/src/main/java/forge/game/player/PlayerController.java index d36da5b4623..4d83e4890b0 100644 --- a/src/main/java/forge/game/player/PlayerController.java +++ b/src/main/java/forge/game/player/PlayerController.java @@ -1,6 +1,8 @@ package forge.game.player; +import java.util.ArrayList; import java.util.Collection; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -45,12 +47,6 @@ public abstract class PlayerController { public abstract Input getCleanupInput(); public final Input getAutoPassPriorityInput() { return autoPassPriorityInput; } - public abstract boolean shouldAlwaysAcceptTrigger(Integer trigger); - public abstract boolean shouldAlwaysDeclineTrigger(Integer trigger); - public abstract void setShouldAlwaysAcceptTrigger(Integer trigger); - public abstract void setShouldAlwaysDeclineTrigger(Integer trigger); - public abstract void setShouldAlwaysAskTrigger(Integer trigger); - /** * TODO: Write javadoc for this method. * @param cleanup @@ -62,16 +58,27 @@ public abstract class PlayerController { autoPassUntil = null; } - public boolean mayAutoPass(PhaseType phase) { return phase.isBefore(autoPassUntil); } - public boolean isUiSetToSkipPhase(final Player turn, final PhaseType phase) { return false; // human has it's overload } + // Triggers preliminary choice: ask, decline or play + private Map triggersAlwaysAccept = new HashMap(); + + public final boolean shouldAlwaysAcceptTrigger(Integer trigger) { return Boolean.TRUE.equals(triggersAlwaysAccept.get(trigger)); } + public final boolean shouldAlwaysDeclineTrigger(Integer trigger) { return Boolean.FALSE.equals(triggersAlwaysAccept.get(trigger)); } + + public final void setShouldAlwaysAcceptTrigger(Integer trigger) { triggersAlwaysAccept.put(trigger, true); } + public final void setShouldAlwaysDeclineTrigger(Integer trigger) { triggersAlwaysAccept.put(trigger, false); } + public final void setShouldAlwaysAskTrigger(Integer trigger) { triggersAlwaysAccept.remove(trigger); } + + // End of Triggers preliminary choice + + /** * Uses GUI to learn which spell the player (human in our case) would like to play */ diff --git a/src/main/java/forge/game/player/PlayerControllerAi.java b/src/main/java/forge/game/player/PlayerControllerAi.java index 9e6abc41c1d..3bf981677a7 100644 --- a/src/main/java/forge/game/player/PlayerControllerAi.java +++ b/src/main/java/forge/game/player/PlayerControllerAi.java @@ -255,43 +255,6 @@ public class PlayerControllerAi extends PlayerController { return null; } - /* (non-Javadoc) - * @see forge.game.player.PlayerController#shouldAlwaysAcceptTrigger(java.lang.Integer) - */ - @Override - public boolean shouldAlwaysAcceptTrigger(Integer trigger) { - return false; - } - - /* (non-Javadoc) - * @see forge.game.player.PlayerController#shouldAlwaysDeclineTrigger(java.lang.Integer) - */ - @Override - public boolean shouldAlwaysDeclineTrigger(Integer trigger) { - return false; - } - - /* (non-Javadoc) - * @see forge.game.player.PlayerController#setShouldAlwaysAcceptTrigger(java.lang.Integer) - */ - @Override - public void setShouldAlwaysAcceptTrigger(Integer trigger) { - } - - /* (non-Javadoc) - * @see forge.game.player.PlayerController#setShouldAlwaysDeclineTrigger(java.lang.Integer) - */ - @Override - public void setShouldAlwaysDeclineTrigger(Integer trigger) { - } - - /* (non-Javadoc) - * @see forge.game.player.PlayerController#setShouldAlwaysAskTrigger(java.lang.Integer) - */ - @Override - public void setShouldAlwaysAskTrigger(Integer trigger) { - } - /* (non-Javadoc) * @see forge.game.player.PlayerController#chooseCardsToDiscardUnlessType(int, java.util.List, java.lang.String, forge.card.spellability.SpellAbility) */ diff --git a/src/main/java/forge/game/player/PlayerControllerHuman.java b/src/main/java/forge/game/player/PlayerControllerHuman.java index 3e6adf7425c..41eef81bbaf 100644 --- a/src/main/java/forge/game/player/PlayerControllerHuman.java +++ b/src/main/java/forge/game/player/PlayerControllerHuman.java @@ -412,54 +412,6 @@ public class PlayerControllerHuman extends PlayerController { return oldTarget; } } - - private List triggersAlwaysAccept = new ArrayList(); - private List triggersAlwaysDecline = new ArrayList(); - - /* (non-Javadoc) - * @see forge.game.player.PlayerController#shouldAlwaysAcceptTrigger(int) - */ - @Override - public boolean shouldAlwaysAcceptTrigger(Integer trigger) { - return triggersAlwaysAccept.contains(trigger); - } - - /* (non-Javadoc) - * @see forge.game.player.PlayerController#shouldAlwaysDeclineTrigger(int) - */ - @Override - public boolean shouldAlwaysDeclineTrigger(Integer trigger) { - return triggersAlwaysDecline.contains(trigger); - } - - /* (non-Javadoc) - * @see forge.game.player.PlayerController#setShouldAlwaysAcceptTrigger(int) - */ - @Override - public void setShouldAlwaysAcceptTrigger(Integer trigger) { - if(!triggersAlwaysAccept.contains(trigger)) - triggersAlwaysAccept.add(trigger); - triggersAlwaysDecline.remove((Object)trigger); - } - - /* (non-Javadoc) - * @see forge.game.player.PlayerController#setShouldAlwaysDeclineTrigger(int) - */ - @Override - public void setShouldAlwaysDeclineTrigger(Integer trigger) { - if(!triggersAlwaysDecline.contains(trigger)) - triggersAlwaysDecline.add(trigger); - triggersAlwaysAccept.remove((Object)trigger); - } - - /* (non-Javadoc) - * @see forge.game.player.PlayerController#setShouldAlwaysAskTrigger(java.lang.Integer) - */ - @Override - public void setShouldAlwaysAskTrigger(Integer trigger) { - triggersAlwaysAccept.remove((Object)trigger); - triggersAlwaysDecline.remove((Object)trigger); - } /* (non-Javadoc) * @see forge.game.player.PlayerController#chooseCardsToDiscardUnlessType(int, java.lang.String, forge.card.spellability.SpellAbility) diff --git a/src/main/java/forge/gui/match/views/VStack.java b/src/main/java/forge/gui/match/views/VStack.java index 10fa5c5c6e7..aeccbcc3958 100644 --- a/src/main/java/forge/gui/match/views/VStack.java +++ b/src/main/java/forge/gui/match/views/VStack.java @@ -33,6 +33,7 @@ import javax.swing.border.EmptyBorder; import net.miginfocom.swing.MigLayout; import forge.CardUtil; +import forge.Singletons; import forge.card.spellability.SpellAbilityStackInstance; import forge.control.FControl; import forge.game.player.Player; @@ -118,7 +119,7 @@ public enum VStack implements IVDoc { /** * @param stack * @param viewer */ - public void updateStack(final MagicStack stack, Player viewer) { + public void updateStack(final MagicStack stack, final Player viewer) { // No need to update this unless it's showing if (!parentCell.getSelected().equals(this)) { return; } @@ -133,7 +134,7 @@ public enum VStack implements IVDoc { final Border border = new EmptyBorder(5, 5, 5, 5); Color[] scheme; - + stackTARs.clear(); boolean isFirst = true; for (final SpellAbilityStackInstance spell : stack) { @@ -171,13 +172,13 @@ public enum VStack implements IVDoc { } }); - if(spell.getSpellAbility().isOptionalTrigger()) { + if(spell.getSpellAbility().isOptionalTrigger() && spell.getSpellAbility().getActivatingPlayer() == viewer) { tar.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e){ if (e.getButton() == MouseEvent.BUTTON3) { - otMenu.setStackInstance(spell); + otMenu.setStackInstance(spell, viewer); otMenu.show(e.getComponent(), e.getX(), e.getY()); } } @@ -272,10 +273,9 @@ public enum VStack implements IVDoc { add(jmiAsk); } - public void setStackInstance(final SpellAbilityStackInstance SI) + public void setStackInstance(final SpellAbilityStackInstance SI, Player viewer) { - if(localPlayer == null) - localPlayer = FControl.SINGLETON_INSTANCE.getPlayer().getController(); + localPlayer = viewer.getController(); triggerID = SI.getSpellAbility().getSourceTrigger();