split up
This commit is contained in:
20
vtm-gdx/src/org/oscim/gdx/GdxAssetAdapter.java
Normal file
20
vtm-gdx/src/org/oscim/gdx/GdxAssetAdapter.java
Normal file
@@ -0,0 +1,20 @@
|
||||
package org.oscim.gdx;
|
||||
|
||||
import java.io.InputStream;
|
||||
|
||||
import org.oscim.backend.AssetAdapter;
|
||||
|
||||
import com.badlogic.gdx.Gdx;
|
||||
import com.badlogic.gdx.files.FileHandle;
|
||||
|
||||
public class GdxAssetAdapter extends AssetAdapter{
|
||||
|
||||
@Override
|
||||
public InputStream openFileAsStream(String fileName) {
|
||||
FileHandle file = Gdx.files.internal(fileName);
|
||||
if (file == null)
|
||||
throw new IllegalArgumentException("missing file " + fileName);
|
||||
|
||||
return file.read();
|
||||
}
|
||||
}
|
||||
30
vtm-gdx/src/org/oscim/gdx/GdxLog.java
Normal file
30
vtm-gdx/src/org/oscim/gdx/GdxLog.java
Normal file
@@ -0,0 +1,30 @@
|
||||
package org.oscim.gdx;
|
||||
|
||||
import org.oscim.backend.Log.Logger;
|
||||
|
||||
import com.badlogic.gdx.Gdx;
|
||||
|
||||
public class GdxLog implements Logger {
|
||||
|
||||
@Override
|
||||
public void d(String tag, String msg) {
|
||||
Gdx.app.log(tag, msg);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void w(String tag, String msg) {
|
||||
Gdx.app.log(tag, msg);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void e(String tag, String msg) {
|
||||
Gdx.app.log(tag, msg);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void i(String tag, String msg) {
|
||||
Gdx.app.log(tag, msg);
|
||||
}
|
||||
|
||||
}
|
||||
380
vtm-gdx/src/org/oscim/gdx/GdxMap.java
Normal file
380
vtm-gdx/src/org/oscim/gdx/GdxMap.java
Normal file
@@ -0,0 +1,380 @@
|
||||
package org.oscim.gdx;
|
||||
|
||||
import org.oscim.backend.AssetAdapter;
|
||||
import org.oscim.backend.GL20;
|
||||
import org.oscim.backend.Log;
|
||||
import org.oscim.backend.input.MotionEvent;
|
||||
import org.oscim.layers.tile.vector.MapTileLayer;
|
||||
import org.oscim.renderer.GLRenderer;
|
||||
import org.oscim.renderer.GLState;
|
||||
import org.oscim.theme.InternalRenderTheme;
|
||||
import org.oscim.tilesource.TileSource;
|
||||
import org.oscim.tilesource.oscimap4.OSciMap4TileSource;
|
||||
import org.oscim.view.MapRenderCallback;
|
||||
import org.oscim.view.MapView;
|
||||
import org.oscim.view.MapViewPosition;
|
||||
|
||||
import com.badlogic.gdx.ApplicationListener;
|
||||
import com.badlogic.gdx.Gdx;
|
||||
import com.badlogic.gdx.Input.Buttons;
|
||||
import com.badlogic.gdx.InputProcessor;
|
||||
import com.badlogic.gdx.graphics.Color;
|
||||
import com.badlogic.gdx.graphics.g2d.BitmapFont;
|
||||
import com.badlogic.gdx.scenes.scene2d.Stage;
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.Label;
|
||||
import com.badlogic.gdx.utils.SharedLibraryLoader;
|
||||
|
||||
public class GdxMap implements ApplicationListener, MapRenderCallback {
|
||||
|
||||
private final MapView mMapView;
|
||||
private final GLRenderer mMapRenderer;
|
||||
|
||||
public GdxMap() {
|
||||
new SharedLibraryLoader().load("vtm-jni");
|
||||
|
||||
AssetAdapter.g = new GdxAssetAdapter();
|
||||
|
||||
mMapView = new MapView(this);
|
||||
mMapRenderer = new GLRenderer(mMapView);
|
||||
}
|
||||
|
||||
Stage ui;
|
||||
Label fps;
|
||||
BitmapFont font;
|
||||
|
||||
@Override
|
||||
public void create() {
|
||||
|
||||
// Gdx.graphics.setContinuousRendering(false);
|
||||
|
||||
if (Log.logger == null)
|
||||
Log.logger = new GdxLog();
|
||||
|
||||
Gdx.app.log("gdx says", "Hi!");
|
||||
Log.d("vtm says", "Hi!");
|
||||
|
||||
int w = Gdx.graphics.getWidth();
|
||||
int h = Gdx.graphics.getHeight();
|
||||
mWidth = w;
|
||||
mHeight = h;
|
||||
|
||||
// TileSource tileSource = new OSciMap2TileSource();
|
||||
// tileSource.setOption("url",
|
||||
// "http://city.informatik.uni-bremen.de/osci/map-live");
|
||||
TileSource tileSource = new OSciMap4TileSource();
|
||||
tileSource.setOption("url", "http://city.informatik.uni-bremen.de/osci/testing");
|
||||
|
||||
MapTileLayer l = mMapView.setBaseMap(tileSource);
|
||||
l.setRenderTheme(InternalRenderTheme.DEFAULT);
|
||||
|
||||
// mMapView.getLayerManager().add(new GenericOverlay(mMapView, new
|
||||
// GridRenderLayer(mMapView)));
|
||||
|
||||
mMapView.getMapViewPosition().setViewport(w, h);
|
||||
|
||||
mMapRenderer.onSurfaceCreated();
|
||||
mMapRenderer.onSurfaceChanged(w, h);
|
||||
|
||||
Gdx.input.setInputProcessor(new TouchHandler());
|
||||
|
||||
ui = new Stage(w, h, false);
|
||||
|
||||
font = new BitmapFont(false);
|
||||
|
||||
fps = new Label("fps: 0", new Label.LabelStyle(font, Color.WHITE));
|
||||
fps.setPosition(10, 30);
|
||||
fps.setColor(0, 1, 0, 1);
|
||||
ui.addActor(fps);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dispose() {
|
||||
|
||||
}
|
||||
private int fpsCnt = 0;
|
||||
@Override
|
||||
public void render() {
|
||||
// GLState.enableVertexArrays(-1, -1);
|
||||
// GLState.blend(false);
|
||||
// GLState.test(false, false);
|
||||
|
||||
mMapRenderer.onDrawFrame();
|
||||
|
||||
// Gdx.gl20.glBindBuffer(GL20.GL_ARRAY_BUFFER, 0);
|
||||
|
||||
// Gdx.gl20.glBindBuffer(GL20.GL_ELEMENT_ARRAY_BUFFER, 0);
|
||||
|
||||
int f = Gdx.graphics.getFramesPerSecond();
|
||||
if (f != fpsCnt){
|
||||
Log.d("fps", ">" +f);
|
||||
fpsCnt = f;
|
||||
}
|
||||
// fps.setText("fps: " + Gdx.graphics.getFramesPerSecond());
|
||||
// ui.draw();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resize(int w, int h) {
|
||||
mWidth = w;
|
||||
mHeight = h;
|
||||
|
||||
mMapView.getMapViewPosition().setViewport(w, h);
|
||||
mMapRenderer.onSurfaceChanged(w, h);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void pause() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resume() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Update all Layers on Main thread.
|
||||
*
|
||||
* @param forceRedraw
|
||||
* also render frame FIXME (does nothing atm)
|
||||
*/
|
||||
void redrawMapInternal(boolean forceRedraw) {
|
||||
|
||||
if (forceRedraw && !mClearMap)
|
||||
Gdx.graphics.requestRendering();
|
||||
|
||||
mMapView.updateLayers();
|
||||
|
||||
if (mClearMap) {
|
||||
Gdx.graphics.requestRendering();
|
||||
mClearMap = false;
|
||||
}
|
||||
}
|
||||
|
||||
private boolean mClearMap;
|
||||
|
||||
public void clearMap() {
|
||||
mClearMap = true;
|
||||
}
|
||||
|
||||
/* private */boolean mWaitRedraw;
|
||||
private final Runnable mRedrawRequest = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
mWaitRedraw = false;
|
||||
redrawMapInternal(false);
|
||||
}
|
||||
};
|
||||
|
||||
@Override
|
||||
public void updateMap(boolean forceRender) {
|
||||
if (!mWaitRedraw) {
|
||||
mWaitRedraw = true;
|
||||
Gdx.app.postRunnable(mRedrawRequest);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderMap() {
|
||||
if (mClearMap)
|
||||
updateMap(false);
|
||||
else
|
||||
Gdx.graphics.requestRendering();
|
||||
}
|
||||
|
||||
int mHeight, mWidth;
|
||||
|
||||
@Override
|
||||
public int getWidth() {
|
||||
return mWidth;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getHeight() {
|
||||
return mHeight;
|
||||
}
|
||||
|
||||
class GdxMotionEvent extends MotionEvent {
|
||||
|
||||
@Override
|
||||
public int getAction() {
|
||||
// TODO Auto-generated method stub
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getX() {
|
||||
// TODO Auto-generated method stub
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getY() {
|
||||
// TODO Auto-generated method stub
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getX(int idx) {
|
||||
// TODO Auto-generated method stub
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getY(int idx) {
|
||||
// TODO Auto-generated method stub
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getPointerCount() {
|
||||
// TODO Auto-generated method stub
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class TouchHandler implements InputProcessor {
|
||||
|
||||
private MapViewPosition mMapPosition;
|
||||
|
||||
public TouchHandler() {
|
||||
mMapPosition = mMapView.getMapViewPosition();
|
||||
}
|
||||
|
||||
private boolean mActiveScale;
|
||||
private boolean mActiveTilt;
|
||||
private boolean mActiveRotate;
|
||||
|
||||
private int mPosX, mPosY;
|
||||
|
||||
@Override
|
||||
public boolean keyDown(int keycode) {
|
||||
// switch (keycode) {
|
||||
//
|
||||
// case Input.Keys.UP:
|
||||
// mMapPosition.moveMap(0, -50);
|
||||
// mMapView.redrawMap(true);
|
||||
// break;
|
||||
// case Input.Keys.DOWN:
|
||||
// mMapPosition.moveMap(0, 50);
|
||||
// mMapView.redrawMap(true);
|
||||
// break;
|
||||
// case Input.Keys.LEFT:
|
||||
// mMapPosition.moveMap(-50, 0);
|
||||
// mMapView.redrawMap(true);
|
||||
// break;
|
||||
// case Input.Keys.RIGHT:
|
||||
// mMapPosition.moveMap(50, 0);
|
||||
// mMapView.redrawMap(true);
|
||||
// break;
|
||||
//
|
||||
// case Input.Keys.R:
|
||||
// mMapView.setRenderTheme(InternalRenderTheme.DEFAULT);
|
||||
// mMapView.redrawMap(true);
|
||||
// break;
|
||||
//
|
||||
// case Input.Keys.T:
|
||||
// mMapView.setRenderTheme(InternalRenderTheme.TRONRENDER);
|
||||
// mMapView.redrawMap(true);
|
||||
// break;
|
||||
//
|
||||
// }
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean keyUp(int keycode) {
|
||||
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;
|
||||
// mActiveTilt = true;
|
||||
mPosY = screenY;
|
||||
} else if (button == Buttons.RIGHT) {
|
||||
mActiveRotate = true;
|
||||
mPosX = screenX;
|
||||
mPosY = screenY;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean touchUp(int screenX, int screenY, int pointer, int button) {
|
||||
// Log.d(TAG, "touch up " + pointer);
|
||||
mActiveScale = false;
|
||||
mActiveTilt = false;
|
||||
mActiveRotate = false;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean touchDragged(int screenX, int screenY, int pointer) {
|
||||
boolean changed = false;
|
||||
|
||||
if (mActiveScale) {
|
||||
// changed = mMapPosition.tilt((screenY - mStartY) / 5f);
|
||||
changed = mMapPosition.scaleMap(1 - (screenY - mPosY) / 100f,
|
||||
0, 0);
|
||||
mPosY = screenY;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (mActiveRotate) {
|
||||
mMapPosition.rotateMap((screenX - mPosX) / 500f, 0, 0);
|
||||
mPosX = screenX;
|
||||
mMapPosition.tiltMap((screenY - mPosY) / 10f);
|
||||
mPosY = screenY;
|
||||
changed = true;
|
||||
}
|
||||
|
||||
if (!(mActiveRotate || mActiveTilt)) {
|
||||
int dx = screenX - mPosX;
|
||||
int dy = screenY - mPosY;
|
||||
if (Math.abs(dx) > 0 || Math.abs(dy) > 0) {
|
||||
mMapPosition.moveMap(dx, dy);
|
||||
mPosX = screenX;
|
||||
mPosY = screenY;
|
||||
changed = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (changed)
|
||||
updateMap(false);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mouseMoved(int screenX, int screenY) {
|
||||
mPosX = screenX;
|
||||
mPosY = screenY;
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean scrolled(int amount) {
|
||||
float fx = mPosX - mMapView.getWidth() / 2;
|
||||
float fy = mPosY - mMapView.getHeight() / 2;
|
||||
|
||||
if (amount > 0)
|
||||
mMapPosition.scaleMap(0.9f, fx, fy);
|
||||
else
|
||||
mMapPosition.scaleMap(1.1f, fx, fy);
|
||||
|
||||
updateMap(false);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user