DEADSOFTWARE

Fix touch enywhere
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / GameRenderer.java
index b54bead932f38f903a7f829cf88b5c1a60d73088..7647e69c2a6c0ad9d782de5b5533ccc75123fec1 100644 (file)
@@ -29,6 +29,8 @@ import java.util.Set;
 @GameScope
 public class GameRenderer extends Renderer {
 
+    private static final TouchButton nullButton = new TouchButton(null, -1, true);
+
     private final MainConfig mMainConfig;
     private final MobsController mMobsController;
     private final List<IGameRenderer> mRenderers;
@@ -62,6 +64,8 @@ public class GameRenderer extends Renderer {
         Gdx.gl.glClearColor(0f, .6f, .6f, 1f);
     }
 
+    private float mTouchDownX, mTouchDownY;
+
     private void updateCameraPosition() {
         Player player = mMobsController.getPlayer();
         setCamPos(player.getX() + player.getWidth() / 2 - getWidth() / 2,
@@ -118,10 +122,10 @@ public class GameRenderer extends Renderer {
         float touchY = transformScreenY(screenY);
 
         if (mMainConfig.isTouch()) {
-            @CheckForNull TouchButton touchedKey = getTouchedKey(touchX, touchY);
-            if (touchedKey != null && touchedKey.isMouse()) {
+            TouchButton touchedKey = getTouchedKey(touchX, touchY);
+            if (touchedKey.isMouse()) {
                 return onMouseActionEvent(screenX, screenY, touchedKey.getCode(), true);
-            } else if (touchedKey != null) {
+            } else {
                 return keyUp(touchedKey.getCode());
             }
         }
@@ -129,7 +133,6 @@ public class GameRenderer extends Renderer {
         return onMouseActionEvent(screenX, screenY, button, true);
     }
 
-    @CheckForNull
     private TouchButton getTouchedKey(float touchX, float touchY) {
         for (ObjectMap.Entry<String, TouchButton> entry : Assets.guiMap) {
             TouchButton button = entry.value;
@@ -137,7 +140,7 @@ public class GameRenderer extends Renderer {
                 return button;
             }
         }
-        return null;
+        return nullButton;
     }
 
     @Override
@@ -145,11 +148,14 @@ public class GameRenderer extends Renderer {
         float touchX = transformScreenX(screenX);
         float touchY = transformScreenY(screenY);
 
+        mTouchDownX = touchX;
+        mTouchDownY = touchY;
+
         if (mMainConfig.isTouch()) {
-            @CheckForNull TouchButton touchedKey = getTouchedKey(touchX, touchY);
-            if (touchedKey != null && touchedKey.isMouse()) {
+            TouchButton touchedKey = getTouchedKey(touchX, touchY);
+            if (touchedKey.isMouse()) {
                 return onMouseActionEvent(screenX, screenY, touchedKey.getCode(), false);
-            } else if (touchedKey != null) {
+            } else {
                 return keyDown(touchedKey.getCode());
             }
         }
@@ -159,6 +165,13 @@ public class GameRenderer extends Renderer {
 
     @Override
     public boolean touchDragged(int screenX, int screenY, int pointer) {
+        float touchX = transformScreenX(screenX);
+        float touchY = transformScreenY(screenY);
+
+        if (Math.abs(touchX - mTouchDownX) < 16 && Math.abs(touchY - mTouchDownY) < 16) {
+            return false;
+        }
+
         @CheckForNull MouseInputAction action =
                 mMouseInputActionMapper.mapDragged(screenX, screenY, getCameraViewport());
         return handleMouseAction(action);