mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 11:18:01 +00:00
Triggers - always ask or accept: moved to base PlayerController class, VStack allows to choose only for controlled triggers
This commit is contained in:
@@ -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) {
|
||||||
|
|||||||
@@ -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
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -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)
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -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)
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user