mirror of
https://github.com/correl/mage.git
synced 2024-12-26 11:09:27 +00:00
Merge pull request #2032 from draxdyn/hold_priority
Hold priority on Ctrl+click
This commit is contained in:
commit
2874996994
8 changed files with 147 additions and 13 deletions
|
@ -27,16 +27,20 @@
|
||||||
*/
|
*/
|
||||||
package mage.client;
|
package mage.client;
|
||||||
|
|
||||||
|
import java.awt.AWTEvent;
|
||||||
import java.awt.AlphaComposite;
|
import java.awt.AlphaComposite;
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Component;
|
import java.awt.Component;
|
||||||
import java.awt.Cursor;
|
import java.awt.Cursor;
|
||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
|
import java.awt.EventQueue;
|
||||||
import java.awt.Font;
|
import java.awt.Font;
|
||||||
import java.awt.Graphics2D;
|
import java.awt.Graphics2D;
|
||||||
import java.awt.Image;
|
import java.awt.Image;
|
||||||
import java.awt.Rectangle;
|
import java.awt.Rectangle;
|
||||||
import java.awt.SplashScreen;
|
import java.awt.SplashScreen;
|
||||||
|
import java.awt.Toolkit;
|
||||||
|
import java.awt.event.AWTEventListener;
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
import java.awt.event.ComponentAdapter;
|
import java.awt.event.ComponentAdapter;
|
||||||
|
@ -225,6 +229,26 @@ public class MageFrame extends javax.swing.JFrame implements MageClient {
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void handleEvent(AWTEvent event) {
|
||||||
|
MagePane frame = activeFrame;
|
||||||
|
|
||||||
|
// support multiple mage panes
|
||||||
|
Object source = event.getSource();
|
||||||
|
if(source instanceof Component) {
|
||||||
|
Component component = (Component)source;
|
||||||
|
while(component != null) {
|
||||||
|
if(component instanceof MagePane) {
|
||||||
|
frame = (MagePane)component;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
component = component.getParent();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(frame != null)
|
||||||
|
frame.handleEvent(event);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates new form MageFrame
|
* Creates new form MageFrame
|
||||||
*/
|
*/
|
||||||
|
@ -240,6 +264,13 @@ public class MageFrame extends javax.swing.JFrame implements MageClient {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() {
|
||||||
|
@Override
|
||||||
|
public void eventDispatched(AWTEvent event) {
|
||||||
|
handleEvent(event);
|
||||||
|
}
|
||||||
|
}, AWTEvent.KEY_EVENT_MASK | AWTEvent.MOUSE_EVENT_MASK);
|
||||||
|
|
||||||
TConfig config = TConfig.current();
|
TConfig config = TConfig.current();
|
||||||
config.setArchiveDetector(new TArchiveDetector("zip"));
|
config.setArchiveDetector(new TArchiveDetector("zip"));
|
||||||
config.setAccessPreference(FsAccessOption.STORE, true);
|
config.setAccessPreference(FsAccessOption.STORE, true);
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
*/
|
*/
|
||||||
package mage.client;
|
package mage.client;
|
||||||
|
|
||||||
|
import java.awt.AWTEvent;
|
||||||
import java.awt.KeyboardFocusManager;
|
import java.awt.KeyboardFocusManager;
|
||||||
import java.beans.PropertyVetoException;
|
import java.beans.PropertyVetoException;
|
||||||
import javax.swing.plaf.basic.BasicInternalFrameUI;
|
import javax.swing.plaf.basic.BasicInternalFrameUI;
|
||||||
|
@ -91,6 +92,9 @@ public abstract class MagePane extends javax.swing.JInternalFrame {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void handleEvent(AWTEvent event) {
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method is called from within the constructor to initialize the form.
|
* This method is called from within the constructor to initialize the form.
|
||||||
* WARNING: Do NOT modify this code. The content of this method is always
|
* WARNING: Do NOT modify this code. The content of this method is always
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
*/
|
*/
|
||||||
package mage.client.game;
|
package mage.client.game;
|
||||||
|
|
||||||
|
import java.awt.AWTEvent;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import javax.swing.SwingUtilities;
|
import javax.swing.SwingUtilities;
|
||||||
import mage.client.MagePane;
|
import mage.client.MagePane;
|
||||||
|
@ -132,8 +133,12 @@ public class GamePane extends MagePane {
|
||||||
gamePanel.activated();
|
gamePanel.activated();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void handleEvent(AWTEvent event) {
|
||||||
|
gamePanel.handleEvent(event);
|
||||||
|
}
|
||||||
|
|
||||||
private mage.client.game.GamePanel gamePanel;
|
private mage.client.game.GamePanel gamePanel;
|
||||||
private javax.swing.JScrollPane jScrollPane1;
|
private javax.swing.JScrollPane jScrollPane1;
|
||||||
private UUID gameId;
|
private UUID gameId;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
*/
|
*/
|
||||||
package mage.client.game;
|
package mage.client.game;
|
||||||
|
|
||||||
|
import java.awt.AWTEvent;
|
||||||
import java.awt.BorderLayout;
|
import java.awt.BorderLayout;
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Component;
|
import java.awt.Component;
|
||||||
|
@ -391,6 +392,7 @@ public final class GamePanel extends javax.swing.JPanel {
|
||||||
stackObjects.setCardDimension(GUISizeHelper.handCardDimension);
|
stackObjects.setCardDimension(GUISizeHelper.handCardDimension);
|
||||||
|
|
||||||
txtSpellsCast.setFont(new Font(GUISizeHelper.gameDialogAreaFont.getFontName(), Font.BOLD, GUISizeHelper.gameDialogAreaFont.getSize()));
|
txtSpellsCast.setFont(new Font(GUISizeHelper.gameDialogAreaFont.getFontName(), Font.BOLD, GUISizeHelper.gameDialogAreaFont.getSize()));
|
||||||
|
txtHoldPriority.setFont(new Font(GUISizeHelper.gameDialogAreaFont.getFontName(), Font.BOLD, GUISizeHelper.gameDialogAreaFont.getSize()));
|
||||||
GUISizeHelper.changePopupMenuFont(popupMenuTriggerOrder);
|
GUISizeHelper.changePopupMenuFont(popupMenuTriggerOrder);
|
||||||
|
|
||||||
int newStackWidth = pnlHelperHandButtonsStackArea.getWidth() * GUISizeHelper.stackWidth / 100;
|
int newStackWidth = pnlHelperHandButtonsStackArea.getWidth() * GUISizeHelper.stackWidth / 100;
|
||||||
|
@ -589,7 +591,8 @@ public final class GamePanel extends javax.swing.JPanel {
|
||||||
setMenuStates(
|
setMenuStates(
|
||||||
PreferencesDialog.getCachedValue(KEY_GAME_MANA_AUTOPAYMENT, "true").equals("true"),
|
PreferencesDialog.getCachedValue(KEY_GAME_MANA_AUTOPAYMENT, "true").equals("true"),
|
||||||
PreferencesDialog.getCachedValue(KEY_GAME_MANA_AUTOPAYMENT_ONLY_ONE, "true").equals("true"),
|
PreferencesDialog.getCachedValue(KEY_GAME_MANA_AUTOPAYMENT_ONLY_ONE, "true").equals("true"),
|
||||||
PreferencesDialog.getCachedValue(KEY_USE_FIRST_MANA_ABILITY, "false").equals("true")
|
PreferencesDialog.getCachedValue(KEY_USE_FIRST_MANA_ABILITY, "false").equals("true"),
|
||||||
|
holdingPriority
|
||||||
);
|
);
|
||||||
|
|
||||||
updateGame(game);
|
updateGame(game);
|
||||||
|
@ -957,9 +960,9 @@ public final class GamePanel extends javax.swing.JPanel {
|
||||||
* @param manaPoolAutomaticRestricted
|
* @param manaPoolAutomaticRestricted
|
||||||
* @param useFirstManaAbility
|
* @param useFirstManaAbility
|
||||||
*/
|
*/
|
||||||
public void setMenuStates(boolean manaPoolAutomatic, boolean manaPoolAutomaticRestricted, boolean useFirstManaAbility) {
|
public void setMenuStates(boolean manaPoolAutomatic, boolean manaPoolAutomaticRestricted, boolean useFirstManaAbility, boolean holdPriority) {
|
||||||
for (PlayAreaPanel playAreaPanel : players.values()) {
|
for (PlayAreaPanel playAreaPanel : players.values()) {
|
||||||
playAreaPanel.setMenuStates(manaPoolAutomatic, manaPoolAutomaticRestricted, useFirstManaAbility);
|
playAreaPanel.setMenuStates(manaPoolAutomatic, manaPoolAutomaticRestricted, useFirstManaAbility, holdPriority);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1201,6 +1204,14 @@ public final class GamePanel extends javax.swing.JPanel {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void select(String message, GameView gameView, int messageId, Map<String, Serializable> options) {
|
public void select(String message, GameView gameView, int messageId, Map<String, Serializable> options) {
|
||||||
|
holdingPriority = false;
|
||||||
|
txtHoldPriority.setVisible(false);
|
||||||
|
setMenuStates(
|
||||||
|
PreferencesDialog.getCachedValue(KEY_GAME_MANA_AUTOPAYMENT, "true").equals("true"),
|
||||||
|
PreferencesDialog.getCachedValue(KEY_GAME_MANA_AUTOPAYMENT_ONLY_ONE, "true").equals("true"),
|
||||||
|
PreferencesDialog.getCachedValue(KEY_USE_FIRST_MANA_ABILITY, "false").equals("true"),
|
||||||
|
false);
|
||||||
|
|
||||||
updateGame(gameView, options);
|
updateGame(gameView, options);
|
||||||
boolean controllingPlayer = false;
|
boolean controllingPlayer = false;
|
||||||
for (PlayerView playerView : gameView.getPlayers()) {
|
for (PlayerView playerView : gameView.getPlayers()) {
|
||||||
|
@ -1340,6 +1351,14 @@ public final class GamePanel extends javax.swing.JPanel {
|
||||||
txtSpellsCast.setOpaque(true);
|
txtSpellsCast.setOpaque(true);
|
||||||
txtSpellsCast.setToolTipText("spells cast during the current turn");
|
txtSpellsCast.setToolTipText("spells cast during the current turn");
|
||||||
|
|
||||||
|
txtHoldPriority = new javax.swing.JLabel();
|
||||||
|
txtHoldPriority.setText("Hold");
|
||||||
|
txtHoldPriority.setBorder(BorderFactory.createCompoundBorder(border, paddingBorder));
|
||||||
|
txtHoldPriority.setBackground(Color.LIGHT_GRAY);
|
||||||
|
txtHoldPriority.setOpaque(true);
|
||||||
|
txtHoldPriority.setToolTipText("Holding priority after the next spell cast or ability activation");
|
||||||
|
txtHoldPriority.setVisible(false);
|
||||||
|
|
||||||
btnCancelSkip = new javax.swing.JButton(); // F3
|
btnCancelSkip = new javax.swing.JButton(); // F3
|
||||||
btnSkipToNextTurn = new javax.swing.JButton(); // F4
|
btnSkipToNextTurn = new javax.swing.JButton(); // F4
|
||||||
btnSkipToEndTurn = new javax.swing.JButton(); // F5
|
btnSkipToEndTurn = new javax.swing.JButton(); // F5
|
||||||
|
@ -1670,7 +1689,8 @@ public final class GamePanel extends javax.swing.JPanel {
|
||||||
setMenuStates(
|
setMenuStates(
|
||||||
PreferencesDialog.getCachedValue(KEY_GAME_MANA_AUTOPAYMENT, "true").equals("true"),
|
PreferencesDialog.getCachedValue(KEY_GAME_MANA_AUTOPAYMENT, "true").equals("true"),
|
||||||
PreferencesDialog.getCachedValue(KEY_GAME_MANA_AUTOPAYMENT_ONLY_ONE, "true").equals("true"),
|
PreferencesDialog.getCachedValue(KEY_GAME_MANA_AUTOPAYMENT_ONLY_ONE, "true").equals("true"),
|
||||||
PreferencesDialog.getCachedValue(KEY_USE_FIRST_MANA_ABILITY, "false").equals("true"));
|
PreferencesDialog.getCachedValue(KEY_USE_FIRST_MANA_ABILITY, "false").equals("true"),
|
||||||
|
holdingPriority);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -1713,7 +1733,8 @@ public final class GamePanel extends javax.swing.JPanel {
|
||||||
setMenuStates(
|
setMenuStates(
|
||||||
PreferencesDialog.getCachedValue(KEY_GAME_MANA_AUTOPAYMENT, "true").equals("true"),
|
PreferencesDialog.getCachedValue(KEY_GAME_MANA_AUTOPAYMENT, "true").equals("true"),
|
||||||
PreferencesDialog.getCachedValue(KEY_GAME_MANA_AUTOPAYMENT_ONLY_ONE, "true").equals("true"),
|
PreferencesDialog.getCachedValue(KEY_GAME_MANA_AUTOPAYMENT_ONLY_ONE, "true").equals("true"),
|
||||||
PreferencesDialog.getCachedValue(KEY_USE_FIRST_MANA_ABILITY, "false").equals("true"));
|
PreferencesDialog.getCachedValue(KEY_USE_FIRST_MANA_ABILITY, "false").equals("true"),
|
||||||
|
holdingPriority);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -1829,6 +1850,7 @@ public final class GamePanel extends javax.swing.JPanel {
|
||||||
.addComponent(btnSkipToEndStepBeforeYourTurn)
|
.addComponent(btnSkipToEndStepBeforeYourTurn)
|
||||||
)
|
)
|
||||||
.addGroup(gl_pnlShortCuts.createSequentialGroup()
|
.addGroup(gl_pnlShortCuts.createSequentialGroup()
|
||||||
|
.addComponent(txtHoldPriority)
|
||||||
.addComponent(txtSpellsCast)
|
.addComponent(txtSpellsCast)
|
||||||
.addComponent(btnSwitchHands)
|
.addComponent(btnSwitchHands)
|
||||||
.addComponent(btnCancelSkip)
|
.addComponent(btnCancelSkip)
|
||||||
|
@ -1862,6 +1884,7 @@ public final class GamePanel extends javax.swing.JPanel {
|
||||||
.addComponent(btnSkipToEndStepBeforeYourTurn)
|
.addComponent(btnSkipToEndStepBeforeYourTurn)
|
||||||
)
|
)
|
||||||
.addGroup(gl_pnlShortCuts.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
|
.addGroup(gl_pnlShortCuts.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
|
||||||
|
.addComponent(txtHoldPriority)
|
||||||
.addComponent(txtSpellsCast)
|
.addComponent(txtSpellsCast)
|
||||||
.addComponent(btnSwitchHands)
|
.addComponent(btnSwitchHands)
|
||||||
.addComponent(btnCancelSkip)
|
.addComponent(btnCancelSkip)
|
||||||
|
@ -2343,6 +2366,48 @@ public final class GamePanel extends javax.swing.JPanel {
|
||||||
return feedbackPanel;
|
return feedbackPanel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Use Cmd on OSX since Ctrl+click is already used to simulate right click
|
||||||
|
private static int holdPriorityMask = System.getProperty("os.name").contains("Mac OS X") ? InputEvent.META_DOWN_MASK : InputEvent.CTRL_DOWN_MASK;
|
||||||
|
|
||||||
|
public void handleEvent(AWTEvent event) {
|
||||||
|
if(event instanceof InputEvent) {
|
||||||
|
int id = event.getID();
|
||||||
|
boolean isActionEvent = false;
|
||||||
|
if(id == MouseEvent.MOUSE_PRESSED)
|
||||||
|
isActionEvent = true;
|
||||||
|
else if(id == KeyEvent.KEY_PRESSED)
|
||||||
|
{
|
||||||
|
KeyEvent key = (KeyEvent)event;
|
||||||
|
int keyCode = key.getKeyCode();
|
||||||
|
if(keyCode == KeyEvent.VK_ENTER || keyCode == KeyEvent.VK_SPACE)
|
||||||
|
isActionEvent = true;
|
||||||
|
}
|
||||||
|
if(isActionEvent) {
|
||||||
|
InputEvent input = (InputEvent)event;
|
||||||
|
if((input.getModifiersEx() & holdPriorityMask) != 0) {
|
||||||
|
setMenuStates(
|
||||||
|
PreferencesDialog.getCachedValue(KEY_GAME_MANA_AUTOPAYMENT, "true").equals("true"),
|
||||||
|
PreferencesDialog.getCachedValue(KEY_GAME_MANA_AUTOPAYMENT_ONLY_ONE, "true").equals("true"),
|
||||||
|
PreferencesDialog.getCachedValue(KEY_USE_FIRST_MANA_ABILITY, "false").equals("true"),
|
||||||
|
true);
|
||||||
|
holdPriority(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void holdPriority(boolean holdPriority) {
|
||||||
|
if(holdingPriority != holdPriority) {
|
||||||
|
holdingPriority = holdPriority;
|
||||||
|
txtHoldPriority.setVisible(holdPriority);
|
||||||
|
if(holdPriority)
|
||||||
|
session.sendPlayerAction(PlayerAction.HOLD_PRIORITY, gameId, null);
|
||||||
|
else
|
||||||
|
session.sendPlayerAction(PlayerAction.UNHOLD_PRIORITY, gameId, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean holdingPriority;
|
||||||
private mage.client.components.ability.AbilityPicker abilityPicker;
|
private mage.client.components.ability.AbilityPicker abilityPicker;
|
||||||
private mage.client.cards.BigCard bigCard;
|
private mage.client.cards.BigCard bigCard;
|
||||||
|
|
||||||
|
@ -2397,6 +2462,7 @@ public final class GamePanel extends javax.swing.JPanel {
|
||||||
private JPanel jPhases;
|
private JPanel jPhases;
|
||||||
private JPanel phasesContainer;
|
private JPanel phasesContainer;
|
||||||
private javax.swing.JLabel txtSpellsCast;
|
private javax.swing.JLabel txtSpellsCast;
|
||||||
|
private javax.swing.JLabel txtHoldPriority;
|
||||||
|
|
||||||
private HoverButton currentStep;
|
private HoverButton currentStep;
|
||||||
private Point prevPoint;
|
private Point prevPoint;
|
||||||
|
|
|
@ -78,6 +78,7 @@ public class PlayAreaPanel extends javax.swing.JPanel {
|
||||||
private JCheckBoxMenuItem manaPoolMenuItem2;
|
private JCheckBoxMenuItem manaPoolMenuItem2;
|
||||||
private JCheckBoxMenuItem useFirstManaAbilityItem;
|
private JCheckBoxMenuItem useFirstManaAbilityItem;
|
||||||
private JCheckBoxMenuItem allowViewHandCardsMenuItem;
|
private JCheckBoxMenuItem allowViewHandCardsMenuItem;
|
||||||
|
private JCheckBoxMenuItem holdPriorityMenuItem;
|
||||||
|
|
||||||
public static final int PANEL_HEIGHT = 242;
|
public static final int PANEL_HEIGHT = 242;
|
||||||
public static final int PANEL_HEIGHT_SMALL = 190;
|
public static final int PANEL_HEIGHT_SMALL = 190;
|
||||||
|
@ -210,6 +211,19 @@ public class PlayAreaPanel extends javax.swing.JPanel {
|
||||||
popupMenu.add(menuItem);
|
popupMenu.add(menuItem);
|
||||||
menuItem.addActionListener(skipListener);
|
menuItem.addActionListener(skipListener);
|
||||||
|
|
||||||
|
holdPriorityMenuItem = new JCheckBoxMenuItem("<html><b>" + (System.getProperty("os.name").contains("Mac OS X") ? "Cmd" : "Ctrl") + "+click</b> - Hold Priority");
|
||||||
|
holdPriorityMenuItem.setMnemonic(KeyEvent.VK_P);
|
||||||
|
holdPriorityMenuItem.setToolTipText("<html>Hold priority after casting a spell or activating an ability, instead of automatically passing priority.");
|
||||||
|
popupMenu.add(holdPriorityMenuItem);
|
||||||
|
holdPriorityMenuItem.addActionListener(new ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
boolean holdPriority = ((JCheckBoxMenuItem)e.getSource()).getState();
|
||||||
|
gamePanel.setMenuStates(manaPoolMenuItem1.getState(), manaPoolMenuItem2.getState(), useFirstManaAbilityItem.getState(), holdPriority);
|
||||||
|
gamePanel.holdPriority(holdPriority);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
JMenu skipMenu = new JMenu("Skip");
|
JMenu skipMenu = new JMenu("Skip");
|
||||||
skipMenu.setMnemonic(KeyEvent.VK_S);
|
skipMenu.setMnemonic(KeyEvent.VK_S);
|
||||||
popupMenu.add(skipMenu);
|
popupMenu.add(skipMenu);
|
||||||
|
@ -277,7 +291,7 @@ public class PlayAreaPanel extends javax.swing.JPanel {
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
boolean manaPoolAutomatic = ((JCheckBoxMenuItem) e.getSource()).getState();
|
boolean manaPoolAutomatic = ((JCheckBoxMenuItem) e.getSource()).getState();
|
||||||
PreferencesDialog.saveValue(KEY_GAME_MANA_AUTOPAYMENT, manaPoolAutomatic ? "true" : "false");
|
PreferencesDialog.saveValue(KEY_GAME_MANA_AUTOPAYMENT, manaPoolAutomatic ? "true" : "false");
|
||||||
gamePanel.setMenuStates(manaPoolAutomatic, manaPoolMenuItem2.getState(), useFirstManaAbilityItem.getState());
|
gamePanel.setMenuStates(manaPoolAutomatic, manaPoolMenuItem2.getState(), useFirstManaAbilityItem.getState(), holdPriorityMenuItem.getState());
|
||||||
gamePanel.getSession().sendPlayerAction(manaPoolAutomatic ? PlayerAction.MANA_AUTO_PAYMENT_ON : PlayerAction.MANA_AUTO_PAYMENT_OFF, gameId, null);
|
gamePanel.getSession().sendPlayerAction(manaPoolAutomatic ? PlayerAction.MANA_AUTO_PAYMENT_ON : PlayerAction.MANA_AUTO_PAYMENT_OFF, gameId, null);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -295,7 +309,7 @@ public class PlayAreaPanel extends javax.swing.JPanel {
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
boolean manaPoolAutomaticRestricted = ((JCheckBoxMenuItem) e.getSource()).getState();
|
boolean manaPoolAutomaticRestricted = ((JCheckBoxMenuItem) e.getSource()).getState();
|
||||||
PreferencesDialog.saveValue(KEY_GAME_MANA_AUTOPAYMENT_ONLY_ONE, manaPoolAutomaticRestricted ? "true" : "false");
|
PreferencesDialog.saveValue(KEY_GAME_MANA_AUTOPAYMENT_ONLY_ONE, manaPoolAutomaticRestricted ? "true" : "false");
|
||||||
gamePanel.setMenuStates(manaPoolMenuItem1.getState(), manaPoolAutomaticRestricted, useFirstManaAbilityItem.getState());
|
gamePanel.setMenuStates(manaPoolMenuItem1.getState(), manaPoolAutomaticRestricted, useFirstManaAbilityItem.getState(), holdPriorityMenuItem.getState());
|
||||||
gamePanel.getSession().sendPlayerAction(manaPoolAutomaticRestricted ? PlayerAction.MANA_AUTO_PAYMENT_RESTRICTED_ON : PlayerAction.MANA_AUTO_PAYMENT_RESTRICTED_OFF, gameId, null);
|
gamePanel.getSession().sendPlayerAction(manaPoolAutomaticRestricted ? PlayerAction.MANA_AUTO_PAYMENT_RESTRICTED_ON : PlayerAction.MANA_AUTO_PAYMENT_RESTRICTED_OFF, gameId, null);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -313,7 +327,7 @@ public class PlayAreaPanel extends javax.swing.JPanel {
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
boolean useFirstManaAbility = ((JCheckBoxMenuItem) e.getSource()).getState();
|
boolean useFirstManaAbility = ((JCheckBoxMenuItem) e.getSource()).getState();
|
||||||
PreferencesDialog.saveValue(KEY_USE_FIRST_MANA_ABILITY, useFirstManaAbility ? "true" : "false");
|
PreferencesDialog.saveValue(KEY_USE_FIRST_MANA_ABILITY, useFirstManaAbility ? "true" : "false");
|
||||||
gamePanel.setMenuStates(manaPoolMenuItem1.getState(), manaPoolMenuItem2.getState(), useFirstManaAbility);
|
gamePanel.setMenuStates(manaPoolMenuItem1.getState(), manaPoolMenuItem2.getState(), useFirstManaAbility, holdPriorityMenuItem.getState());
|
||||||
gamePanel.getSession().sendPlayerAction(useFirstManaAbility ? PlayerAction.USE_FIRST_MANA_ABILITY_ON: PlayerAction.USE_FIRST_MANA_ABILITY_OFF, gameId, null);
|
gamePanel.getSession().sendPlayerAction(useFirstManaAbility ? PlayerAction.USE_FIRST_MANA_ABILITY_ON: PlayerAction.USE_FIRST_MANA_ABILITY_OFF, gameId, null);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -642,7 +656,7 @@ public class PlayAreaPanel extends javax.swing.JPanel {
|
||||||
this.playingMode = playingMode;
|
this.playingMode = playingMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setMenuStates(boolean manaPoolAutomatic, boolean manaPoolAutomaticRestricted, boolean useFirstManaAbility) {
|
public void setMenuStates(boolean manaPoolAutomatic, boolean manaPoolAutomaticRestricted, boolean useFirstManaAbility, boolean holdPriority) {
|
||||||
if (manaPoolMenuItem1 != null) {
|
if (manaPoolMenuItem1 != null) {
|
||||||
manaPoolMenuItem1.setSelected(manaPoolAutomatic);
|
manaPoolMenuItem1.setSelected(manaPoolAutomatic);
|
||||||
}
|
}
|
||||||
|
@ -652,6 +666,9 @@ public class PlayAreaPanel extends javax.swing.JPanel {
|
||||||
if (useFirstManaAbilityItem != null) {
|
if (useFirstManaAbilityItem != null) {
|
||||||
useFirstManaAbilityItem.setSelected(useFirstManaAbility);
|
useFirstManaAbilityItem.setSelected(useFirstManaAbility);
|
||||||
}
|
}
|
||||||
|
if (holdPriorityMenuItem != null) {
|
||||||
|
holdPriorityMenuItem.setSelected(holdPriority);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private mage.client.game.BattlefieldPanel battlefieldPanel;
|
private mage.client.game.BattlefieldPanel battlefieldPanel;
|
||||||
|
|
|
@ -395,7 +395,8 @@ public class CallbackClientImpl implements CallbackClient {
|
||||||
.append("<br/><b>F7</b> - Skip to next main phase but stop on declare attackers/blockers and something on the stack")
|
.append("<br/><b>F7</b> - Skip to next main phase but stop on declare attackers/blockers and something on the stack")
|
||||||
.append("<br/><b>F9</b> - Skip everything until your next turn")
|
.append("<br/><b>F9</b> - Skip everything until your next turn")
|
||||||
.append("<br/><b>F11</b> - Skip everything until the end step just prior to your turn")
|
.append("<br/><b>F11</b> - Skip everything until the end step just prior to your turn")
|
||||||
.append("<br/><b>F3</b> - Undo F4/F5/F7/F9/F11").toString(),
|
.append("<br/><b>F3</b> - Undo F4/F5/F7/F9/F11")
|
||||||
|
.append("<br/><b>").append(System.getProperty("os.name").contains("Mac OS X") ? "Cmd" : "Ctrl").append(" + click</b> - Hold priority while casting a spell or activating an ability").toString(),
|
||||||
null, MessageType.USER_INFO, ChatMessage.MessageColor.BLUE);
|
null, MessageType.USER_INFO, ChatMessage.MessageColor.BLUE);
|
||||||
break;
|
break;
|
||||||
case TOURNAMENT:
|
case TOURNAMENT:
|
||||||
|
|
|
@ -123,6 +123,8 @@ public class HumanPlayer extends PlayerImpl {
|
||||||
protected Map<String, Boolean> requestAutoAnswerId = new HashMap<>();
|
protected Map<String, Boolean> requestAutoAnswerId = new HashMap<>();
|
||||||
protected Map<String, Boolean> requestAutoAnswerText = new HashMap<>();
|
protected Map<String, Boolean> requestAutoAnswerText = new HashMap<>();
|
||||||
|
|
||||||
|
protected boolean holdingPriority;
|
||||||
|
|
||||||
public HumanPlayer(String name, RangeOfInfluence range, int skill) {
|
public HumanPlayer(String name, RangeOfInfluence range, int skill) {
|
||||||
super(name, range);
|
super(name, range);
|
||||||
replacementEffectChoice = new ChoiceImpl(true);
|
replacementEffectChoice = new ChoiceImpl(true);
|
||||||
|
@ -565,7 +567,7 @@ public class HumanPlayer extends PlayerImpl {
|
||||||
public boolean priority(Game game) {
|
public boolean priority(Game game) {
|
||||||
passed = false;
|
passed = false;
|
||||||
if (!abort) {
|
if (!abort) {
|
||||||
if (getJustActivatedType() != null) {
|
if (getJustActivatedType() != null && !holdingPriority) {
|
||||||
if (userData.isPassPriorityCast() && getJustActivatedType().equals(AbilityType.SPELL)) {
|
if (userData.isPassPriorityCast() && getJustActivatedType().equals(AbilityType.SPELL)) {
|
||||||
setJustActivatedType(null);
|
setJustActivatedType(null);
|
||||||
pass(game);
|
pass(game);
|
||||||
|
@ -661,6 +663,7 @@ public class HumanPlayer extends PlayerImpl {
|
||||||
}
|
}
|
||||||
while (canRespond()) {
|
while (canRespond()) {
|
||||||
updateGameStatePriority("priority", game);
|
updateGameStatePriority("priority", game);
|
||||||
|
holdingPriority = false;
|
||||||
game.firePriorityEvent(playerId);
|
game.firePriorityEvent(playerId);
|
||||||
waitForResponse(game);
|
waitForResponse(game);
|
||||||
if (game.executingRollback()) {
|
if (game.executingRollback()) {
|
||||||
|
@ -1465,6 +1468,12 @@ public class HumanPlayer extends PlayerImpl {
|
||||||
case REQUEST_AUTO_ANSWER_RESET_ALL:
|
case REQUEST_AUTO_ANSWER_RESET_ALL:
|
||||||
setRequestAutoAnswer(playerAction, game, data);
|
setRequestAutoAnswer(playerAction, game, data);
|
||||||
break;
|
break;
|
||||||
|
case HOLD_PRIORITY:
|
||||||
|
holdingPriority = true;
|
||||||
|
break;
|
||||||
|
case UNHOLD_PRIORITY:
|
||||||
|
holdingPriority = false;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
super.sendPlayerAction(playerAction, game, data);
|
super.sendPlayerAction(playerAction, game, data);
|
||||||
}
|
}
|
||||||
|
|
|
@ -82,5 +82,6 @@ public enum PlayerAction {
|
||||||
CLIENT_DOWNLOAD_CARD_IMAGES,
|
CLIENT_DOWNLOAD_CARD_IMAGES,
|
||||||
CLIENT_RECONNECT,
|
CLIENT_RECONNECT,
|
||||||
CLIENT_REPLAY_ACTION,
|
CLIENT_REPLAY_ACTION,
|
||||||
|
HOLD_PRIORITY,
|
||||||
|
UNHOLD_PRIORITY
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue