0

web: fix overlays showing up for all base layers

Overlays should only show up for the base layers they apply to,
however, we've had them show up for all base layers in a world.

To fix this, we first change things to be indexed by the unique path,
not the human-readable name (which is not supposed to be always unique).

Then, we remove and add overlay layers to the layerCtrl as needed on a
baselayerchange event.
This commit is contained in:
Nicolas F
2019-02-27 14:22:18 +01:00
parent 28f924621b
commit b57db703ae

View File

@@ -149,10 +149,21 @@ overviewer.util = {
overviewer.layerCtrl.remove();
var base_layers = {};
var overlay_layers = {};
for (var bl in overviewer.collections.mapTypes[selected_world]) {
var bl_o = overviewer.collections.mapTypes[selected_world][bl];
base_layers[bl_o.tileSetConfig.name] = bl_o;
}
for (var ol in overviewer.collections.overlays[selected_world]) {
var ol_o = overviewer.collections.overlays[selected_world][ol];
overlay_layers[ol_o.tileSetConfig.name] = ol_o;
}
overviewer.layerCtrl = L.control.layers(
overviewer.collections.mapTypes[selected_world],
overviewer.collections.overlays[selected_world],
{collapsed: false})
base_layers,
overlay_layers,
{collapsed: false})
.addTo(overviewer.map);
for (var world_name in overviewer.collections.mapTypes) {
@@ -187,7 +198,7 @@ overviewer.util = {
overviewer.current_world = selected_world;
if (overviewer.collections.mapTypes[selected_world] && overviewer.current_layer[selected_world]) {
overviewer.map.addLayer(overviewer.collections.mapTypes[selected_world][overviewer.current_layer[selected_world].tileSetConfig.name]);
overviewer.map.addLayer(overviewer.collections.mapTypes[selected_world][overviewer.current_layer[selected_world].tileSetConfig.path]);
} else {
var tset_name = Object.keys(overviewer.collections.mapTypes[selected_world])[0]
overviewer.map.addLayer(overviewer.collections.mapTypes[selected_world][tset_name]);
@@ -221,7 +232,6 @@ overviewer.util = {
tsc.marker_groups[marker_group].remove();
}
}
}
overviewer.current_layer[overviewer.current_world] = ev.layer;
var ovconf = ev.layer.tileSetConfig;
@@ -273,6 +283,22 @@ overviewer.util = {
mg.addTo(overviewer.map);
}
}
// Update overlays
for (var olw in overviewer.collections.overlays) {
for (var ol in overviewer.collections.overlays[olw]) {
var ol_o = overviewer.collections.overlays[olw][ol];
if (ol_o.tileSetConfig.isOverlay.includes(ovconf.path)) {
if (!overviewer.util.isInLayerCtrl(overviewer.layerCtrl, ol_o)) {
overviewer.layerCtrl.addOverlay(ol_o, ol_o.tileSetConfig.name);
}
} else {
if (overviewer.util.isInLayerCtrl(overviewer.layerCtrl, ol_o)) {
overviewer.layerCtrl.removeLayer(ol_o);
}
}
}
}
overviewer.util.updateHash();
});
@@ -324,9 +350,9 @@ overviewer.util = {
myLayer.getTileUrl = overviewer.util.getTileUrlGenerator(obj.path, obj.base, obj.imgextension);
if (obj.isOverlay) {
overviewer.collections.overlays[obj.world][obj.name] = myLayer;
overviewer.collections.overlays[obj.world][obj.path] = myLayer;
} else {
overviewer.collections.mapTypes[obj.world][obj.name] = myLayer;
overviewer.collections.mapTypes[obj.world][obj.path] = myLayer;
}
obj.marker_groups = undefined;
@@ -765,7 +791,7 @@ overviewer.util = {
// default to (map-update friendly) negative zooms
zoom -= ovconf.maxZoom;
}
overviewer.util.setHash(coordinates.x, coordinates.y, coordinates.z, zoom, currWorld, ovconf.name);
overviewer.util.setHash(coordinates.x, coordinates.y, coordinates.z, zoom, currWorld, ovconf.path);
},
'goToHash': function() {
// Note: the actual data begins at coords[1], coords[0] is empty.
@@ -872,5 +898,13 @@ overviewer.util = {
}
return(urlBase + url);
};
},
'isInLayerCtrl': function(ctrl, layer) {
for (var l in ctrl._layers) {
if (ctrl._layers[l].layer.tileSetConfig.path == layer.tileSetConfig.path) {
return true;
}
}
return false;
}
};