219 lines
4.4 KiB
Java
219 lines
4.4 KiB
Java
package org.oscim.gdx;
|
|
|
|
import org.oscim.layers.GenericLayer;
|
|
import org.oscim.layers.TileGridLayer;
|
|
import org.oscim.map.Map;
|
|
import org.oscim.map.ViewController;
|
|
import org.oscim.theme.VtmThemes;
|
|
|
|
import com.badlogic.gdx.Gdx;
|
|
import com.badlogic.gdx.Input;
|
|
import com.badlogic.gdx.Input.Buttons;
|
|
import com.badlogic.gdx.InputProcessor;
|
|
|
|
public class InputHandler implements InputProcessor {
|
|
|
|
private ViewController mViewport;
|
|
private final Map mMap;
|
|
private GenericLayer mGridLayer;
|
|
private final GdxMap mGdxApp;
|
|
|
|
public InputHandler(GdxMap map) {
|
|
mMap = map.getMap();
|
|
mViewport = mMap.viewport();
|
|
mGdxApp = map;
|
|
}
|
|
|
|
private boolean mActiveScale;
|
|
private boolean mActiveTilt;
|
|
private boolean mActiveRotate;
|
|
|
|
private int mPosX, mPosY;
|
|
|
|
@Override
|
|
public boolean keyDown(int keycode) {
|
|
if (mGdxApp.onKeyDown(keycode))
|
|
return true;
|
|
|
|
switch (keycode) {
|
|
case Input.Keys.ESCAPE:
|
|
Gdx.app.exit();
|
|
break;
|
|
|
|
case Input.Keys.SHIFT_LEFT:
|
|
mActiveScale = true;
|
|
mPosY = Gdx.input.getY();
|
|
break;
|
|
|
|
case Input.Keys.CONTROL_LEFT:
|
|
mActiveTilt = true;
|
|
mPosX = Gdx.input.getX();
|
|
mPosY = Gdx.input.getY();
|
|
break;
|
|
|
|
case Input.Keys.UP:
|
|
mViewport.moveMap(0, -50);
|
|
mMap.updateMap(true);
|
|
break;
|
|
case Input.Keys.DOWN:
|
|
mViewport.moveMap(0, 50);
|
|
mMap.updateMap(true);
|
|
break;
|
|
case Input.Keys.LEFT:
|
|
mViewport.moveMap(-50, 0);
|
|
mMap.updateMap(true);
|
|
break;
|
|
case Input.Keys.RIGHT:
|
|
mViewport.moveMap(50, 0);
|
|
mMap.updateMap(true);
|
|
break;
|
|
case Input.Keys.M:
|
|
mViewport.scaleMap(1.05f, 0, 0);
|
|
mMap.updateMap(true);
|
|
break;
|
|
case Input.Keys.N:
|
|
mViewport.scaleMap(0.95f, 0, 0);
|
|
mMap.updateMap(true);
|
|
break;
|
|
case Input.Keys.NUM_1:
|
|
mMap.animator().animateZoom(500, 0.5, 0, 0);
|
|
break;
|
|
case Input.Keys.NUM_2:
|
|
mMap.animator().animateZoom(500, 2, 0, 0);
|
|
break;
|
|
|
|
case Input.Keys.D:
|
|
mMap.setTheme(VtmThemes.DEFAULT);
|
|
mMap.updateMap(false);
|
|
break;
|
|
|
|
case Input.Keys.T:
|
|
mMap.setTheme(VtmThemes.TRONRENDER);
|
|
mMap.updateMap(false);
|
|
break;
|
|
|
|
case Input.Keys.R:
|
|
mMap.setTheme(VtmThemes.OSMARENDER);
|
|
mMap.updateMap(false);
|
|
break;
|
|
|
|
case Input.Keys.G:
|
|
if (mGridLayer == null) {
|
|
mGridLayer = new TileGridLayer(mMap);
|
|
mGridLayer.setEnabled(true);
|
|
mMap.layers().add(mGridLayer);
|
|
} else {
|
|
if (mGridLayer.isEnabled()) {
|
|
mGridLayer.setEnabled(false);
|
|
mMap.layers().remove(mGridLayer);
|
|
} else {
|
|
mGridLayer.setEnabled(true);
|
|
mMap.layers().add(mGridLayer);
|
|
}
|
|
}
|
|
mMap.render();
|
|
break;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public boolean keyUp(int keycode) {
|
|
switch (keycode) {
|
|
case Input.Keys.SHIFT_LEFT:
|
|
mActiveScale = false;
|
|
break;
|
|
case Input.Keys.CONTROL_LEFT:
|
|
mActiveTilt = false;
|
|
break;
|
|
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public boolean keyTyped(char character) {
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
|
|
if (button == Buttons.MIDDLE) {
|
|
mActiveScale = true;
|
|
mPosY = screenY;
|
|
} else if (button == Buttons.RIGHT) {
|
|
mActiveRotate = true;
|
|
mPosX = screenX;
|
|
mPosY = screenY;
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public boolean touchUp(int screenX, int screenY, int pointer, int button) {
|
|
mActiveScale = false;
|
|
mActiveRotate = false;
|
|
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public boolean touchDragged(int screenX, int screenY, int pointer) {
|
|
boolean changed = false;
|
|
|
|
if (!(mActiveScale || mActiveRotate || mActiveTilt))
|
|
return false;
|
|
|
|
if (mActiveTilt) {
|
|
changed = mViewport.tiltMap((screenY - mPosY) / 5f);
|
|
mPosY = screenY;
|
|
|
|
}
|
|
|
|
if (mActiveScale) {
|
|
changed = mViewport.scaleMap(1 - (screenY - mPosY) / 100f, 0, 0);
|
|
mPosY = screenY;
|
|
}
|
|
|
|
if (mActiveRotate) {
|
|
mViewport.rotateMap((screenX - mPosX) / 500f, 0, 0);
|
|
mPosX = screenX;
|
|
mViewport.tiltMap((screenY - mPosY) / 10f);
|
|
mPosY = screenY;
|
|
changed = true;
|
|
}
|
|
|
|
if (changed) {
|
|
mMap.updateMap(true);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public boolean mouseMoved(int screenX, int screenY) {
|
|
|
|
mPosX = screenX;
|
|
mPosY = screenY;
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public boolean scrolled(int amount) {
|
|
|
|
if (amount > 0) {
|
|
|
|
mMap.animator().animateZoom(250, 0.75f, 0, 0);
|
|
} else {
|
|
float fx = mPosX - mMap.getWidth() / 2;
|
|
float fy = mPosY - mMap.getHeight() / 2;
|
|
|
|
mMap.animator().animateZoom(250, 1.333f, fx, fy);
|
|
}
|
|
mMap.updateMap(false);
|
|
|
|
return true;
|
|
}
|
|
}
|