*Readded Optional Trigger autoaccept/decline/ask, moved to PlayerController.

*Removed deprecated exception throwing in method body template.
*Fixed Deathgreeters trigger not being optional.
This commit is contained in:
Hellfish
2013-04-29 18:13:07 +00:00
parent 56f5714af2
commit f63c516683
7 changed files with 190 additions and 3 deletions

View File

@@ -385,6 +385,11 @@ public class WrappedAbility extends Ability implements ISpellAbility {
private boolean confirmTrigger(Player decider, Map<String, String> triggerParams) {
if (decider.isHuman()) {
if(decider.getController().shouldAlwaysAcceptTrigger(regtrig.getId()))
return true;
else if(decider.getController().shouldAlwaysDeclineTrigger(regtrig.getId()))
return false;
String triggerDesc = triggerParams.get("TriggerDescription").replace("CARDNAME", regtrig.getHostCard().getName());
final StringBuilder buildQuestion = new StringBuilder("Use triggered ability of ");
buildQuestion.append(regtrig.getHostCard().toString()).append("?");

View File

@@ -1,5 +1,6 @@
package forge.game.player;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
@@ -40,6 +41,11 @@ public abstract class PlayerController {
public abstract Input getCleanupInput();
public abstract Input getAutoPassPriorityInput();
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.

View File

@@ -262,4 +262,41 @@ 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) {
}
}

View File

@@ -421,4 +421,53 @@ public class PlayerControllerHuman extends PlayerController {
return oldTarget;
}
}
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);
}
}

View File

@@ -18,11 +18,15 @@
package forge.gui.match.views;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JTextArea;
import javax.swing.border.Border;
import javax.swing.border.EmptyBorder;
@@ -30,6 +34,8 @@ import javax.swing.border.EmptyBorder;
import net.miginfocom.swing.MigLayout;
import forge.CardUtil;
import forge.card.spellability.SpellAbilityStackInstance;
import forge.control.FControl;
import forge.game.player.PlayerController;
import forge.game.zone.MagicStack;
import forge.gui.framework.DragCell;
import forge.gui.framework.DragTab;
@@ -54,6 +60,7 @@ public enum VStack implements IVDoc<CStack> {
// Other fields
private List<JTextArea> stackTARs = new ArrayList<JTextArea>();
private OptionalTriggerMenu otMenu = new OptionalTriggerMenu();
//========= Overridden methods
@@ -163,6 +170,19 @@ public enum VStack implements IVDoc<CStack> {
}
}
});
if(spell.getSpellAbility().isOptionalTrigger()) {
tar.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e){
if (e.getButton() == MouseEvent.BUTTON3)
{
otMenu.setStackInstance(spell);
otMenu.show(e.getComponent(), e.getX(), e.getY());
}
}
});
}
/*
* This updates the Card Picture/Detail when the spell is added to
@@ -201,5 +221,75 @@ public enum VStack implements IVDoc<CStack> {
}
//========= Custom class handling
private final class OptionalTriggerMenu extends JPopupMenu {
private static final long serialVersionUID = 1548494191627807962L;
private final JCheckBoxMenuItem jmiAccept;
private final JCheckBoxMenuItem jmiDecline;
private final JCheckBoxMenuItem jmiAsk;
private PlayerController localPlayer;
private Integer triggerID = 0;
public OptionalTriggerMenu(){
jmiAccept = new JCheckBoxMenuItem("Always Accept");
jmiDecline = new JCheckBoxMenuItem("Always Decline");
jmiAsk = new JCheckBoxMenuItem("Always Ask");
jmiAccept.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
localPlayer.setShouldAlwaysAcceptTrigger(triggerID);
}
});
jmiDecline.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
localPlayer.setShouldAlwaysDeclineTrigger(triggerID);
}
});
jmiAsk.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
System.out.println("ask");
localPlayer.setShouldAlwaysAskTrigger(triggerID);
}
});
add(jmiAccept);
add(jmiDecline);
add(jmiAsk);
}
public void setStackInstance(final SpellAbilityStackInstance SI)
{
if(localPlayer == null)
localPlayer = FControl.SINGLETON_INSTANCE.getPlayer().getController();
triggerID = SI.getSpellAbility().getSourceTrigger();
if(localPlayer.shouldAlwaysAcceptTrigger(triggerID)) {
jmiAccept.setSelected(true);
jmiDecline.setSelected(false);
jmiAsk.setSelected(false);
} else if(localPlayer.shouldAlwaysDeclineTrigger(triggerID)) {
jmiDecline.setSelected(true);
jmiAccept.setSelected(false);
jmiAsk.setSelected(false);
} else {
jmiAsk.setSelected(true);
jmiAccept.setSelected(false);
jmiDecline.setSelected(false);
}
}
}
}