mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 19:28:01 +00:00
Add check box menu items and support for tapping stack item to zoom or select options
This commit is contained in:
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -1130,6 +1130,7 @@ forge-gui-mobile/src/forge/itemmanager/filters/ValueRangeFilter.java -text
|
|||||||
forge-gui-mobile/src/forge/itemmanager/views/ImageView.java -text
|
forge-gui-mobile/src/forge/itemmanager/views/ImageView.java -text
|
||||||
forge-gui-mobile/src/forge/itemmanager/views/ItemListView.java -text
|
forge-gui-mobile/src/forge/itemmanager/views/ItemListView.java -text
|
||||||
forge-gui-mobile/src/forge/itemmanager/views/ItemView.java -text
|
forge-gui-mobile/src/forge/itemmanager/views/ItemView.java -text
|
||||||
|
forge-gui-mobile/src/forge/menu/FCheckBoxMenuItem.java -text
|
||||||
forge-gui-mobile/src/forge/menu/FDropDown.java -text
|
forge-gui-mobile/src/forge/menu/FDropDown.java -text
|
||||||
forge-gui-mobile/src/forge/menu/FDropDownMenu.java -text
|
forge-gui-mobile/src/forge/menu/FDropDownMenu.java -text
|
||||||
forge-gui-mobile/src/forge/menu/FMenuBar.java -text
|
forge-gui-mobile/src/forge/menu/FMenuBar.java -text
|
||||||
|
|||||||
@@ -102,8 +102,9 @@ public abstract class PlayerController {
|
|||||||
// Triggers preliminary choice: ask, decline or play
|
// Triggers preliminary choice: ask, decline or play
|
||||||
private Map<Integer, Boolean> triggersAlwaysAccept = new HashMap<Integer, Boolean>();
|
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 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 boolean shouldAlwaysDeclineTrigger(Integer trigger) { return Boolean.FALSE.equals(triggersAlwaysAccept.get(trigger)); }
|
||||||
|
public final boolean shouldAlwaysAskTrigger(Integer trigger) { return !triggersAlwaysAccept.containsKey(trigger); }
|
||||||
|
|
||||||
public final void setShouldAlwaysAcceptTrigger(Integer trigger) { triggersAlwaysAccept.put(trigger, true); }
|
public final void setShouldAlwaysAcceptTrigger(Integer trigger) { triggersAlwaysAccept.put(trigger, true); }
|
||||||
public final void setShouldAlwaysDeclineTrigger(Integer trigger) { triggersAlwaysAccept.put(trigger, false); }
|
public final void setShouldAlwaysDeclineTrigger(Integer trigger) { triggersAlwaysAccept.put(trigger, false); }
|
||||||
|
|||||||
@@ -236,8 +236,8 @@ public enum VStack implements IVDoc<CStack> {
|
|||||||
private Integer triggerID = 0;
|
private Integer triggerID = 0;
|
||||||
|
|
||||||
public OptionalTriggerMenu(){
|
public OptionalTriggerMenu(){
|
||||||
jmiAccept = new JCheckBoxMenuItem("Always Accept");
|
jmiAccept = new JCheckBoxMenuItem("Always Yes");
|
||||||
jmiDecline = new JCheckBoxMenuItem("Always Decline");
|
jmiDecline = new JCheckBoxMenuItem("Always No");
|
||||||
jmiAsk = new JCheckBoxMenuItem("Always Ask");
|
jmiAsk = new JCheckBoxMenuItem("Always Ask");
|
||||||
|
|
||||||
jmiAccept.addActionListener(new ActionListener() {
|
jmiAccept.addActionListener(new ActionListener() {
|
||||||
|
|||||||
55
forge-gui-mobile/src/forge/menu/FCheckBoxMenuItem.java
Normal file
55
forge-gui-mobile/src/forge/menu/FCheckBoxMenuItem.java
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
package forge.menu;
|
||||||
|
|
||||||
|
import forge.Forge.Graphics;
|
||||||
|
import forge.assets.FImage;
|
||||||
|
import forge.assets.FSkinColor;
|
||||||
|
import forge.assets.FSkinColor.Colors;
|
||||||
|
import forge.toolbox.FEvent.FEventHandler;
|
||||||
|
|
||||||
|
public class FCheckBoxMenuItem extends FMenuItem {
|
||||||
|
public static final float CHECKBOX_SIZE = HEIGHT * 0.45f;
|
||||||
|
public static final float PADDING = (HEIGHT - CHECKBOX_SIZE) / 3;
|
||||||
|
public static final FSkinColor FORE_COLOR = FSkinColor.get(Colors.CLR_TEXT);
|
||||||
|
public static final FSkinColor CHECKBOX_COLOR = FORE_COLOR.alphaColor(0.5f);
|
||||||
|
|
||||||
|
private final boolean checked;
|
||||||
|
|
||||||
|
public FCheckBoxMenuItem(String text0, boolean checked0, FEventHandler handler0) {
|
||||||
|
this(text0, checked0, null, handler0, true);
|
||||||
|
}
|
||||||
|
public FCheckBoxMenuItem(String text0, boolean checked0, FEventHandler handler0, boolean enabled0) {
|
||||||
|
this(text0, checked0, null, handler0, enabled0);
|
||||||
|
}
|
||||||
|
public FCheckBoxMenuItem(String text0, boolean checked0, FImage icon0, FEventHandler handler0) {
|
||||||
|
this(text0, checked0, icon0, handler0, true);
|
||||||
|
}
|
||||||
|
public FCheckBoxMenuItem(String text0, boolean checked0, FImage icon0, FEventHandler handler0, boolean enabled0) {
|
||||||
|
super(text0, icon0, handler0, enabled0);
|
||||||
|
checked = checked0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public float getMinWidth() {
|
||||||
|
return super.getMinWidth() + CHECKBOX_SIZE + 2 * PADDING - GAP_X;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void draw(Graphics g) {
|
||||||
|
super.draw(g);
|
||||||
|
|
||||||
|
float w = CHECKBOX_SIZE;
|
||||||
|
float h = CHECKBOX_SIZE;
|
||||||
|
float x = getWidth() - PADDING - w;
|
||||||
|
float y = (getHeight() - h) / 2;
|
||||||
|
g.drawRect(1, CHECKBOX_COLOR, x, y, w, h);
|
||||||
|
if (checked) {
|
||||||
|
//draw check mark
|
||||||
|
x += 3;
|
||||||
|
y++;
|
||||||
|
w -= 6;
|
||||||
|
h -= 3;
|
||||||
|
g.drawLine(2, FORE_COLOR, x, y + h / 2, x + w / 2, y + h);
|
||||||
|
g.drawLine(2, FORE_COLOR, x + w / 2, y + h, x + w, y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,6 +2,7 @@ package forge.screens.match.views;
|
|||||||
|
|
||||||
import forge.GuiBase;
|
import forge.GuiBase;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
|
import forge.menu.FCheckBoxMenuItem;
|
||||||
import forge.menu.FDropDownMenu;
|
import forge.menu.FDropDownMenu;
|
||||||
import forge.menu.FMenuItem;
|
import forge.menu.FMenuItem;
|
||||||
import forge.model.FModel;
|
import forge.model.FModel;
|
||||||
@@ -84,7 +85,9 @@ public class VDevMenu extends FDropDownMenu {
|
|||||||
}));
|
}));
|
||||||
|
|
||||||
final ForgePreferences prefs = FModel.getPreferences();
|
final ForgePreferences prefs = FModel.getPreferences();
|
||||||
addItem(new FMenuItem("Play Unlimited Lands", new FEventHandler() {
|
addItem(new FCheckBoxMenuItem("Play Unlimited Lands",
|
||||||
|
prefs.getPrefBoolean(FPref.DEV_UNLIMITED_LAND),
|
||||||
|
new FEventHandler() {
|
||||||
@Override
|
@Override
|
||||||
public void handleEvent(FEvent e) {
|
public void handleEvent(FEvent e) {
|
||||||
boolean unlimitedLands = !prefs.getPrefBoolean(FPref.DEV_UNLIMITED_LAND);
|
boolean unlimitedLands = !prefs.getPrefBoolean(FPref.DEV_UNLIMITED_LAND);
|
||||||
|
|||||||
@@ -9,13 +9,21 @@ import forge.assets.FSkinColor;
|
|||||||
import forge.assets.FSkinFont;
|
import forge.assets.FSkinFont;
|
||||||
import forge.assets.ImageCache;
|
import forge.assets.ImageCache;
|
||||||
import forge.card.CardDetailUtil;
|
import forge.card.CardDetailUtil;
|
||||||
|
import forge.card.CardZoom;
|
||||||
import forge.card.CardDetailUtil.DetailColors;
|
import forge.card.CardDetailUtil.DetailColors;
|
||||||
import forge.game.card.Card;
|
import forge.game.card.Card;
|
||||||
|
import forge.game.player.Player;
|
||||||
|
import forge.game.player.PlayerController;
|
||||||
import forge.game.spellability.SpellAbilityStackInstance;
|
import forge.game.spellability.SpellAbilityStackInstance;
|
||||||
import forge.game.zone.MagicStack;
|
import forge.game.zone.MagicStack;
|
||||||
|
import forge.menu.FCheckBoxMenuItem;
|
||||||
import forge.menu.FDropDown;
|
import forge.menu.FDropDown;
|
||||||
|
import forge.menu.FMenuItem;
|
||||||
|
import forge.menu.FPopupMenu;
|
||||||
import forge.toolbox.FCardPanel;
|
import forge.toolbox.FCardPanel;
|
||||||
import forge.toolbox.FDisplayObject;
|
import forge.toolbox.FDisplayObject;
|
||||||
|
import forge.toolbox.FEvent;
|
||||||
|
import forge.toolbox.FEvent.FEventHandler;
|
||||||
import forge.toolbox.FLabel;
|
import forge.toolbox.FLabel;
|
||||||
import forge.util.Utils;
|
import forge.util.Utils;
|
||||||
|
|
||||||
@@ -110,7 +118,7 @@ public class VStack extends FDropDown {
|
|||||||
private StackInstanceDisplay(SpellAbilityStackInstance stackInstance0, boolean isTop0) {
|
private StackInstanceDisplay(SpellAbilityStackInstance stackInstance0, boolean isTop0) {
|
||||||
stackInstance = stackInstance0;
|
stackInstance = stackInstance0;
|
||||||
isTop = isTop0;
|
isTop = isTop0;
|
||||||
Card card = stackInstance0.getSourceCard();
|
Card card = stackInstance.getSourceCard();
|
||||||
|
|
||||||
text = stackInstance.getStackDescription();
|
text = stackInstance.getStackDescription();
|
||||||
if (stackInstance.getSpellAbility().isOptionalTrigger() &&
|
if (stackInstance.getSpellAbility().isOptionalTrigger() &&
|
||||||
@@ -131,6 +139,56 @@ public class VStack extends FDropDown {
|
|||||||
return Math.round(height);
|
return Math.round(height);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean tap(float x, float y, int count) {
|
||||||
|
final Player player = stackInstance.getSpellAbility().getActivatingPlayer();
|
||||||
|
final PlayerController controller = player.getController();
|
||||||
|
if (stackInstance.getSpellAbility().isOptionalTrigger() && player.getLobbyPlayer() == localPlayer && controller != null) {
|
||||||
|
FPopupMenu menu = new FPopupMenu() {
|
||||||
|
@Override
|
||||||
|
protected void buildMenu() {
|
||||||
|
final int triggerID = stackInstance.getSpellAbility().getSourceTrigger();
|
||||||
|
addItem(new FCheckBoxMenuItem("Always Yes",
|
||||||
|
controller.shouldAlwaysAcceptTrigger(triggerID),
|
||||||
|
new FEventHandler() {
|
||||||
|
@Override
|
||||||
|
public void handleEvent(FEvent e) {
|
||||||
|
controller.setShouldAlwaysAcceptTrigger(triggerID);
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
addItem(new FCheckBoxMenuItem("Always No",
|
||||||
|
controller.shouldAlwaysDeclineTrigger(triggerID),
|
||||||
|
new FEventHandler() {
|
||||||
|
@Override
|
||||||
|
public void handleEvent(FEvent e) {
|
||||||
|
controller.setShouldAlwaysDeclineTrigger(triggerID);
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
addItem(new FCheckBoxMenuItem("Always Ask",
|
||||||
|
controller.shouldAlwaysAskTrigger(triggerID),
|
||||||
|
new FEventHandler() {
|
||||||
|
@Override
|
||||||
|
public void handleEvent(FEvent e) {
|
||||||
|
controller.setShouldAlwaysAskTrigger(triggerID);
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
addItem(new FMenuItem("Zoom/Details", new FEventHandler() {
|
||||||
|
@Override
|
||||||
|
public void handleEvent(FEvent e) {
|
||||||
|
CardZoom.show(stackInstance.getSourceCard());
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
menu.show(this, x, y);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
CardZoom.show(stackInstance.getSourceCard());
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void draw(Graphics g) {
|
public void draw(Graphics g) {
|
||||||
float w = getWidth();
|
float w = getWidth();
|
||||||
|
|||||||
Reference in New Issue
Block a user