0

Track centers by layer instead of by world

This fixes a bug where a world with multiple layers with different
"northdirection" values would initially load at the wrong center point
because the center for the last layer would override prior values
in the overview.collections.centers map.
This commit is contained in:
Cliff Meyers
2019-12-30 19:40:36 -05:00
parent 751ba39bd0
commit a29e9ddf20
2 changed files with 19 additions and 14 deletions

View File

@@ -39,7 +39,7 @@ overviewer.collections = {
/**
* When switching regionsets, where should we zoom to?
* Defaults to spawn. Stored as map of world names to [latlng, zoom]
* Defaults to spawn. Stored as map of maps: world names to layer names to [latlng, zoom]
*/
'centers': {},

View File

@@ -142,8 +142,11 @@ overviewer.util = {
// save current view for the current_world
overviewer.collections.centers[overviewer.current_world][0] = overviewer.map.getCenter();
overviewer.collections.centers[overviewer.current_world][1] = overviewer.map.getZoom();
let current_center = [overviewer.map.getCenter(), overviewer.map.getZoom()];
let current_layer = overviewer.current_layer[overviewer.current_world] ||
Object.values(overviewer.collections.mapTypes[overviewer.current_world])[0];
let layer_name = current_layer.tileSetConfig.path;
overviewer.collections.centers[overviewer.current_world][layer_name] = current_center;
overviewer.layerCtrl.remove();
@@ -190,17 +193,15 @@ overviewer.util = {
}
}
var center = overviewer.collections.centers[selected_world];
let selected_layer_name = overviewer.collections.mapTypes[selected_world] && overviewer.current_layer[selected_world] ?
overviewer.current_layer[selected_world].tileSetConfig.path :
Object.keys(overviewer.collections.mapTypes[selected_world])[0];
let center = overviewer.collections.centers[selected_world][selected_layer_name];
overviewer.map.setView(center[0], center[1]);
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.path]);
} else {
var tset_name = Object.keys(overviewer.collections.mapTypes[selected_world])[0]
overviewer.map.addLayer(overviewer.collections.mapTypes[selected_world][tset_name]);
}
overviewer.map.addLayer(overviewer.collections.mapTypes[selected_world][selected_layer_name]);
},
onAdd: function() {
console.log("onAdd mycontrol");
@@ -406,12 +407,15 @@ overviewer.util = {
myLayer["tileSetConfig"] = obj;
if (!overviewer.collections.centers[obj.world]) {
overviewer.collections.centers[obj.world] = {};
}
if (typeof(obj.center) == "object") {
var latlng = overviewer.util.fromWorldToLatLng(obj.center[0], obj.center[1], obj.center[2], obj);
overviewer.collections.centers[obj.world] = [ latlng, obj.defaultZoom ];
overviewer.collections.centers[obj.world][obj.path] = [ latlng, obj.defaultZoom ];
} else {
overviewer.collections.centers[obj.world] = [ [0, 0], obj.defaultZoom ];
overviewer.collections.centers[obj.world][obj.path] = [ [0, 0], obj.defaultZoom ];
}
});
@@ -423,7 +427,8 @@ overviewer.util = {
.addTo(overviewer.map);
overviewer.current_world = overviewerConfig.worlds[0];
let center = overviewer.collections.centers[overviewer.current_world];
let default_layer_name = Object.keys(overviewer.collections.mapTypes[overviewer.current_world])[0];
let center = overviewer.collections.centers[overviewer.current_world][default_layer_name];
overviewer.map.setView(center[0], center[1]);
if (!overviewer.util.initHash()) {