X-Git-Url: http://deadsoftware.ru/gitweb?p=cavedroid.git;a=blobdiff_plain;f=core%2Fsrc%2Fru%2Fdeadsoftware%2Fcavedroid%2Fmisc%2FInputHandlerGame.java;h=9ba00bcfca9ee5e393cb188651ed18b355bd23d7;hp=c00521f1311570106c91e8aecc5d2b4a1458238e;hb=59d07dd8a43cfb159045e6313cca4d519f67a6fc;hpb=fe4608f2ebca50f37bd9534891187d87018e7bf5 diff --git a/core/src/ru/deadsoftware/cavedroid/misc/InputHandlerGame.java b/core/src/ru/deadsoftware/cavedroid/misc/InputHandlerGame.java index c00521f..9ba00bc 100644 --- a/core/src/ru/deadsoftware/cavedroid/misc/InputHandlerGame.java +++ b/core/src/ru/deadsoftware/cavedroid/misc/InputHandlerGame.java @@ -1,18 +1,63 @@ package ru.deadsoftware.cavedroid.misc; +import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Input; -import com.badlogic.gdx.InputProcessor; +import com.badlogic.gdx.InputAdapter; +import com.badlogic.gdx.math.Rectangle; +import com.badlogic.gdx.utils.JsonValue; import ru.deadsoftware.cavedroid.CaveGame; +import ru.deadsoftware.cavedroid.GameScreen; import ru.deadsoftware.cavedroid.game.GameInput; -import static ru.deadsoftware.cavedroid.GameScreen.*; +import static ru.deadsoftware.cavedroid.GameScreen.GP; -public class InputHandlerGame implements InputProcessor { +public class InputHandlerGame extends InputAdapter { + + private static final int + UP = 0, + DOWN = 1, + LEFT = 2, + RIGHT = 3, + ALT = 4, + LMB = 5, + RMB = 6; private GameInput gameInput; public InputHandlerGame() { this.gameInput = new GameInput(); + loadTouchButtonsFromJSON(); + } + + private void loadTouchButtonsFromJSON() { + JsonValue json = Assets.jsonReader.parse(Gdx.files.internal("json/touch_buttons.json")); + for (JsonValue key = json.child(); key != null; key = key.next()) { + float x = key.getFloat("x"); + float y = key.getFloat("y"); + float w = key.getFloat("w"); + float h = key.getFloat("h"); + if (x < 0) x = GP.renderer.getWidth() + x; + if (y < 0) y = GP.renderer.getHeight() + y; + Assets.guiMap.put(key.name(), new Rectangle(x, y, w, h)); + } + + } + + private float transformScreenX(int screenX) { + return GP.renderer.getWidth() / GameScreen.getWidth() * screenX; + } + + private float transformScreenY(int screenY) { + return GP.renderer.getHeight() / GameScreen.getHeight() * screenY; + } + + private int getTouchedKey(float touchX, float touchY) { + for (int i = 0; i < Assets.guiMap.size; i++) { + if (Assets.guiMap.getValueAt(i).contains(touchX, touchY)) { + return i; + } + } + return -1; } @Override @@ -27,96 +72,88 @@ public class InputHandlerGame implements InputProcessor { return false; } - @Override - public boolean keyTyped(char character) { - return false; - } - @Override public boolean touchDown(int screenX, int screenY, int pointer, int button) { - screenX *= GP.renderer.getWidth() / getWidth(); - screenY *= GP.renderer.getHeight() / getHeight(); + float touchX = transformScreenX(screenX); + float touchY = transformScreenY(screenY); if (CaveGame.TOUCH) { - if (screenX > 26 && screenX < 52 && screenY > GP.renderer.getHeight() - 52 && - screenY < GP.renderer.getHeight() - 26) { - if (GP.controlMode == ControlMode.CURSOR) { - gameInput.keyDown(Input.Keys.W); - } else { - gameInput.keyDown(Input.Keys.SPACE); - } - } else if (screenX > 0 && screenX < 26 && screenY > GP.renderer.getHeight() - 26) { - gameInput.keyDown(Input.Keys.A); - } else if (screenX > 26 && screenX < 52 && screenY > GP.renderer.getHeight() - 26) { - if (GP.controlMode == ControlMode.CURSOR) gameInput.keyDown(Input.Keys.S); - else gameInput.keyDown(Input.Keys.CONTROL_LEFT); - } else if (screenX > 52 && screenX < 78 && screenY > GP.renderer.getHeight() - 26) { - gameInput.keyDown(Input.Keys.D); - } else if (screenX > 78 && screenX < 104 && screenY > GP.renderer.getHeight() - 26) { - gameInput.keyDown(Input.Keys.ALT_LEFT); - } else if (screenX > GP.renderer.getWidth() - 52 && screenX < GP.renderer.getWidth() - 26 && - screenY > GP.renderer.getHeight() - 26) { - gameInput.touchDown(screenX, screenY, Input.Buttons.LEFT); - } else if (screenX > GP.renderer.getWidth() - 26 && screenY > screenY - 26) { - gameInput.touchDown(screenX, screenY, Input.Buttons.RIGHT); - } else { - gameInput.touchDown(screenX, screenY, -1); + int touchedKey = getTouchedKey(touchX, touchY); + switch (touchedKey) { + case UP: + gameInput.keyDown(GP.controlMode == ControlMode.CURSOR ? Input.Keys.W : Input.Keys.SPACE); + break; + case DOWN: + gameInput.keyDown(GP.controlMode == ControlMode.CURSOR ? Input.Keys.S : Input.Keys.CONTROL_LEFT); + break; + case LEFT: + gameInput.keyDown(Input.Keys.A); + break; + case RIGHT: + gameInput.keyDown(Input.Keys.D); + break; + case ALT: + gameInput.keyDown(Input.Keys.ALT_LEFT); + break; + case LMB: + gameInput.touchDown(touchX, touchY, Input.Buttons.LEFT); + break; + case RMB: + gameInput.touchDown(touchX, touchY, Input.Buttons.RIGHT); + break; + default: + gameInput.touchDown(touchX, touchY, touchedKey); } } else { - gameInput.touchDown(screenX, screenY, button); + gameInput.touchDown(touchX, touchY, button); } return false; } @Override public boolean touchUp(int screenX, int screenY, int pointer, int button) { - screenX *= GP.renderer.getWidth() / getWidth(); - screenY *= GP.renderer.getHeight() / getHeight(); + float touchX = transformScreenX(screenX); + float touchY = transformScreenY(screenY); + if (CaveGame.TOUCH) { - if (screenX > 26 && screenX < 52 && screenY > GP.renderer.getHeight() - 52 && - screenY < GP.renderer.getHeight() - 26) { - if (GP.controlMode == ControlMode.CURSOR) gameInput.keyUp(Input.Keys.W); - else gameInput.keyUp(Input.Keys.SPACE); - } else if (screenX > 0 && screenX < 26 && screenY > GP.renderer.getHeight() - 26) { - gameInput.keyUp(Input.Keys.A); - } else if (screenX > 26 && screenX < 52 && screenY > GP.renderer.getHeight() - 26) { - if (GP.controlMode == ControlMode.CURSOR) gameInput.keyUp(Input.Keys.S); - else gameInput.keyUp(Input.Keys.CONTROL_LEFT); - } else if (screenX > 52 && screenX < 78 && screenY > GP.renderer.getHeight() - 26) { - gameInput.keyUp(Input.Keys.D); - } else if (screenX > 78 && screenX < 104 && screenY > GP.renderer.getHeight() - 26) { - gameInput.keyUp(Input.Keys.ALT_LEFT); - } else if (screenX > GP.renderer.getWidth() - 52 && screenX < GP.renderer.getWidth() - 26 && - screenY > GP.renderer.getHeight() - 26) { - gameInput.touchUp(screenX, screenY, Input.Buttons.LEFT); - } else if (screenX > GP.renderer.getWidth() - 26 && screenY > screenY - 26) { - gameInput.touchUp(screenX, screenY, Input.Buttons.RIGHT); - } else { - gameInput.touchUp(screenX, screenY, -1); + int touchedKey = getTouchedKey(touchX, touchY); + switch (touchedKey) { + case UP: + case DOWN: + case LEFT: + case RIGHT: + case ALT: + gameInput.keyUp(GP.keyDownCode); + break; + case LMB: + gameInput.touchUp(touchX, touchY, Input.Buttons.LEFT); + break; + case RMB: + gameInput.touchUp(touchX, touchY, Input.Buttons.RIGHT); + break; + default: + gameInput.touchUp(touchX, touchY, touchedKey); } } else { - gameInput.touchUp(screenX, screenY, button); + gameInput.touchUp(touchX, touchY, button); } return false; } @Override public boolean touchDragged(int screenX, int screenY, int pointer) { - screenX *= GP.renderer.getWidth() / getWidth(); - screenY *= GP.renderer.getHeight() / getHeight(); - if (GP.isKeyDown && (screenX > 78 || screenY < GP.renderer.getHeight() - 52)) { - gameInput.keyUp(GP.keyDownCode); + float touchX = transformScreenX(screenX); + float touchY = transformScreenY(screenY); + if (CaveGame.TOUCH && GP.isKeyDown) { + if (getTouchedKey(touchX, touchY) == -1) { + gameInput.keyUp(GP.keyDownCode); + } } else { - gameInput.touchDragged(screenX, screenY); + gameInput.touchDragged(touchX, touchY); } return false; } - @Override - public boolean mouseMoved(int screenX, int screenY) { - return false; - } - @Override public boolean scrolled(int amount) { gameInput.scrolled(amount);