X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;ds=sidebyside;f=core%2Fsrc%2Fru%2Fdeadsoftware%2Fcavedroid%2Fmisc%2FInputHandlerGame.java;h=31e6dd06919aa20cf1ca70e5ba2cc89d93c0e2ec;hb=ef32f2e88b9c0daa411d0c304ce62b1235541fb1;hp=a84e22af7a72c1afae78fb199e9baa098fcfca60;hpb=2948fcd9c40ebf588ef7d0e7cd8dd34ecaa1f9b2;p=cavedroid.git diff --git a/core/src/ru/deadsoftware/cavedroid/misc/InputHandlerGame.java b/core/src/ru/deadsoftware/cavedroid/misc/InputHandlerGame.java index a84e22a..31e6dd0 100644 --- a/core/src/ru/deadsoftware/cavedroid/misc/InputHandlerGame.java +++ b/core/src/ru/deadsoftware/cavedroid/misc/InputHandlerGame.java @@ -1,125 +1,158 @@ 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.game.GameInput; +import ru.deadsoftware.cavedroid.GameScreen; -import static ru.deadsoftware.cavedroid.GameScreen.*; +import static ru.deadsoftware.cavedroid.GameScreen.GP; -public class InputHandlerGame implements InputProcessor { +public class InputHandlerGame extends InputAdapter { - private GameInput gameInput; + private static final int + UP = 0, + DOWN = 1, + LEFT = 2, + RIGHT = 3, + ALT = 4, + LMB = 5, + RMB = 6; public InputHandlerGame() { - this.gameInput = new GameInput(); + loadTouchButtonsFromJSON(); } - @Override - public boolean keyDown(int keycode) { - gameInput.keyDown(keycode); - return false; + 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 - public boolean keyUp(int keycode) { - gameInput.keyUp(keycode); + public boolean keyDown(int keycode) { + GP.input.keyDown(keycode); return false; } @Override - public boolean keyTyped(char character) { + public boolean keyUp(int keycode) { + GP.input.keyUp(keycode); 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.WALK) { - 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: + GP.input.keyDown(GP.controlMode == ControlMode.CURSOR ? Input.Keys.W : Input.Keys.SPACE); + break; + case DOWN: + GP.input.keyDown(GP.controlMode == ControlMode.CURSOR ? Input.Keys.S : Input.Keys.CONTROL_LEFT); + break; + case LEFT: + GP.input.keyDown(Input.Keys.A); + break; + case RIGHT: + GP.input.keyDown(Input.Keys.D); + break; + case ALT: + GP.input.keyDown(Input.Keys.ALT_LEFT); + break; + case LMB: + GP.input.touchDown(touchX, touchY, Input.Buttons.LEFT); + break; + case RMB: + GP.input.touchDown(touchX, touchY, Input.Buttons.RIGHT); + break; + default: + GP.input.touchDown(touchX, touchY, touchedKey); } } else { - gameInput.touchDown(screenX, screenY, button); + GP.input.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: + GP.input.keyUp(GP.input.getKeyDownCode()); + break; + case LMB: + GP.input.touchUp(touchX, touchY, Input.Buttons.LEFT); + break; + case RMB: + GP.input.touchUp(touchX, touchY, Input.Buttons.RIGHT); + break; + default: + GP.input.touchUp(touchX, touchY, touchedKey); } } else { - gameInput.touchUp(screenX, screenY, button); + GP.input.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.input.isKeyDown()) { + if (getTouchedKey(touchX, touchY) == -1) { + GP.input.keyUp(GP.input.getKeyDownCode()); + } } else { - gameInput.touchDragged(screenX, screenY); + GP.input.touchDragged(touchX, touchY); } return false; } - @Override - public boolean mouseMoved(int screenX, int screenY) { - return false; - } - @Override public boolean scrolled(int amount) { - gameInput.scrolled(amount); + GP.input.scrolled(amount); return false; } }