package gui.input; 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.collision.Ray; import game.Noise; import gui.screens.MapScreen; public class MapInput implements InputProcessor { private final OrthographicCamera cam; private final MapScreen screen; private int lastMouseX; private int lastMouseY; public MapInput(MapScreen screen) { super(); this.screen = screen; this.cam = (OrthographicCamera) screen.getCam(); } @Override public boolean keyDown(int keycode) { if (keycode == Keys.CONTROL_LEFT) { Ray ray = cam.getPickRay(Gdx.input.getX(), Gdx.input.getY()); final double value = Noise.getValue(screen.getCurrentBackground(), ray.origin.x, ray.origin.y); System.out.println(value); } return true; } @Override public boolean keyTyped(char character) { return false; } @Override public boolean keyUp(int keycode) { if (keycode == Keys.TAB) { screen.getGame().setScreen(screen.getGameScreen()); } else if (keycode == Keys.NUM_1) { screen.setCurrentBackground(Noise.NoiseType.TERRAIN); } else if (keycode == Keys.NUM_2) { screen.setCurrentBackground(Noise.NoiseType.DENSITY); } else if (keycode == Keys.NUM_3) { screen.setCurrentBackground(Noise.NoiseType.POLITICS); } else if (keycode == Keys.NUM_4) { screen.setCurrentBackground(Noise.NoiseType.ETHICS); } else if (keycode == Keys.NUM_5) { screen.setCurrentBackground(Noise.NoiseType.COUNTRY); } else if (keycode == Keys.NUM_6) { screen.setCurrentBackground(Noise.NoiseType.INCOME); } else if (keycode == Keys.NUM_7) { screen.setCurrentBackground(Noise.NoiseType.CRIME); } return true; } @Override public boolean touchDown(int screenX, int screenY, int pointer, int button) { return false; //To change body of implemented methods use File | Settings | File Templates. } @Override public boolean touchUp(int screenX, int screenY, int pointer, int button) { return false; //To change body of implemented methods use File | Settings | File Templates. } @Override public boolean touchDragged(int screenX, int screenY, int pointer) { float width = screen.getWidth(); float height = screen.getHeight(); if (Math.abs(lastMouseX - screenX) >= 20 || Math.abs(lastMouseY - screenY) >= 20) { lastMouseX = screenX; lastMouseY = screenY; } 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; return true; } @Override public boolean scrolled(int amount) { float zoom; if ((cam.zoom > 1 && amount < 0) || (cam.zoom < 1000/*10*/ && amount > 0)) { zoom = cam.zoom + amount / 1f; cam.zoom = Math.round(zoom * 100) / 100f; // round the zoom to the hundredths place } return true; } }