mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 19:58:00 +00:00
*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:
@@ -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("?");
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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) {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user