Poi3DLayer: use GdxRenderer3D2, rearrange code (#584)

This commit is contained in:
Gustl22 2018-09-06 17:39:37 +02:00 committed by Emux
parent 131e1a183c
commit 33528a3e61
No known key found for this signature in database
GPG Key ID: 64ED9980896038C3

View File

@ -1,3 +1,19 @@
/*
* Copyright 2014 Hannes Janetzek
* Copyright 2018 Gustl22
*
* This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.oscim.test.gdx.poi3d;
import com.badlogic.gdx.assets.AssetManager;
@ -29,12 +45,15 @@ import org.slf4j.LoggerFactory;
import java.util.LinkedHashMap;
import java.util.Map.Entry;
/**
* Experimental Layer to display POIs with 3D models.
*/
public class Poi3DLayer extends Layer implements Map.UpdateListener {
static final Logger log = LoggerFactory.getLogger(Poi3DLayer.class);
private static final Logger log = LoggerFactory.getLogger(Poi3DLayer.class);
static class Poi3DTileData extends TileData {
public final List<SymbolItem> symbols = new List<SymbolItem>();
public final List<SymbolItem> symbols = new List<>();
@Override
protected void dispose() {
@ -42,21 +61,22 @@ public class Poi3DLayer extends Layer implements Map.UpdateListener {
}
}
final static String POI_DATA = Poi3DLayer.class.getSimpleName();
final static Tag TREE_TAG = new Tag("natural", "tree");
static final String POI_DATA = Poi3DLayer.class.getSimpleName();
static final Tag TREE_TAG = new Tag("natural", "tree");
private Poi3DTileData get(MapTile tile) {
Poi3DTileData ld = (Poi3DTileData) tile.getData(POI_DATA);
if (ld == null) {
ld = new Poi3DTileData();
tile.addData(POI_DATA, ld);
}
return ld;
}
GdxRenderer3D g3d;
AssetManager assets;
GdxRenderer3D2 g3d;
boolean loading;
Model mModel;
VectorTileLayer mTileLayer;
LinkedHashMap<Tile, Array<ModelInstance>> mTileMap = new LinkedHashMap<>();
TileSet mTileSet = new TileSet();
TileSet mPrevTiles = new TileSet();
private final String pathToTree;
public Poi3DLayer(Map map, VectorTileLayer tileLayer) {
super(map);
tileLayer.addHook(new TileLoaderProcessHook() {
@ -83,7 +103,7 @@ public class Poi3DLayer extends Layer implements Map.UpdateListener {
});
mTileLayer = tileLayer;
mRenderer = g3d = new GdxRenderer3D(mMap);
mRenderer = g3d = new GdxRenderer3D2(mMap);
// Material mat = new
// Material(ColorAttribute.createDiffuse(Color.BLUE));
@ -101,33 +121,40 @@ public class Poi3DLayer extends Layer implements Map.UpdateListener {
loading = true;
}
TileSet mTileSet = new TileSet();
TileSet mPrevTiles = new TileSet();
LinkedHashMap<Tile, Array<ModelInstance>> mTileMap =
new LinkedHashMap<>();
boolean loading;
Model mModel;
AssetManager assets;
private final String pathToTree;
private void doneLoading() {
Model model = assets.get(pathToTree, Model.class);
for (int i = 0; i < model.nodes.size; i++) {
Node node = model.nodes.get(i);
for (Node node : model.nodes) {
log.debug("loader node " + node.id);
if (node.id.equals("treeA_root")) {
/* Use with {@link GdxRenderer3D} */
if (node.hasChildren() && ((Object) g3d) instanceof GdxRenderer3D) {
if (model.nodes.size != 1) {
throw new RuntimeException("Model has more than one node with GdxRenderer: " + model.toString());
}
node = node.getChild(0);
log.debug("loader node " + node.id);
model.nodes.removeIndex(0);
model.nodes.add(node);
}
node.rotation.setFromAxis(1, 0, 0, 90);
mModel = model;
}
mModel = model;
}
loading = false;
}
private Poi3DTileData get(MapTile tile) {
Poi3DTileData ld = (Poi3DTileData) tile.getData(POI_DATA);
if (ld == null) {
ld = new Poi3DTileData();
tile.addData(POI_DATA, ld);
}
return ld;
}
@Override
public void onMapEvent(Event ev, MapPosition pos) {