fix: re-enable building animation
This commit is contained in:
parent
d96e9c4070
commit
5c388e7fcb
@ -25,6 +25,7 @@ import org.oscim.layers.tile.vector.VectorTileLayer.TileLoaderThemeHook;
|
|||||||
import org.oscim.map.Map;
|
import org.oscim.map.Map;
|
||||||
import org.oscim.renderer.ExtrusionRenderer;
|
import org.oscim.renderer.ExtrusionRenderer;
|
||||||
import org.oscim.renderer.GLViewport;
|
import org.oscim.renderer.GLViewport;
|
||||||
|
import org.oscim.renderer.MapRenderer;
|
||||||
import org.oscim.renderer.OffscreenRenderer;
|
import org.oscim.renderer.OffscreenRenderer;
|
||||||
import org.oscim.renderer.OffscreenRenderer.Mode;
|
import org.oscim.renderer.OffscreenRenderer.Mode;
|
||||||
import org.oscim.renderer.elements.ElementLayers;
|
import org.oscim.renderer.elements.ElementLayers;
|
||||||
@ -32,9 +33,11 @@ import org.oscim.renderer.elements.ExtrusionLayer;
|
|||||||
import org.oscim.theme.styles.ExtrusionStyle;
|
import org.oscim.theme.styles.ExtrusionStyle;
|
||||||
import org.oscim.theme.styles.RenderStyle;
|
import org.oscim.theme.styles.RenderStyle;
|
||||||
import org.oscim.utils.FastMath;
|
import org.oscim.utils.FastMath;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
public class BuildingLayer extends Layer implements TileLoaderThemeHook {
|
public class BuildingLayer extends Layer implements TileLoaderThemeHook {
|
||||||
//static final Logger log = LoggerFactory.getLogger(BuildingOverlay.class);
|
static final Logger log = LoggerFactory.getLogger(BuildingLayer.class);
|
||||||
|
|
||||||
private final static int MIN_ZOOM = 17;
|
private final static int MIN_ZOOM = 17;
|
||||||
private final static boolean POST_AA = false;
|
private final static boolean POST_AA = false;
|
||||||
@ -42,6 +45,8 @@ public class BuildingLayer extends Layer implements TileLoaderThemeHook {
|
|||||||
private final int mMinZoom;
|
private final int mMinZoom;
|
||||||
private ExtrusionRenderer mExtRenderer;
|
private ExtrusionRenderer mExtRenderer;
|
||||||
|
|
||||||
|
private final float mFadeTime = 300;
|
||||||
|
|
||||||
public BuildingLayer(Map map, VectorTileLayer tileLayer) {
|
public BuildingLayer(Map map, VectorTileLayer tileLayer) {
|
||||||
this(map, tileLayer, MIN_ZOOM);
|
this(map, tileLayer, MIN_ZOOM);
|
||||||
|
|
||||||
@ -63,39 +68,53 @@ public class BuildingLayer extends Layer implements TileLoaderThemeHook {
|
|||||||
mExtRenderer = new ExtrusionRenderer(tileLayer.tileRenderer(), mMinZoom) {
|
mExtRenderer = new ExtrusionRenderer(tileLayer.tileRenderer(), mMinZoom) {
|
||||||
private long mStartTime;
|
private long mStartTime;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean setup() {
|
||||||
|
mAlpha = 0;
|
||||||
|
return super.setup();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update(GLViewport v) {
|
public void update(GLViewport v) {
|
||||||
|
|
||||||
boolean show = v.pos.scale >= (1 << mMinZoom);
|
int diff = (v.pos.zoomLevel - mMinZoom);
|
||||||
|
|
||||||
|
/* if below min zoom or already faded out */
|
||||||
|
if ((diff < -1)) {// || (diff < 0 && mAlpha == 0)){
|
||||||
|
setReady(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean show = diff >= 0;
|
||||||
|
|
||||||
if (show) {
|
if (show) {
|
||||||
if (mAlpha < 1) {
|
if (mAlpha < 1) {
|
||||||
|
//log.debug("fade in {}", mAlpha);
|
||||||
long now = System.currentTimeMillis();
|
long now = System.currentTimeMillis();
|
||||||
|
|
||||||
if (mStartTime == 0) {
|
if (mStartTime == 0) {
|
||||||
mStartTime = now;
|
mStartTime = now;
|
||||||
}
|
}
|
||||||
float a = (now - mStartTime) / mFadeTime;
|
float a = (now - mStartTime) / mFadeTime;
|
||||||
mAlpha = FastMath.clamp(a, 0, 1);
|
mAlpha = FastMath.clamp(a, 0, 1);
|
||||||
mMap.render();
|
MapRenderer.animate();
|
||||||
} else
|
} else
|
||||||
mStartTime = 0;
|
mStartTime = 0;
|
||||||
} else {
|
} else {
|
||||||
if (mAlpha > 0) {
|
if (mAlpha > 0) {
|
||||||
|
//log.debug("fade out {} {}", mAlpha, mStartTime);
|
||||||
long now = System.currentTimeMillis();
|
long now = System.currentTimeMillis();
|
||||||
if (mStartTime == 0) {
|
if (mStartTime == 0) {
|
||||||
mStartTime = now + 100;
|
mStartTime = now;
|
||||||
}
|
}
|
||||||
long diff = (now - mStartTime);
|
long dt = (now - mStartTime);
|
||||||
if (diff > 0) {
|
if (dt > 0) {
|
||||||
float a = 1 - diff / mFadeTime;
|
float a = 1 - dt / mFadeTime;
|
||||||
mAlpha = FastMath.clamp(a, 0, 1);
|
mAlpha = FastMath.clamp(a, 0, 1);
|
||||||
}
|
}
|
||||||
mMap.render();
|
MapRenderer.animate();
|
||||||
} else
|
} else
|
||||||
mStartTime = 0;
|
mStartTime = 0;
|
||||||
}
|
}
|
||||||
//log.debug(show + " > " + mAlpha);
|
|
||||||
super.update(v);
|
super.update(v);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -109,8 +128,6 @@ public class BuildingLayer extends Layer implements TileLoaderThemeHook {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private final float mFadeTime = 500;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean render(MapTile tile, ElementLayers layers, MapElement element,
|
public boolean render(MapTile tile, ElementLayers layers, MapElement element,
|
||||||
RenderStyle style, int level) {
|
RenderStyle style, int level) {
|
||||||
@ -150,29 +167,27 @@ public class BuildingLayer extends Layer implements TileLoaderThemeHook {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
//private int multi;
|
// private int multi;
|
||||||
//@Override
|
// @Override
|
||||||
//public boolean onTouchEvent(MotionEvent e) {
|
// public void onInputEvent(Event event, MotionEvent e) {
|
||||||
// int action = e.getAction() & MotionEvent.ACTION_MASK;
|
// int action = e.getAction() & MotionEvent.ACTION_MASK;
|
||||||
// if (action == MotionEvent.ACTION_POINTER_DOWN) {
|
// if (action == MotionEvent.ACTION_POINTER_DOWN) {
|
||||||
// multi++;
|
// multi++;
|
||||||
// } else if (action == MotionEvent.ACTION_POINTER_UP) {
|
// } else if (action == MotionEvent.ACTION_POINTER_UP) {
|
||||||
// multi--;
|
// multi--;
|
||||||
// if (!mActive && mAlpha > 0) {
|
// if (!mActive && mAlpha > 0) {
|
||||||
// // finish hiding
|
// // finish hiding
|
||||||
// //log.debug("add multi hide timer " + mAlpha);
|
// //log.debug("add multi hide timer " + mAlpha);
|
||||||
// addShowTimer(mFadeTime * mAlpha, false);
|
// addShowTimer(mFadeTime * mAlpha, false);
|
||||||
// }
|
// }
|
||||||
// } else if (action == MotionEvent.ACTION_CANCEL) {
|
// } else if (action == MotionEvent.ACTION_CANCEL) {
|
||||||
// multi = 0;
|
// multi = 0;
|
||||||
// log.debug("cancel " + multi);
|
// log.debug("cancel " + multi);
|
||||||
// if (mTimer != null) {
|
// if (mTimer != null) {
|
||||||
// mTimer.cancel();
|
// mTimer.cancel();
|
||||||
// mTimer = null;
|
// mTimer = null;
|
||||||
|
// }
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
//
|
|
||||||
// return false;
|
|
||||||
//}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -100,7 +100,7 @@ public class ExtrusionRenderer extends LayerRenderer {
|
|||||||
if (!initialized && !initShader())
|
if (!initialized && !initShader())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (mAlpha == 0 || v.pos.zoomLevel < mTileZoom) {
|
if (mAlpha == 0 || v.pos.zoomLevel < (mTileZoom - 1)) {
|
||||||
setReady(false);
|
setReady(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -184,7 +184,6 @@ public class ExtrusionRenderer extends LayerRenderer {
|
|||||||
MapRenderer.animate();
|
MapRenderer.animate();
|
||||||
|
|
||||||
mTileCnt = activeTiles;
|
mTileCnt = activeTiles;
|
||||||
//log.debug("" + activeTiles + " " + zoom);
|
|
||||||
|
|
||||||
if (activeTiles > 0)
|
if (activeTiles > 0)
|
||||||
setReady(true);
|
setReady(true);
|
||||||
@ -321,8 +320,7 @@ public class ExtrusionRenderer extends LayerRenderer {
|
|||||||
GL.glEnable(GL20.GL_CULL_FACE);
|
GL.glEnable(GL20.GL_CULL_FACE);
|
||||||
GL.glDepthFunc(GL20.GL_LESS);
|
GL.glDepthFunc(GL20.GL_LESS);
|
||||||
|
|
||||||
//GL.glUniform1f(uExtAlpha, mAlpha);
|
GL.glUniform1f(s.uAlpha, mAlpha);
|
||||||
GL.glUniform1f(s.uAlpha, 1);
|
|
||||||
|
|
||||||
if (drawAlpha) {
|
if (drawAlpha) {
|
||||||
GL.glColorMask(false, false, false, false);
|
GL.glColorMask(false, false, false, false);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user