package gui.input; import com.badlogic.gdx.Game; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Input.Keys; import com.badlogic.gdx.InputProcessor; import com.badlogic.gdx.graphics.OrthographicCamera; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.math.collision.Ray; import game.Hakd; import gui.HakdSprite; import gui.Room; import gui.screens.GameScreen; import networks.devices.Device; import other.Util; public class GameInput implements InputProcessor { private final Hakd game; private final OrthographicCamera cam; private final GameScreen screen; private int lastMouseX; private int lastMouseY; public GameInput(Game game, OrthographicCamera cam) { this.game = (Hakd) game; this.cam = cam; this.screen = (GameScreen) game.getScreen(); } @Override public boolean keyDown(int keycode) { return false; } @Override public boolean keyUp(int keycode) { if (keycode == Keys.TAB) { game.setScreen(screen.getMap()); } return true; } @Override public boolean keyTyped(char character) { return false; } @Override public boolean touchDown(int screenX, int screenY, int pointer, int button) { return false; } @Override public boolean touchUp(int screenX, int screenY, int pointer, int button) { Ray ray = cam.getPickRay(Gdx.input.getX(), Gdx.input.getY()); HakdSprite sprite = null; for (Room.DeviceTile tile : screen.getRoom().getDeviceTileMap().values()) { if (tile.getTile().getBoundingRectangle().contains(ray.origin.x, ray.origin.y)) { sprite = tile.getTile(); break; } } if (sprite != null && sprite.getObject() != null) { screen.setDeviceScene(((Device) sprite.getObject()).getDeviceScene()); screen.getDeviceScene().open(); } return true; } @Override public boolean touchDragged(int screenX, int screenY, int pointer) { float height = screen.getRoom().getFloorLayer().getHeight(); float width = screen.getRoom().getFloorLayer().getWidth(); float deltaX = (lastMouseX - screenX) / (Gdx.graphics.getWidth() / width) * cam.zoom; float deltaY = (screenY - lastMouseY) / (Gdx.graphics.getHeight() / height) * cam.zoom; cam.translate(deltaX, deltaY); lastMouseX = screenX; lastMouseY = screenY; return true; } @Override public boolean mouseMoved(int screenX, int screenY) { lastMouseX = screenX; lastMouseY = screenY; Ray ray = cam.getPickRay(Gdx.input.getX(), Gdx.input.getY()); Vector2 vector2 = Util.orthoToIso(ray.origin.x, ray.origin.y); System.out.println(ray.origin.toString() + " - " + vector2.toString() + " - " + Util.isoToOrtho(vector2.x, vector2.y).toString()); return true; } @Override public boolean scrolled(int amount) { float zoom; if ((cam.zoom > 0.25 && amount < 0) || (cam.zoom < 5 && amount > 0)) { zoom = cam.zoom + amount / 20f; cam.zoom = Math.round(zoom * 100) / 100f; // round the zoom to the // hundredths place } // System.out.println(cam.zoom); return true; } }