From 2d56178cfc3c490d7e456240a7390fde53e3f4e2 Mon Sep 17 00:00:00 2001 From: drdev Date: Wed, 16 Apr 2014 23:06:54 +0000 Subject: [PATCH] Support double tapping card to select first option --- .../forge/screens/match/InputSelectCard.java | 30 ++++++++++--- .../src/forge/toolbox/FGestureAdapter.java | 4 +- forge-gui-mobile/src/forge/util/Utils.java | 45 +------------------ 3 files changed, 28 insertions(+), 51 deletions(-) diff --git a/forge-gui-mobile/src/forge/screens/match/InputSelectCard.java b/forge-gui-mobile/src/forge/screens/match/InputSelectCard.java index 94b97ba86a0..642a270a359 100644 --- a/forge-gui-mobile/src/forge/screens/match/InputSelectCard.java +++ b/forge-gui-mobile/src/forge/screens/match/InputSelectCard.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; +import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment; import com.badlogic.gdx.math.Vector2; @@ -21,14 +22,17 @@ import forge.screens.FScreen; import forge.screens.match.views.VCardDisplayArea.CardAreaPanel; import forge.toolbox.FCardPanel; import forge.toolbox.FDisplayObject; +import forge.toolbox.FGestureAdapter; import forge.toolbox.FList; import forge.util.Callback; import forge.util.Utils; public class InputSelectCard { private static final float LIST_OPTION_HEIGHT = Utils.AVG_FINGER_HEIGHT; + private static final long DOUBLE_TAP_INTERVAL = Utils.secondsToTimeSpan(FGestureAdapter.DOUBLE_TAP_INTERVAL); private static CardOptionsList visibleList; private static CardOptionsList.ListItem pressedItem; + private static long lastSelectTime; private InputSelectCard() { } @@ -37,14 +41,26 @@ public class InputSelectCard { Input currentInput = FControl.getInputQueue().getInput(); if (currentInput == null) { return; } + long now = Gdx.input.getCurrentEventTime(); + if (visibleList != null) { boolean isCurrentOwner = (visibleList.owner == cardPanel); - CardOptionsList.hide(); + if (isCurrentOwner && visibleList.getCount() > 0 && + now - lastSelectTime <= DOUBLE_TAP_INTERVAL) { + //auto-select first option if double tapped + visibleList.getItemAt(0).tap(0, 0, 1); + } + else { + //otherwise hide options when pressed a second time + CardOptionsList.hide(); + } if (isCurrentOwner) { return; } } + lastSelectTime = now; + final Card card = cardPanel.getCard(); if (currentInput instanceof InputPassPriority) { @@ -200,11 +216,13 @@ public class InputSelectCard { @Override public boolean press(float x, float y) { - if (visibleList == null) { return false; } - CardAreaPanel owner = visibleList.owner; - boolean onOwner = owner.contains(owner.getLeft() + owner.screenToLocalX(x), owner.getTop() + owner.screenToLocalY(y)); - hide(); //auto-hide when backdrop pressed - return onOwner; //allow press to pass through to object if it's not the owner + if (visibleList != null) { + CardAreaPanel owner = visibleList.owner; + if (!owner.contains(owner.getLeft() + owner.screenToLocalX(x), owner.getTop() + owner.screenToLocalY(y))) { + hide(); //auto-hide when backdrop pressed unless on owner + } + } + return false; //allow press to pass through to object } @Override diff --git a/forge-gui-mobile/src/forge/toolbox/FGestureAdapter.java b/forge-gui-mobile/src/forge/toolbox/FGestureAdapter.java index 91ab95010a9..0daec85cdac 100644 --- a/forge-gui-mobile/src/forge/toolbox/FGestureAdapter.java +++ b/forge-gui-mobile/src/forge/toolbox/FGestureAdapter.java @@ -76,11 +76,11 @@ public abstract class FGestureAdapter extends InputAdapter { * @param flingDelay0 time in seconds the finger must have been dragged for a fling event to be fired. */ public FGestureAdapter(float tapSquareSize0, float tapCountInterval0, float pressDelay0, float longPressDelay0, float quickTapDelay0, float flingDelay0) { tapSquareSize = tapSquareSize0; - tapCountInterval = (long)(tapCountInterval0 * 1000000000l); + tapCountInterval = Utils.secondsToTimeSpan(tapCountInterval0); pressDelay = pressDelay0; longPressDelay = longPressDelay0; quickTapDelay = quickTapDelay0; - flingDelay = (long)(flingDelay0 * 1000000000l); + flingDelay = Utils.secondsToTimeSpan(flingDelay0); } @Override diff --git a/forge-gui-mobile/src/forge/util/Utils.java b/forge-gui-mobile/src/forge/util/Utils.java index 90aa14c58ea..82a63d2457b 100644 --- a/forge-gui-mobile/src/forge/util/Utils.java +++ b/forge-gui-mobile/src/forge/util/Utils.java @@ -2,17 +2,6 @@ package forge.util; import com.badlogic.gdx.Gdx; -import forge.card.CardDb; -import forge.deck.Deck; -import forge.deck.generation.DeckGenerator2Color; -import forge.deck.generation.DeckGenerator3Color; -import forge.deck.generation.DeckGenerator5Color; -import forge.deck.generation.DeckGeneratorBase; -import forge.deck.generation.DeckGeneratorMonoColor; -import forge.model.FModel; -import forge.properties.ForgePreferences.FPref; -import forge.toolbox.FOptionPane; - public class Utils { private final static float ppcX = Gdx.graphics.getPpcX(); private final static float ppcY = Gdx.graphics.getPpcY(); @@ -28,37 +17,7 @@ public class Utils { return ppcY * cm; } - public static Deck generateRandomDeck(final int colorCount0) { - try { - CardDb cardDb = FModel.getMagicDb().getCommonCards(); - DeckGeneratorBase gen = null; - switch (colorCount0) { - case 1: gen = new DeckGeneratorMonoColor(cardDb, null); break; - case 2: gen = new DeckGenerator2Color(cardDb, null, null); break; - case 3: gen = new DeckGenerator3Color(cardDb, null, null, null); break; - case 5: gen = new DeckGenerator5Color(cardDb); break; - } - - if (gen != null) { - final Deck deck = new Deck(); - gen.setSingleton(false); - gen.setUseArtifacts(false); - deck.getMain().addAll(gen.getDeck(60, false)); - return deck; - } - } - catch (Exception ex) { - FOptionPane.showErrorDialog(ex.toString()); - } - return null; - } - - public static String getPlayerName() { - return FModel.getPreferences().getPref(FPref.PLAYER_NAME); - } - - public static String personalizeHuman(String text) { - String playerName = FModel.getPreferences().getPref(FPref.PLAYER_NAME); - return text.replaceAll("(?i)human", playerName); + public static long secondsToTimeSpan(float seconds) { + return (long)(seconds * 1000000000l); } }