mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 04:08:01 +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:
File diff suppressed because one or more lines are too long
@@ -2,7 +2,7 @@ Name:Deathgreeter
|
|||||||
ManaCost:B
|
ManaCost:B
|
||||||
Types:Creature Human Shaman
|
Types:Creature Human Shaman
|
||||||
PT:1/1
|
PT:1/1
|
||||||
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.Other | TriggerZones$ Battlefield | Execute$ TrigGainLife | TriggerDescription$ Whenever another creature is put into a graveyard from the battlefield, you gain 1 life.
|
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Creature.Other | TriggerZones$ Battlefield | Execute$ TrigGainLife | OptionalDecider$ You | TriggerDescription$ Whenever another creature is put into a graveyard from the battlefield, you may gain 1 life.
|
||||||
SVar:TrigGainLife:AB$GainLife | Cost$ 0 | Defined$ You | LifeAmount$ 1
|
SVar:TrigGainLife:AB$GainLife | Cost$ 0 | Defined$ You | LifeAmount$ 1
|
||||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/deathgreeter.jpg
|
SVar:Picture:http://www.wizards.com/global/images/magic/general/deathgreeter.jpg
|
||||||
Oracle:Whenever another creature dies, you may gain 1 life.
|
Oracle:Whenever another creature dies, you may gain 1 life.
|
||||||
|
|||||||
@@ -385,6 +385,11 @@ public class WrappedAbility extends Ability implements ISpellAbility {
|
|||||||
|
|
||||||
private boolean confirmTrigger(Player decider, Map<String, String> triggerParams) {
|
private boolean confirmTrigger(Player decider, Map<String, String> triggerParams) {
|
||||||
if (decider.isHuman()) {
|
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());
|
String triggerDesc = triggerParams.get("TriggerDescription").replace("CARDNAME", regtrig.getHostCard().getName());
|
||||||
final StringBuilder buildQuestion = new StringBuilder("Use triggered ability of ");
|
final StringBuilder buildQuestion = new StringBuilder("Use triggered ability of ");
|
||||||
buildQuestion.append(regtrig.getHostCard().toString()).append("?");
|
buildQuestion.append(regtrig.getHostCard().toString()).append("?");
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package forge.game.player;
|
package forge.game.player;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -40,6 +41,11 @@ public abstract class PlayerController {
|
|||||||
public abstract Input getCleanupInput();
|
public abstract Input getCleanupInput();
|
||||||
public abstract Input getAutoPassPriorityInput();
|
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.
|
* TODO: Write javadoc for this method.
|
||||||
|
|||||||
@@ -262,4 +262,41 @@ 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) {
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -421,4 +421,53 @@ public class PlayerControllerHuman extends PlayerController {
|
|||||||
return oldTarget;
|
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;
|
package forge.gui.match.views;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
|
import java.awt.event.ActionEvent;
|
||||||
|
import java.awt.event.ActionListener;
|
||||||
import java.awt.event.MouseAdapter;
|
import java.awt.event.MouseAdapter;
|
||||||
import java.awt.event.MouseEvent;
|
import java.awt.event.MouseEvent;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.swing.JCheckBoxMenuItem;
|
||||||
|
import javax.swing.JPopupMenu;
|
||||||
import javax.swing.JTextArea;
|
import javax.swing.JTextArea;
|
||||||
import javax.swing.border.Border;
|
import javax.swing.border.Border;
|
||||||
import javax.swing.border.EmptyBorder;
|
import javax.swing.border.EmptyBorder;
|
||||||
@@ -30,6 +34,8 @@ import javax.swing.border.EmptyBorder;
|
|||||||
import net.miginfocom.swing.MigLayout;
|
import net.miginfocom.swing.MigLayout;
|
||||||
import forge.CardUtil;
|
import forge.CardUtil;
|
||||||
import forge.card.spellability.SpellAbilityStackInstance;
|
import forge.card.spellability.SpellAbilityStackInstance;
|
||||||
|
import forge.control.FControl;
|
||||||
|
import forge.game.player.PlayerController;
|
||||||
import forge.game.zone.MagicStack;
|
import forge.game.zone.MagicStack;
|
||||||
import forge.gui.framework.DragCell;
|
import forge.gui.framework.DragCell;
|
||||||
import forge.gui.framework.DragTab;
|
import forge.gui.framework.DragTab;
|
||||||
@@ -54,6 +60,7 @@ public enum VStack implements IVDoc<CStack> {
|
|||||||
|
|
||||||
// Other fields
|
// Other fields
|
||||||
private List<JTextArea> stackTARs = new ArrayList<JTextArea>();
|
private List<JTextArea> stackTARs = new ArrayList<JTextArea>();
|
||||||
|
private OptionalTriggerMenu otMenu = new OptionalTriggerMenu();
|
||||||
|
|
||||||
//========= Overridden methods
|
//========= 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
|
* 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
|
//========= 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