From bfc106b0dad00e14cf22e84ef637f27c4333a1bb Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Tue, 10 Sep 2019 21:56:20 +0800 Subject: [PATCH] Much better implementation to make 1 tap on start button (Constructed) on Android (Should prevent issue loading a double match on single view) --- forge-gui-mobile/src/forge/Forge.java | 11 ++++++++++- .../src/forge/screens/LaunchScreen.java | 17 ++++++++--------- .../src/forge/screens/LoadingOverlay.java | 1 + .../forge/screens/constructed/LobbyScreen.java | 2 ++ .../src/forge/toolbox/FOverlay.java | 4 ++++ 5 files changed, 25 insertions(+), 10 deletions(-) diff --git a/forge-gui-mobile/src/forge/Forge.java b/forge-gui-mobile/src/forge/Forge.java index c2469192839..ba0507f213f 100644 --- a/forge-gui-mobile/src/forge/Forge.java +++ b/forge-gui-mobile/src/forge/Forge.java @@ -51,7 +51,8 @@ public class Forge implements ApplicationListener { private static boolean textureFiltering = false; private static boolean destroyThis = false; public static String extrawide = "default"; - public static float heigtModifier = 0.0f; + public static float heigtModifier = 0.0f; + private static boolean isloadingaMatch = false; public static ApplicationListener getApp(Clipboard clipboard0, IDeviceAdapter deviceAdapter0, String assetDir0) { if (GuiBase.getInterface() == null) { @@ -307,6 +308,14 @@ public class Forge implements ApplicationListener { return screenWidth > screenHeight; } + public static boolean isLoadingaMatch() { + return isloadingaMatch; + } + + public static void setLoadingaMatch(boolean value) { + isloadingaMatch = value; + } + public static int getScreenWidth() { return screenWidth; } diff --git a/forge-gui-mobile/src/forge/screens/LaunchScreen.java b/forge-gui-mobile/src/forge/screens/LaunchScreen.java index 43849bf60e1..fdc71f3016e 100644 --- a/forge-gui-mobile/src/forge/screens/LaunchScreen.java +++ b/forge-gui-mobile/src/forge/screens/LaunchScreen.java @@ -2,6 +2,7 @@ package forge.screens; import com.badlogic.gdx.Input.Keys; +import forge.Forge; import forge.Graphics; import forge.assets.FSkinImage; import forge.menu.FPopupMenu; @@ -41,9 +42,6 @@ public abstract class LaunchScreen extends FScreen { protected class StartButton extends FDisplayObject { private boolean pressed; - private long lastTap; - private int tapCount; - private float lastX, lastY; /** * Instantiates a new FButton. @@ -65,13 +63,9 @@ public abstract class LaunchScreen extends FScreen { @Override public final boolean tap(float x, float y, int count) { - tapCount = count; - lastX = x; - lastY = y; - lastTap = System.currentTimeMillis(); //try prevent rapid tap on start button causing issues - if (tapCount == 1 && System.currentTimeMillis() - lastTap < 10 && lastX == x && lastY == y) { + if (count == 1) { + btnStart.setEnabled(false); startMatch(); - tapCount++; } return true; } @@ -80,6 +74,11 @@ public abstract class LaunchScreen extends FScreen { public void draw(Graphics g) { g.drawImage(pressed ? FSkinImage.BTN_START_DOWN : FSkinImage.BTN_START_UP, 0, 0, getWidth(), getHeight()); + //its must be enabled or you can't start any game modes + if (!Forge.isLoadingaMatch()) { + if(!btnStart.isEnabled()) + btnStart.setEnabled(true); + } } } diff --git a/forge-gui-mobile/src/forge/screens/LoadingOverlay.java b/forge-gui-mobile/src/forge/screens/LoadingOverlay.java index 33f1da09872..adea66bfaf5 100644 --- a/forge-gui-mobile/src/forge/screens/LoadingOverlay.java +++ b/forge-gui-mobile/src/forge/screens/LoadingOverlay.java @@ -32,6 +32,7 @@ public class LoadingOverlay extends FOverlay { public void run() { runnable.run(); loader.hide(); + loader.finishedloading(); //setLoadingaMatch to false } }); } diff --git a/forge-gui-mobile/src/forge/screens/constructed/LobbyScreen.java b/forge-gui-mobile/src/forge/screens/constructed/LobbyScreen.java index 1ddb4f0c318..731c9a9eb6b 100644 --- a/forge-gui-mobile/src/forge/screens/constructed/LobbyScreen.java +++ b/forge-gui-mobile/src/forge/screens/constructed/LobbyScreen.java @@ -271,6 +271,8 @@ public abstract class LobbyScreen extends LaunchScreen implements ILobbyView { for (int i = 0; i < getNumPlayers(); i++) { updateDeck(i); } + //set this so we cant get any multi/rapid tap on start button + Forge.setLoadingaMatch(true); FThreads.invokeInBackgroundThread(new Runnable() { //must call startGame in background thread in case there are alerts @Override public void run() { diff --git a/forge-gui-mobile/src/forge/toolbox/FOverlay.java b/forge-gui-mobile/src/forge/toolbox/FOverlay.java index dca477d87a8..e5f36a8b292 100644 --- a/forge-gui-mobile/src/forge/toolbox/FOverlay.java +++ b/forge-gui-mobile/src/forge/toolbox/FOverlay.java @@ -85,6 +85,10 @@ public abstract class FOverlay extends FContainer { setVisible(false); } + public void finishedloading() { + Forge.setLoadingaMatch(false); + } + public boolean isVisibleOnScreen(FScreen screen) { return (openedOnScreen == screen); //by default, only show overlay on the same screen it's opened on }