use 'overlayadd/remove' instead of 'layeradd/remove' events. in theory should be more efficient as layeradd/remove gets called for every single portal/link/field/etc on the map
This commit is contained in:
parent
b5a52d810e
commit
f646f481fc
62
code/boot.js
62
code/boot.js
@ -140,7 +140,7 @@ window.setupMap = function() {
|
|||||||
var portalsLayers = [];
|
var portalsLayers = [];
|
||||||
for(var i = 0; i <= 8; i++) {
|
for(var i = 0; i <= 8; i++) {
|
||||||
portalsFactionLayers[i] = [L.layerGroup(), L.layerGroup(), L.layerGroup()];
|
portalsFactionLayers[i] = [L.layerGroup(), L.layerGroup(), L.layerGroup()];
|
||||||
portalsLayers[i] = L.layerGroup();
|
portalsLayers[i] = L.layerGroup(portalsFactionLayers[i]);
|
||||||
map.addLayer(portalsLayers[i]);
|
map.addLayer(portalsLayers[i]);
|
||||||
var t = (i === 0 ? 'Unclaimed' : 'Level ' + i) + ' Portals';
|
var t = (i === 0 ? 'Unclaimed' : 'Level ' + i) + ' Portals';
|
||||||
addLayers[t] = portalsLayers[i];
|
addLayers[t] = portalsLayers[i];
|
||||||
@ -149,14 +149,14 @@ window.setupMap = function() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fieldsFactionLayers = [L.layerGroup(), L.layerGroup(), L.layerGroup()];
|
fieldsFactionLayers = [L.layerGroup(), L.layerGroup(), L.layerGroup()];
|
||||||
var fieldsLayer = L.layerGroup();
|
var fieldsLayer = L.layerGroup(fieldsFactionLayers);
|
||||||
map.addLayer(fieldsLayer, true);
|
map.addLayer(fieldsLayer, true);
|
||||||
addLayers['Fields'] = fieldsLayer;
|
addLayers['Fields'] = fieldsLayer;
|
||||||
// Store it in hiddenLayer to remove later
|
// Store it in hiddenLayer to remove later
|
||||||
if(!isLayerGroupDisplayed('Fields', true)) hiddenLayer.push(fieldsLayer);
|
if(!isLayerGroupDisplayed('Fields', true)) hiddenLayer.push(fieldsLayer);
|
||||||
|
|
||||||
linksFactionLayers = [L.layerGroup(), L.layerGroup(), L.layerGroup()];
|
linksFactionLayers = [L.layerGroup(), L.layerGroup(), L.layerGroup()];
|
||||||
var linksLayer = L.layerGroup();
|
var linksLayer = L.layerGroup(linksFactionLayers);
|
||||||
map.addLayer(linksLayer, true);
|
map.addLayer(linksLayer, true);
|
||||||
addLayers['Links'] = linksLayer;
|
addLayers['Links'] = linksLayer;
|
||||||
// Store it in hiddenLayer to remove later
|
// Store it in hiddenLayer to remove later
|
||||||
@ -164,32 +164,29 @@ window.setupMap = function() {
|
|||||||
|
|
||||||
// faction-specific layers
|
// faction-specific layers
|
||||||
// these layers don't actually contain any data. instead, everytime they're added/removed from the map,
|
// these layers don't actually contain any data. instead, everytime they're added/removed from the map,
|
||||||
// the matching sub-layers within the above portals/fields/links are added/removed from their parent
|
// the matching sub-layers within the above portals/fields/links are added/removed from their parent with
|
||||||
|
// the below 'onoverlayadd/onoverlayremovve' events
|
||||||
var factionLayers = [L.layerGroup(), L.layerGroup(), L.layerGroup()];
|
var factionLayers = [L.layerGroup(), L.layerGroup(), L.layerGroup()];
|
||||||
|
|
||||||
window.map.on('layeradd layerremove', function(e) {
|
|
||||||
for (var fac in factionLayers) {
|
|
||||||
if (e.layer === factionLayers[fac]) {
|
|
||||||
if (e.type == 'layeradd') {
|
|
||||||
if (!fieldsLayer.hasLayer(fieldsFactionLayers[fac])) fieldsLayer.addLayer (fieldsFactionLayers[fac]);
|
|
||||||
if (!linksLayer.hasLayer(linksFactionLayers[fac])) linksLayer.addLayer (linksFactionLayers[fac]);
|
|
||||||
for (var lvl in portalsLayers) {
|
|
||||||
if (!portalsLayers[lvl].hasLayer(portalsFactionLayers[lvl][fac])) portalsLayers[lvl].addLayer (portalsFactionLayers[lvl][fac]);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (fieldsLayer.hasLayer(fieldsFactionLayers[fac])) fieldsLayer.removeLayer (fieldsFactionLayers[fac]);
|
|
||||||
if (linksLayer.hasLayer(linksFactionLayers[fac])) linksLayer.removeLayer (linksFactionLayers[fac]);
|
|
||||||
for (var lvl in portalsLayers) {
|
|
||||||
if (portalsLayers[lvl].hasLayer(portalsFactionLayers[lvl][fac])) portalsLayers[lvl].removeLayer (portalsFactionLayers[lvl][fac]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
for (var fac in factionLayers) {
|
for (var fac in factionLayers) {
|
||||||
map.addLayer (factionLayers[fac]);
|
map.addLayer (factionLayers[fac]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var setFactionLayersState = function(fac,enabled) {
|
||||||
|
if (enabled) {
|
||||||
|
if (!fieldsLayer.hasLayer(fieldsFactionLayers[fac])) fieldsLayer.addLayer (fieldsFactionLayers[fac]);
|
||||||
|
if (!linksLayer.hasLayer(linksFactionLayers[fac])) linksLayer.addLayer (linksFactionLayers[fac]);
|
||||||
|
for (var lvl in portalsLayers) {
|
||||||
|
if (!portalsLayers[lvl].hasLayer(portalsFactionLayers[lvl][fac])) portalsLayers[lvl].addLayer (portalsFactionLayers[lvl][fac]);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (fieldsLayer.hasLayer(fieldsFactionLayers[fac])) fieldsLayer.removeLayer (fieldsFactionLayers[fac]);
|
||||||
|
if (linksLayer.hasLayer(linksFactionLayers[fac])) linksLayer.removeLayer (linksFactionLayers[fac]);
|
||||||
|
for (var lvl in portalsLayers) {
|
||||||
|
if (portalsLayers[lvl].hasLayer(portalsFactionLayers[lvl][fac])) portalsLayers[lvl].removeLayer (portalsFactionLayers[lvl][fac]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// to avoid any favouritism, we'll put the player's own faction layer first
|
// to avoid any favouritism, we'll put the player's own faction layer first
|
||||||
if (PLAYER.team == 'RESISTANCE') {
|
if (PLAYER.team == 'RESISTANCE') {
|
||||||
addLayers['Resistance'] = factionLayers[TEAM_RES];
|
addLayers['Resistance'] = factionLayers[TEAM_RES];
|
||||||
@ -201,6 +198,23 @@ window.setupMap = function() {
|
|||||||
if (!isLayerGroupDisplayed('Resistance', true)) hiddenLayer.push (factionLayers[TEAM_RES]);
|
if (!isLayerGroupDisplayed('Resistance', true)) hiddenLayer.push (factionLayers[TEAM_RES]);
|
||||||
if (!isLayerGroupDisplayed('Enlightened', true)) hiddenLayer.push (factionLayers[TEAM_ENL]);
|
if (!isLayerGroupDisplayed('Enlightened', true)) hiddenLayer.push (factionLayers[TEAM_ENL]);
|
||||||
|
|
||||||
|
setFactionLayersState (TEAM_NONE, true);
|
||||||
|
setFactionLayersState (TEAM_RES, isLayerGroupDisplayed('Resistance', true));
|
||||||
|
setFactionLayersState (TEAM_ENL, isLayerGroupDisplayed('Enlightened', true));
|
||||||
|
|
||||||
|
// NOTE: these events are fired by the layer chooser, so won't happen until that's created and added to the map
|
||||||
|
window.map.on('overlayadd overlayremove', function(e) {
|
||||||
|
var displayed = (e.type == 'overlayadd');
|
||||||
|
switch (e.name) {
|
||||||
|
case 'Resistance':
|
||||||
|
setFactionLayersState (TEAM_RES, displayed);
|
||||||
|
break;
|
||||||
|
case 'Enlightened':
|
||||||
|
setFactionLayersState (TEAM_ENL, displayed);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
window.layerChooser = new L.Control.Layers({
|
window.layerChooser = new L.Control.Layers({
|
||||||
'MapQuest OSM': views[0],
|
'MapQuest OSM': views[0],
|
||||||
|
Loading…
x
Reference in New Issue
Block a user