remove entities outside the map request bounds before processing any requests
prevent the selected portal from being removed re-select the selected portal - should refresh the side bar when data changes
This commit is contained in:
parent
4c343386e4
commit
de3d05fe95
@ -12,7 +12,7 @@ window.Render = function() {
|
|||||||
|
|
||||||
|
|
||||||
// start a render pass. called as we start to make the batch of data requests to the servers
|
// start a render pass. called as we start to make the batch of data requests to the servers
|
||||||
window.Render.prototype.startRenderPass = function(bounds) {
|
window.Render.prototype.startRenderPass = function() {
|
||||||
this.isRendering = true;
|
this.isRendering = true;
|
||||||
|
|
||||||
this.deletedGuid = {}; // object - represents the set of all deleted game entity GUIDs seen in a render pass
|
this.deletedGuid = {}; // object - represents the set of all deleted game entity GUIDs seen in a render pass
|
||||||
@ -20,23 +20,48 @@ window.Render.prototype.startRenderPass = function(bounds) {
|
|||||||
this.seenPortalsGuid = {};
|
this.seenPortalsGuid = {};
|
||||||
this.seenLinksGuid = {};
|
this.seenLinksGuid = {};
|
||||||
this.seenFieldsGuid = {};
|
this.seenFieldsGuid = {};
|
||||||
|
|
||||||
this.minPortalLevel = undefined;
|
|
||||||
// clear all entities outside of the bounds
|
|
||||||
}
|
}
|
||||||
|
|
||||||
window.Render.prototype.clearPortalsBelowLevel = function(level) {
|
window.Render.prototype.clearPortalsBelowLevel = function(level) {
|
||||||
if (this.minPortalLevel === undefined) {
|
var count = 0;
|
||||||
this.minPortalLevel = level;
|
|
||||||
for (var guid in window.portals) {
|
for (var guid in window.portals) {
|
||||||
var p = portals[guid];
|
var p = portals[guid];
|
||||||
if (parseInt(p.options.level) < level) {
|
if (parseInt(p.options.level) < level && guid !== selectedPortal) {
|
||||||
this.deletePortalEntity(guid);
|
this.deletePortalEntity(guid);
|
||||||
|
count++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
console.log('Render: deleted '+count+' portals by level');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
window.Render.prototype.clearEntitiesOutsideBounds = function(bounds) {
|
||||||
|
var pcount=0, lcount=0, fcount=0;
|
||||||
|
|
||||||
|
for (var guid in window.portals) {
|
||||||
|
var p = portals[guid];
|
||||||
|
if (!bounds.contains (p.getLatLng()) && guid !== selectedPortal) {
|
||||||
|
this.deletePortalEntity(guid);
|
||||||
|
pcount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var guid in window.links) {
|
||||||
|
var l = links[guid];
|
||||||
|
if (!bounds.intersects (l.getBounds())) {
|
||||||
|
this.deleteLinkEntity(guid);
|
||||||
|
lcount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var guid in window.fields) {
|
||||||
|
var f = fields[guid];
|
||||||
|
if (!bounds.intersects (f.getBounds())) {
|
||||||
|
this.deleteFieldEntity(guid);
|
||||||
|
fcount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
console.log('Render: deleted '+pcount+' portals, '+lcount+' links, '+fcount+' fields by bounds check');
|
||||||
|
}
|
||||||
|
|
||||||
// process deleted entity list and entity data
|
// process deleted entity list and entity data
|
||||||
window.Render.prototype.processTileData = function(tiledata) {
|
window.Render.prototype.processTileData = function(tiledata) {
|
||||||
@ -211,16 +236,17 @@ window.Render.prototype.createPortalEntity = function(ent) {
|
|||||||
marker.on('click', function() { window.renderPortalDetails(ent[0]); });
|
marker.on('click', function() { window.renderPortalDetails(ent[0]); });
|
||||||
marker.on('dblclick', function() { window.renderPortalDetails(ent[0]); window.map.setView(latlng, 17); });
|
marker.on('dblclick', function() { window.renderPortalDetails(ent[0]); window.map.setView(latlng, 17); });
|
||||||
|
|
||||||
// handle highlighting of the selected portal
|
|
||||||
if (ent[0] === selectedPortal) {
|
|
||||||
setMarkerStyle (marker, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
window.runHooks('portalAdded', {portal: marker});
|
window.runHooks('portalAdded', {portal: marker});
|
||||||
|
|
||||||
window.portals[ent[0]] = marker;
|
window.portals[ent[0]] = marker;
|
||||||
|
|
||||||
|
// re-select the portal, to refresh the sidebar on any changes
|
||||||
|
if (ent[0] === selectedPortal) {
|
||||||
|
selectPortal (ent[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//TODO? postpone adding to the map layer
|
//TODO? postpone adding to the map layer
|
||||||
portalsLayers[parseInt(portalLevel)].addLayer(marker);
|
portalsLayers[parseInt(portalLevel)].addLayer(marker);
|
||||||
|
|
||||||
|
@ -132,19 +132,26 @@ window.MapDataRequest.prototype.refresh = function() {
|
|||||||
var zoom = getPortalDataZoom();
|
var zoom = getPortalDataZoom();
|
||||||
var minPortalLevel = getMinPortalLevelForZoom(zoom);
|
var minPortalLevel = getMinPortalLevelForZoom(zoom);
|
||||||
|
|
||||||
window.runHooks ('mapDataRefreshStart', {bounds: bounds, zoom: zoom});
|
|
||||||
|
|
||||||
this.render.startRenderPass(bounds);
|
|
||||||
this.render.clearPortalsBelowLevel(minPortalLevel);
|
|
||||||
|
|
||||||
console.log('requesting data tiles at zoom '+zoom+' (L'+minPortalLevel+'+ portals), map zoom is '+map.getZoom());
|
|
||||||
|
|
||||||
|
|
||||||
var x1 = lngToTile(bounds.getWest(), zoom);
|
var x1 = lngToTile(bounds.getWest(), zoom);
|
||||||
var x2 = lngToTile(bounds.getEast(), zoom);
|
var x2 = lngToTile(bounds.getEast(), zoom);
|
||||||
var y1 = latToTile(bounds.getNorth(), zoom);
|
var y1 = latToTile(bounds.getNorth(), zoom);
|
||||||
var y2 = latToTile(bounds.getSouth(), zoom);
|
var y2 = latToTile(bounds.getSouth(), zoom);
|
||||||
|
|
||||||
|
window.runHooks ('mapDataRefreshStart', {bounds: bounds, zoom: zoom});
|
||||||
|
|
||||||
|
this.render.startRenderPass();
|
||||||
|
this.render.clearPortalsBelowLevel(minPortalLevel);
|
||||||
|
|
||||||
|
// calculate the full bounds for the data - including the part of the tiles off the screen edge
|
||||||
|
var dataBounds = L.latLngBounds([
|
||||||
|
[tileToLat(y2+1,zoom), tileToLng(x1,zoom)],
|
||||||
|
[tileToLat(y1,zoom), tileToLng(x2+1,zoom)]
|
||||||
|
]);
|
||||||
|
this.render.clearEntitiesOutsideBounds(dataBounds);
|
||||||
|
|
||||||
|
console.log('requesting data tiles at zoom '+zoom+' (L'+minPortalLevel+'+ portals), map zoom is '+map.getZoom());
|
||||||
|
|
||||||
|
|
||||||
this.cachedTileCount = 0;
|
this.cachedTileCount = 0;
|
||||||
this.requestedTileCount = 0;
|
this.requestedTileCount = 0;
|
||||||
this.successTileCount = 0;
|
this.successTileCount = 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user