Triggers - always ask or accept: moved to base PlayerController class, VStack allows to choose only for controlled triggers

This commit is contained in:
Maxmtg
2013-05-20 10:09:25 +00:00
parent ba1dc538d6
commit 45db708e5f
5 changed files with 22 additions and 102 deletions

View File

@@ -24,7 +24,6 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import forge.Card; import forge.Card;
import forge.CardLists;
import forge.card.ability.AbilityFactory; import forge.card.ability.AbilityFactory;
import forge.card.ability.AbilityUtils; import forge.card.ability.AbilityUtils;
import forge.card.ability.ApiType; import forge.card.ability.ApiType;
@@ -71,7 +70,6 @@ public class TriggerHandler {
c.getTriggers().get(i).setTemporarilySuppressed(false); c.getTriggers().get(i).setTemporarilySuppressed(false);
} }
} }
} }
public final void registerDelayedTrigger(final Trigger trig) { public final void registerDelayedTrigger(final Trigger trig) {

View File

@@ -1,6 +1,8 @@
package forge.game.player; package forge.game.player;
import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -45,12 +47,6 @@ public abstract class PlayerController {
public abstract Input getCleanupInput(); public abstract Input getCleanupInput();
public final Input getAutoPassPriorityInput() { return autoPassPriorityInput; } 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. * TODO: Write javadoc for this method.
* @param cleanup * @param cleanup
@@ -62,16 +58,27 @@ public abstract class PlayerController {
autoPassUntil = null; autoPassUntil = null;
} }
public boolean mayAutoPass(PhaseType phase) { public boolean mayAutoPass(PhaseType phase) {
return phase.isBefore(autoPassUntil); return phase.isBefore(autoPassUntil);
} }
public boolean isUiSetToSkipPhase(final Player turn, final PhaseType phase) { public boolean isUiSetToSkipPhase(final Player turn, final PhaseType phase) {
return false; // human has it's overload return false; // human has it's overload
} }
// Triggers preliminary choice: ask, decline or play
private Map<Integer, Boolean> triggersAlwaysAccept = new HashMap<Integer, Boolean>();
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 * Uses GUI to learn which spell the player (human in our case) would like to play
*/ */

View File

@@ -255,43 +255,6 @@ public class PlayerControllerAi extends PlayerController {
return null; 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) /* (non-Javadoc)
* @see forge.game.player.PlayerController#chooseCardsToDiscardUnlessType(int, java.util.List, java.lang.String, forge.card.spellability.SpellAbility) * @see forge.game.player.PlayerController#chooseCardsToDiscardUnlessType(int, java.util.List, java.lang.String, forge.card.spellability.SpellAbility)
*/ */

View File

@@ -413,54 +413,6 @@ public class PlayerControllerHuman extends PlayerController {
} }
} }
private List<Integer> triggersAlwaysAccept = new ArrayList<Integer>();
private List<Integer> triggersAlwaysDecline = new ArrayList<Integer>();
/* (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) /* (non-Javadoc)
* @see forge.game.player.PlayerController#chooseCardsToDiscardUnlessType(int, java.lang.String, forge.card.spellability.SpellAbility) * @see forge.game.player.PlayerController#chooseCardsToDiscardUnlessType(int, java.lang.String, forge.card.spellability.SpellAbility)
*/ */

View File

@@ -33,6 +33,7 @@ import javax.swing.border.EmptyBorder;
import net.miginfocom.swing.MigLayout; import net.miginfocom.swing.MigLayout;
import forge.CardUtil; import forge.CardUtil;
import forge.Singletons;
import forge.card.spellability.SpellAbilityStackInstance; import forge.card.spellability.SpellAbilityStackInstance;
import forge.control.FControl; import forge.control.FControl;
import forge.game.player.Player; import forge.game.player.Player;
@@ -118,7 +119,7 @@ public enum VStack implements IVDoc<CStack> {
/** /**
* @param stack * @param stack
* @param viewer */ * @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 // No need to update this unless it's showing
if (!parentCell.getSelected().equals(this)) { return; } if (!parentCell.getSelected().equals(this)) { return; }
@@ -171,13 +172,13 @@ public enum VStack implements IVDoc<CStack> {
} }
}); });
if(spell.getSpellAbility().isOptionalTrigger()) { if(spell.getSpellAbility().isOptionalTrigger() && spell.getSpellAbility().getActivatingPlayer() == viewer) {
tar.addMouseListener(new MouseAdapter() { tar.addMouseListener(new MouseAdapter() {
@Override @Override
public void mouseClicked(MouseEvent e){ public void mouseClicked(MouseEvent e){
if (e.getButton() == MouseEvent.BUTTON3) if (e.getButton() == MouseEvent.BUTTON3)
{ {
otMenu.setStackInstance(spell); otMenu.setStackInstance(spell, viewer);
otMenu.show(e.getComponent(), e.getX(), e.getY()); otMenu.show(e.getComponent(), e.getX(), e.getY());
} }
} }
@@ -272,10 +273,9 @@ public enum VStack implements IVDoc<CStack> {
add(jmiAsk); add(jmiAsk);
} }
public void setStackInstance(final SpellAbilityStackInstance SI) public void setStackInstance(final SpellAbilityStackInstance SI, Player viewer)
{ {
if(localPlayer == null) localPlayer = viewer.getController();
localPlayer = FControl.SINGLETON_INSTANCE.getPlayer().getController();
triggerID = SI.getSpellAbility().getSourceTrigger(); triggerID = SI.getSpellAbility().getSourceTrigger();