diff --git a/core/src/ru/deadsoftware/cavedroid/misc/InputHandlerGame.java b/core/src/ru/deadsoftware/cavedroid/misc/InputHandlerGame.java
index 3eeb6f9f68368ec2b1ba3bf2d9cfaced828e3b40..9ba00bcfca9ee5e393cb188651ed18b355bd23d7 100644 (file)
package ru.deadsoftware.cavedroid.misc;
package ru.deadsoftware.cavedroid.misc;
+import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input;
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.CaveGame;
+import ru.deadsoftware.cavedroid.GameScreen;
import ru.deadsoftware.cavedroid.game.GameInput;
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();
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
}
@Override
return false;
}
return false;
}
- @Override
- public boolean keyTyped(char character) {
- return false;
- }
-
@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
@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 (CaveGame.TOUCH) {
- if (screenX > 26 && screenX < 52 && screenY > GP.renderer.getHeight() - 52 &&
- screenY < GP.renderer.getHeight() - 26) {
- if (GP.ctrlMode == 1) 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.ctrlMode == 1) 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 {
}
} 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) {
}
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 (CaveGame.TOUCH) {
- if (screenX > 26 && screenX < 52 && screenY > GP.renderer.getHeight() - 52 &&
- screenY < GP.renderer.getHeight() - 26) {
- if (GP.ctrlMode == 1) 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.ctrlMode == 1) 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 {
}
} else {
- gameInput.touchUp(screenX, screenY, button);
+ gameInput.touchUp(touchX, touchY, button);
}
return false;
}
@Override
public boolean touchDragged(int screenX, int screenY, int pointer) {
}
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 {
} else {
- gameInput.touchDragged(screenX, screenY);
+ gameInput.touchDragged(touchX, touchY);
}
return false;
}
}
return false;
}
- @Override
- public boolean mouseMoved(int screenX, int screenY) {
- return false;
- }
-
@Override
public boolean scrolled(int amount) {
gameInput.scrolled(amount);
@Override
public boolean scrolled(int amount) {
gameInput.scrolled(amount);