From a29e9ddf2034dad91e8a654b95616c6683d3e08d Mon Sep 17 00:00:00 2001 From: Cliff Meyers Date: Mon, 30 Dec 2019 19:40:36 -0500 Subject: [PATCH] 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. --- overviewer_core/data/js_src/overviewer.js | 2 +- overviewer_core/data/js_src/util.js | 31 +++++++++++++---------- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/overviewer_core/data/js_src/overviewer.js b/overviewer_core/data/js_src/overviewer.js index 559376b..cf9a65f 100644 --- a/overviewer_core/data/js_src/overviewer.js +++ b/overviewer_core/data/js_src/overviewer.js @@ -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': {}, diff --git a/overviewer_core/data/js_src/util.js b/overviewer_core/data/js_src/util.js index cb0e6b2..52643af 100644 --- a/overviewer_core/data/js_src/util.js +++ b/overviewer_core/data/js_src/util.js @@ -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()) {