From 4e81bb4abde65464b1ea66562dcd97040099867f Mon Sep 17 00:00:00 2001 From: "Blue (Lukas Rieger)" Date: Sun, 28 Mar 2021 13:22:45 +0200 Subject: [PATCH] Improve marker updating and fix an error when loading empty tiles --- src/map/TileLoader.js | 5 ++++- src/markers/MarkerFileManager.js | 4 +++- src/markers/MarkerManager.js | 13 ++++++++++--- src/markers/PlayerMarkerManager.js | 24 ++++++++++++++---------- 4 files changed, 31 insertions(+), 15 deletions(-) diff --git a/src/map/TileLoader.js b/src/map/TileLoader.js index ac71fc7..af897f5 100644 --- a/src/map/TileLoader.js +++ b/src/map/TileLoader.js @@ -61,7 +61,10 @@ export class TileLoader { return new Promise((resolve, reject) => { this.fileLoader.load(tileUrl + '?' + this.tileCacheHash, geometryJson => { - if (!geometryJson.type || geometryJson.type !== 'BufferGeometry') reject({status: "empty"}); + if (!geometryJson.type || geometryJson.type !== 'BufferGeometry'){ + reject({status: "empty"}); + return; + } let geometry = this.bufferGeometryLoader.parse(geometryJson); diff --git a/src/markers/MarkerFileManager.js b/src/markers/MarkerFileManager.js index c9b779a..f4a66dd 100644 --- a/src/markers/MarkerFileManager.js +++ b/src/markers/MarkerFileManager.js @@ -52,7 +52,7 @@ export class MarkerFileManager extends MarkerManager { } updateFromData(markerData) { - if (!Array.isArray(markerData.markerSets)) return; + if (!Array.isArray(markerData.markerSets)) return false; let updatedMarkerSets = new Set(); // add & update @@ -71,6 +71,8 @@ export class MarkerFileManager extends MarkerManager { this.removeMarkerSet(setId); } }); + + return true; } /** diff --git a/src/markers/MarkerManager.js b/src/markers/MarkerManager.js index e717251..2b9ea55 100644 --- a/src/markers/MarkerManager.js +++ b/src/markers/MarkerManager.js @@ -63,8 +63,12 @@ export class MarkerManager { if (ms > 0) { let autoUpdate = () => { this.update() - .then(() => { - this._updateInterval = setTimeout(autoUpdate, ms); + .then(success => { + if (success) { + this._updateInterval = setTimeout(autoUpdate, ms); + } else { + this._updateInterval = setTimeout(autoUpdate, Math.max(ms, 1000 * 15)); + } }) .catch(e => { alert(this.events, e, "warning"); @@ -158,8 +162,11 @@ export class MarkerManager { /** * Updates all managed markers using the provided data. * @param markerData {object} - The data object, usually parsed json from a markers.json + * @returns {boolean} - If the update was successful */ - updateFromData(markerData) {} + updateFromData(markerData) { + return false; + } /** * @private diff --git a/src/markers/PlayerMarkerManager.js b/src/markers/PlayerMarkerManager.js index ac78f71..4b4cbb7 100644 --- a/src/markers/PlayerMarkerManager.js +++ b/src/markers/PlayerMarkerManager.js @@ -50,20 +50,23 @@ export class PlayerMarkerManager extends MarkerManager { */ updateFromData(markerData) { + if (!Array.isArray(markerData.players)) { + this.clear(); + return false; + } + /** @type Set */ let updatedPlayerMarkers = new Set(); // update - if (Array.isArray(markerData.players)) { - markerData.players.forEach(playerData => { - try { - let playerMarker = this.updatePlayerMarkerFromData(playerData); - updatedPlayerMarkers.add(playerMarker); - } catch (err) { - alert(this.events, err, "fine"); - } - }); - } + markerData.players.forEach(playerData => { + try { + let playerMarker = this.updatePlayerMarkerFromData(playerData); + updatedPlayerMarkers.add(playerMarker); + } catch (err) { + alert(this.events, err, "fine"); + } + }); // remove this.markers.forEach((playerMarker, markerId) => { @@ -72,6 +75,7 @@ export class PlayerMarkerManager extends MarkerManager { } }); + return true; } /**