DEADSOFTWARE

Refactor
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / GameProc.java
index b3b0d3f51a186197c5fb5c1b26185f1388b7984e..fdfef6356f3634a73a63675e05aca3e032db02f7 100644 (file)
@@ -2,8 +2,10 @@ package ru.deadsoftware.cavedroid.game;
 
 import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.Input;
+import com.badlogic.gdx.graphics.g2d.TextureRegion;
 import com.badlogic.gdx.utils.Disposable;
 import com.badlogic.gdx.utils.TimeUtils;
+import com.google.common.collect.Range;
 import ru.deadsoftware.cavedroid.CaveGame;
 import ru.deadsoftware.cavedroid.GameScreen;
 import ru.deadsoftware.cavedroid.game.mobs.FallingGravel;
@@ -11,8 +13,8 @@ import ru.deadsoftware.cavedroid.game.mobs.FallingSand;
 import ru.deadsoftware.cavedroid.game.mobs.Mob;
 import ru.deadsoftware.cavedroid.game.objects.Drop;
 import ru.deadsoftware.cavedroid.game.objects.Player;
-import ru.deadsoftware.cavedroid.misc.ControlMode;
 import ru.deadsoftware.cavedroid.misc.Assets;
+import ru.deadsoftware.cavedroid.misc.ControlMode;
 import ru.deadsoftware.cavedroid.misc.states.GameState;
 
 import java.io.Serializable;
@@ -41,8 +43,11 @@ public class GameProc implements Serializable, Disposable {
     public ArrayList<Mob> mobs;
     ArrayList<Drop> drops;
 
-    public boolean isTouchDown, isKeyDown;
-    public int touchDownX, touchDownY, touchDownBtn, keyDownCode;
+    public boolean isKeyDown;
+    public int keyDownCode;
+    boolean isTouchDown;
+    float touchDownX, touchDownY;
+    int touchDownBtn;
     long touchDownTime;
 
     int curX, curY;
@@ -95,12 +100,12 @@ public class GameProc implements Serializable, Disposable {
         int pastY = curY;
 
         if (controlMode == ControlMode.WALK && CaveGame.TOUCH) {
-            curX = player.getMapX();
-            curY = (int) (player.pos.y + player.getWidth() / 16);
-            while (curY - pastY < 2 && isNotAutoselectable(curX, curY)) {
+            curX = player.getMapX() + (player.looksLeft() ? -1 : 1);
+            curY = player.getUpperMapY();
+            for (int i = 0; i < 2 && isNotAutoselectable(curX, curY); i++) {
                 curY++;
             }
-            if (!isNotAutoselectable(curX, curY)) {
+            if (isNotAutoselectable(curX, curY)) {
                 curX += player.looksLeft() ? 1 : -1;
             }
         } else if (!CaveGame.TOUCH) {
@@ -211,15 +216,20 @@ public class GameProc implements Serializable, Disposable {
         }
     }
 
+    private boolean insideHotbar(float x, float y) {
+        TextureRegion hotbar = Assets.textureRegions.get("hotbar");
+        return y < hotbar.getRegionHeight() &&
+                Range.open(renderer.getWidth() / 2 - (float) hotbar.getRegionWidth() / 2,
+                        renderer.getWidth() / 2 + (float) hotbar.getRegionWidth() / 2).contains(x);
+    }
+
     private void holdMB() {
         if (touchDownBtn == Input.Buttons.RIGHT) {
             useItem(curX, curY, player.inventory[player.slot], true);
             isTouchDown = false;
-        } else if (touchDownBtn == Input.Buttons.LEFT) {
-            if (touchDownY < Assets.invBar.getRegionHeight() &&
-                    touchDownX > renderer.getWidth() / 2 - (float) Assets.invBar.getRegionWidth() / 2 &&
-                    touchDownX < renderer.getWidth() / 2 + (float) Assets.invBar.getRegionWidth() / 2) {
-                CaveGame.GAME_STATE= GameState.CREATIVE_INV;
+        } else {
+            if (insideHotbar(touchDownX, touchDownY)) {
+                CaveGame.GAME_STATE = GameState.CREATIVE_INV;
                 isTouchDown = false;
             }
         }