DEADSOFTWARE

Add crafting
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / GameRenderer.java
index b54bead932f38f903a7f829cf88b5c1a60d73088..e96f3af48e3936fb31ccb99ecfac36a8b67d6774 100644 (file)
@@ -16,6 +16,7 @@ import ru.deadsoftware.cavedroid.game.mobs.MobsController;
 import ru.deadsoftware.cavedroid.game.mobs.Player;
 import ru.deadsoftware.cavedroid.game.objects.TouchButton;
 import ru.deadsoftware.cavedroid.game.render.IGameRenderer;
+import ru.deadsoftware.cavedroid.game.windows.GameWindowsManager;
 import ru.deadsoftware.cavedroid.misc.Assets;
 import ru.deadsoftware.cavedroid.misc.Renderer;
 
@@ -29,6 +30,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;
@@ -37,6 +40,7 @@ public class GameRenderer extends Renderer {
     private final KeyboardInputActionMapper mKeyboardInputActionMapper;
     private final Set<IGameInputHandler<MouseInputAction>> mMouseInputHandlers;
     private final Set<IGameInputHandler<KeyboardInputAction>> mKeyboardInputHandlers;
+    private final GameWindowsManager mGameWindowsManager;
 
     @Inject
     GameRenderer(MainConfig mainConfig,
@@ -46,7 +50,8 @@ public class GameRenderer extends Renderer {
                  MouseInputActionMapper mouseInputActionMapper,
                  KeyboardInputActionMapper keyboardInputActionMapper,
                  Set<IGameInputHandler<MouseInputAction>> mouseInputHandlers,
-                 Set<IGameInputHandler<KeyboardInputAction>> keyboardInputHandlers) {
+                 Set<IGameInputHandler<KeyboardInputAction>> keyboardInputHandlers,
+                 GameWindowsManager gameWindowsManager) {
         super(mainConfig.getWidth(), mainConfig.getHeight());
 
         mMainConfig = mainConfig;
@@ -58,10 +63,13 @@ public class GameRenderer extends Renderer {
         mKeyboardInputActionMapper = keyboardInputActionMapper;
         mMouseInputHandlers = mouseInputHandlers;
         mKeyboardInputHandlers = keyboardInputHandlers;
+        mGameWindowsManager = gameWindowsManager;
 
         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 +126,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,15 +137,17 @@ public class GameRenderer extends Renderer {
         return onMouseActionEvent(screenX, screenY, button, true);
     }
 
-    @CheckForNull
     private TouchButton getTouchedKey(float touchX, float touchY) {
+        if (mGameWindowsManager.getCurrentWindowType() != GameUiWindow.NONE) {
+            return nullButton;
+        }
         for (ObjectMap.Entry<String, TouchButton> entry : Assets.guiMap) {
             TouchButton button = entry.value;
             if (button.getRect().contains(touchX, touchY)) {
                 return button;
             }
         }
-        return null;
+        return nullButton;
     }
 
     @Override
@@ -145,11 +155,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 +172,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);