Code Restructure

This commit is contained in:
Xelio 2013-03-01 13:57:35 +08:00
parent c75caa91dd
commit c9d7300a05
2 changed files with 45 additions and 36 deletions

View File

@ -125,22 +125,23 @@ window.handleDataResponse = function(data, textStatus, jqXHR) {
}); });
// Process the portals with portal render limit handler first // Process the portals with portal render limit handler first
ppp = portalRenderLimit.processPortals(ppp); // Low level portal will hold until last request
handlePortalData(ppp); var newPpp = portalRenderLimit.splitOrMergeLowLevelPortals(ppp);
handlePortalData(newPpp);
resolvePlayerNames(); resolvePlayerNames();
renderUpdateStatus(); renderUpdateStatus();
} }
window.handlePortalData = function(ppp) { window.handlePortalData = function(portals) {
var portalUpdateAvailable = false; var portalUpdateAvailable = false;
var portalInUrlAvailable = false; var portalInUrlAvailable = false;
// Preserve and restore "selectedPortal" between portal re-render // Preserve and restore "selectedPortal" between portal re-render
if(portalUpdateAvailable) var oldSelectedPortal = selectedPortal; if(portalUpdateAvailable) var oldSelectedPortal = selectedPortal;
runHooks('portalDataLoaded', {portals : ppp}); runHooks('portalDataLoaded', {portals : portals});
$.each(ppp, function(ind, portal) { $.each(portals, function(ind, portal) {
if(selectedPortal === portal[0]) portalUpdateAvailable = true; if(selectedPortal === portal[0]) portalUpdateAvailable = true;
if(urlPortal && portal[0] == urlPortal) portalInUrlAvailable = true; if(urlPortal && portal[0] == urlPortal) portalInUrlAvailable = true;
renderPortal(portal); renderPortal(portal);

View File

@ -48,14 +48,17 @@ window.portalRenderLimit.portalsPreviousMinLevel = new Array(MAX_PORTAL_LEVEL +
window.portalRenderLimit.init = function () { window.portalRenderLimit.init = function () {
var currentZoomLevel = map.getZoom(); var currentZoomLevel = map.getZoom();
if(!portalRenderLimit.previousZoomLevel) portalRenderLimit.previousZoomLevel = currentZoomLevel; portalRenderLimit.previousZoomLevel = portalRenderLimit.previousZoomLevel || currentZoomLevel;
// If there is a minLevel set in previous run, calculate previousMinLevel with it.
if(portalRenderLimit.minLevelSet) { if(portalRenderLimit.minLevelSet) {
var zoomDiff = currentZoomLevel - portalRenderLimit.previousZoomLevel; var zoomDiff = currentZoomLevel - portalRenderLimit.previousZoomLevel;
portalRenderLimit.previousMinLevel = Math.max(portalRenderLimit.minLevel - zoomDiff, -1); portalRenderLimit.previousMinLevel = Math.max(portalRenderLimit.minLevel - zoomDiff, -1);
portalRenderLimit.previousMinLevel = Math.min(portalRenderLimit.previousMinLevel, MAX_PORTAL_LEVEL); portalRenderLimit.previousMinLevel = Math.min(portalRenderLimit.previousMinLevel, MAX_PORTAL_LEVEL);
} }
portalRenderLimit.previousZoomLevel = currentZoomLevel; portalRenderLimit.previousZoomLevel = currentZoomLevel;
portalRenderLimit.initialized = true; portalRenderLimit.initialized = true;
portalRenderLimit.minLevel = -1; portalRenderLimit.minLevel = -1;
portalRenderLimit.resetCounting(); portalRenderLimit.resetCounting();
@ -75,54 +78,59 @@ window.portalRenderLimit.resetPortalsPreviousMinLevel = function() {
} }
} }
window.portalRenderLimit.processPortals = function(ppp) { window.portalRenderLimit.splitOrMergeLowLevelPortals = function(originPortals) {
portalRenderLimit.resetCounting(); portalRenderLimit.resetCounting();
var resultPortals = new Array(); portalRenderLimit.countingPortals(originPortals);
$.each(ppp, function(ind, portal) { var resultPortals = portalRenderLimit.isLastRequest()
portalRenderLimit.countPortal(portal); ? portalRenderLimit.mergeLowLevelPortals(originPortals)
: portalRenderLimit.splitLowLevelPortals(originPortals);
if(!portalRenderLimit.isLastRequest()) {
var portalLevel = parseInt(getPortalLevel(portal[2]));
if(portalLevel < portalRenderLimit.previousMinLevel) {
portalRenderLimit.portalsPreviousMinLevel[portalLevel].push(portal);
}else{
resultPortals.push(portal);
}
}
});
if(portalRenderLimit.isLastRequest()) {
resultPortals = portalRenderLimit.getLowLevelPortals(ppp);
portalRenderLimit.resetPortalsPreviousMinLevel();
}
return resultPortals; return resultPortals;
} }
window.portalRenderLimit.handleFailRequest = function() { window.portalRenderLimit.handleFailRequest = function() {
if(portalRenderLimit.isLastRequest()) { if(portalRenderLimit.isLastRequest()) {
var ppp = portalRenderLimit.getLowLevelPortals(null); var resultPortals = portalRenderLimit.mergeLowLevelPortals(null);
portalRenderLimit.resetPortalsPreviousMinLevel(); handlePortalData(resultPortals);
handlePortalData(ppp);
} }
} }
window.portalRenderLimit.countPortal = function(ent) { window.portalRenderLimit.countingPortals = function(portals) {
var portalGuid = ent[0]; $.each(portals, function(ind, portal) {
var portalLevel = parseInt(getPortalLevel(ent[2])); var portalGuid = portal[0];
var layerGroup = portalsLayers[portalLevel]; var portalLevel = parseInt(getPortalLevel(portal[2]));
var layerGroup = portalsLayers[portalLevel];
if(findEntityInLeaflet(layerGroup, window.portals, ent[0])) return;
portalRenderLimit.newPortalsPerLevel[portalLevel]++; if(findEntityInLeaflet(layerGroup, window.portals, portalGuid)) return true;
portalRenderLimit.newPortalsPerLevel[portalLevel]++;
});
} }
window.portalRenderLimit.getLowLevelPortals = function(appendTo) { window.portalRenderLimit.splitLowLevelPortals = function(portals) {
var resultPortals = new Array();
$.each(portals, function(ind, portal) {
var portalLevel = parseInt(getPortalLevel(portal[2]));
if(portalLevel < portalRenderLimit.previousMinLevel) {
portalRenderLimit.portalsPreviousMinLevel[portalLevel].push(portal);
}else{
resultPortals.push(portal);
}
});
return resultPortals;
}
window.portalRenderLimit.mergeLowLevelPortals = function(appendTo) {
var resultPortals = appendTo ? appendTo : new Array(); var resultPortals = appendTo ? appendTo : new Array();
for(var i = portalRenderLimit.getMinLevel(); for(var i = portalRenderLimit.getMinLevel();
i < portalRenderLimit.previousMinLevel; i < portalRenderLimit.previousMinLevel;
i++) { i++) {
$.merge(resultPortals, portalRenderLimit.portalsPreviousMinLevel[i]); $.merge(resultPortals, portalRenderLimit.portalsPreviousMinLevel[i]);
} }
// Reset portalsPreviousMinLevel, ensure they return only once
portalRenderLimit.resetPortalsPreviousMinLevel();
return resultPortals; return resultPortals;
} }