Merge branch 'master' of github.com:jonatkins/ingress-intel-total-conversion
This commit is contained in:
commit
6c5cbb67cb
@ -5,9 +5,9 @@
|
|||||||
window.debug = function() {}
|
window.debug = function() {}
|
||||||
|
|
||||||
window.debug.renderDetails = function() {
|
window.debug.renderDetails = function() {
|
||||||
console.log('portals: ' + Object.keys(portals).length);
|
console.log('portals: ' + window.portalsCount);
|
||||||
console.log('links: ' + Object.keys(links).length);
|
console.log('links: ' + window.linksCount);
|
||||||
console.log('fields: ' + Object.keys(fields).length);
|
console.log('fields: ' + window.fieldsCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
window.debug.printStackTrace = function() {
|
window.debug.printStackTrace = function() {
|
||||||
|
@ -572,7 +572,7 @@ window.getMarker = function(ent, portalLevel, latlng, team) {
|
|||||||
|
|
||||||
// renders a portal on the map from the given entity
|
// renders a portal on the map from the given entity
|
||||||
window.renderPortal = function(ent) {
|
window.renderPortal = function(ent) {
|
||||||
if(Object.keys(portals).length >= MAX_DRAWN_PORTALS && ent[0] !== selectedPortal)
|
if(window.portalsCount >= MAX_DRAWN_PORTALS && ent[0] !== selectedPortal)
|
||||||
return removeByGuid(ent[0]);
|
return removeByGuid(ent[0]);
|
||||||
|
|
||||||
// hide low level portals on low zooms
|
// hide low level portals on low zooms
|
||||||
@ -633,6 +633,7 @@ window.renderPortal = function(ent) {
|
|||||||
removeByGuid(portalResonatorGuid(portalGuid, i));
|
removeByGuid(portalResonatorGuid(portalGuid, i));
|
||||||
}
|
}
|
||||||
delete window.portals[portalGuid];
|
delete window.portals[portalGuid];
|
||||||
|
window.portalsCount --;
|
||||||
if(window.selectedPortal === portalGuid) {
|
if(window.selectedPortal === portalGuid) {
|
||||||
window.unselectOldPortal();
|
window.unselectOldPortal();
|
||||||
}
|
}
|
||||||
@ -642,6 +643,7 @@ window.renderPortal = function(ent) {
|
|||||||
// enable for debugging
|
// enable for debugging
|
||||||
if(window.portals[this.options.guid]) throw('duplicate portal detected');
|
if(window.portals[this.options.guid]) throw('duplicate portal detected');
|
||||||
window.portals[this.options.guid] = this;
|
window.portals[this.options.guid] = this;
|
||||||
|
window.portalsCount ++;
|
||||||
|
|
||||||
window.renderResonators(this.options.guid, this.options.details, this);
|
window.renderResonators(this.options.guid, this.options.details, this);
|
||||||
// handles the case where a selected portal gets removed from the
|
// handles the case where a selected portal gets removed from the
|
||||||
@ -781,7 +783,7 @@ window.resonatorsSetStyle = function(portalGuid, resoStyle, lineStyle) {
|
|||||||
|
|
||||||
// renders a link on the map from the given entity
|
// renders a link on the map from the given entity
|
||||||
window.renderLink = function(ent) {
|
window.renderLink = function(ent) {
|
||||||
if(Object.keys(links).length >= MAX_DRAWN_LINKS)
|
if(window.linksCount >= MAX_DRAWN_LINKS)
|
||||||
return removeByGuid(ent[0]);
|
return removeByGuid(ent[0]);
|
||||||
|
|
||||||
// some links are constructed from portal linkedEdges data. These have no valid 'creator' data.
|
// some links are constructed from portal linkedEdges data. These have no valid 'creator' data.
|
||||||
@ -823,11 +825,15 @@ window.renderLink = function(ent) {
|
|||||||
|
|
||||||
if(!getPaddedBounds().intersects(poly.getBounds())) return;
|
if(!getPaddedBounds().intersects(poly.getBounds())) return;
|
||||||
|
|
||||||
poly.on('remove', function() { delete window.links[this.options.guid]; });
|
poly.on('remove', function() {
|
||||||
|
delete window.links[this.options.guid];
|
||||||
|
window.linksCount--;
|
||||||
|
});
|
||||||
poly.on('add', function() {
|
poly.on('add', function() {
|
||||||
// enable for debugging
|
// enable for debugging
|
||||||
if(window.links[this.options.guid]) throw('duplicate link detected');
|
if(window.links[this.options.guid]) throw('duplicate link detected');
|
||||||
window.links[this.options.guid] = this;
|
window.links[this.options.guid] = this;
|
||||||
|
window.linksCount++;
|
||||||
this.bringToBack();
|
this.bringToBack();
|
||||||
});
|
});
|
||||||
poly.addTo(linksLayer);
|
poly.addTo(linksLayer);
|
||||||
@ -835,7 +841,7 @@ window.renderLink = function(ent) {
|
|||||||
|
|
||||||
// renders a field on the map from a given entity
|
// renders a field on the map from a given entity
|
||||||
window.renderField = function(ent) {
|
window.renderField = function(ent) {
|
||||||
if(Object.keys(fields).length >= MAX_DRAWN_FIELDS)
|
if(window.fieldsCount >= MAX_DRAWN_FIELDS)
|
||||||
return window.removeByGuid(ent[0]);
|
return window.removeByGuid(ent[0]);
|
||||||
|
|
||||||
var old = findEntityInLeaflet(fieldsLayer, window.fields, ent[0]);
|
var old = findEntityInLeaflet(fieldsLayer, window.fields, ent[0]);
|
||||||
@ -921,11 +927,15 @@ window.renderField = function(ent) {
|
|||||||
// events, thus this listener will be attached to the field. It
|
// events, thus this listener will be attached to the field. It
|
||||||
// doesn’t matter to which element these are bound since Leaflet
|
// doesn’t matter to which element these are bound since Leaflet
|
||||||
// will add/remove all elements of the LayerGroup at once.
|
// will add/remove all elements of the LayerGroup at once.
|
||||||
poly.on('remove', function() { delete window.fields[this.options.guid]; });
|
poly.on('remove', function() {
|
||||||
|
delete window.fields[this.options.guid];
|
||||||
|
window.fieldsCount--;
|
||||||
|
});
|
||||||
poly.on('add', function() {
|
poly.on('add', function() {
|
||||||
// enable for debugging
|
// enable for debugging
|
||||||
if(window.fields[this.options.guid]) console.warn('duplicate field detected');
|
if(window.fields[this.options.guid]) console.warn('duplicate field detected');
|
||||||
window.fields[this.options.guid] = f;
|
window.fields[this.options.guid] = f;
|
||||||
|
window.fieldsCount++;
|
||||||
this.bringToBack();
|
this.bringToBack();
|
||||||
});
|
});
|
||||||
f.addTo(fieldsLayer);
|
f.addTo(fieldsLayer);
|
||||||
|
@ -41,6 +41,7 @@ window.portalRenderLimit.previousMinLevel = -1;
|
|||||||
window.portalRenderLimit.previousZoomLevel = null;
|
window.portalRenderLimit.previousZoomLevel = null;
|
||||||
window.portalRenderLimit.newPortalsPerLevel = new Array(MAX_PORTAL_LEVEL + 1);
|
window.portalRenderLimit.newPortalsPerLevel = new Array(MAX_PORTAL_LEVEL + 1);
|
||||||
window.portalRenderLimit.portalsLowerThanPrevMinLv = new Array(MAX_PORTAL_LEVEL + 1);
|
window.portalRenderLimit.portalsLowerThanPrevMinLv = new Array(MAX_PORTAL_LEVEL + 1);
|
||||||
|
window.portalRenderLimit.portalsLowerThanPrevMinLvCnt = new Array(MAX_PORTAL_LEVEL + 1);
|
||||||
|
|
||||||
window.portalRenderLimit.init = function () {
|
window.portalRenderLimit.init = function () {
|
||||||
var currentZoomLevel = map.getZoom();
|
var currentZoomLevel = map.getZoom();
|
||||||
@ -72,6 +73,7 @@ window.portalRenderLimit.resetCounting = function() {
|
|||||||
window.portalRenderLimit.resetPortalsLowerThanPrevMinLv = function() {
|
window.portalRenderLimit.resetPortalsLowerThanPrevMinLv = function() {
|
||||||
for(var i = 0; i <= MAX_PORTAL_LEVEL; i++) {
|
for(var i = 0; i <= MAX_PORTAL_LEVEL; i++) {
|
||||||
portalRenderLimit.portalsLowerThanPrevMinLv[i] = {};
|
portalRenderLimit.portalsLowerThanPrevMinLv[i] = {};
|
||||||
|
portalRenderLimit.portalsLowerThanPrevMinLvCnt[i] = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -125,6 +127,7 @@ window.portalRenderLimit.splitLowLevelPortals = function(portals) {
|
|||||||
|
|
||||||
if(!portalOnMap && portalLevel < portalRenderLimit.previousMinLevel) {
|
if(!portalOnMap && portalLevel < portalRenderLimit.previousMinLevel) {
|
||||||
portalRenderLimit.portalsLowerThanPrevMinLv[portalLevel][guid] = portal;
|
portalRenderLimit.portalsLowerThanPrevMinLv[portalLevel][guid] = portal;
|
||||||
|
portalRenderLimit.portalsLowerThanPrevMinLvCnt[portalLevel]++;
|
||||||
} else {
|
} else {
|
||||||
resultPortals[guid] = portal;
|
resultPortals[guid] = portal;
|
||||||
}
|
}
|
||||||
@ -158,7 +161,7 @@ window.portalRenderLimit.setMinLevel = function() {
|
|||||||
// Find the min portal level under render limit
|
// Find the min portal level under render limit
|
||||||
while(newMinLevel > 0) {
|
while(newMinLevel > 0) {
|
||||||
var oldPortalCount = layerGroupLength(portalsLayers[newMinLevel - 1]);
|
var oldPortalCount = layerGroupLength(portalsLayers[newMinLevel - 1]);
|
||||||
var storedPortalCount = Object.keys(portalRenderLimit.portalsLowerThanPrevMinLv[newMinLevel - 1]).length;
|
var storedPortalCount = portalRenderLimit.portalsLowerThanPrevMinLvCnt[newMinLevel - 1];
|
||||||
var newPortalCount = Math.max(storedPortalCount, portalRenderLimit.newPortalsPerLevel[newMinLevel - 1]);
|
var newPortalCount = Math.max(storedPortalCount, portalRenderLimit.newPortalsPerLevel[newMinLevel - 1]);
|
||||||
|
|
||||||
totalPortalsCount += oldPortalCount + newPortalCount;
|
totalPortalsCount += oldPortalCount + newPortalCount;
|
||||||
|
@ -245,9 +245,9 @@ window.getPaddedBounds = function() {
|
|||||||
// cally detect if the render limit will be hit.
|
// cally detect if the render limit will be hit.
|
||||||
window.renderLimitReached = function(ratio) {
|
window.renderLimitReached = function(ratio) {
|
||||||
ratio = ratio || 1;
|
ratio = ratio || 1;
|
||||||
if(Object.keys(portals).length*ratio >= MAX_DRAWN_PORTALS) return true;
|
if(window.portalsCount*ratio >= MAX_DRAWN_PORTALS) return true;
|
||||||
if(Object.keys(links).length*ratio >= MAX_DRAWN_LINKS) return true;
|
if(window.linksCount*ratio >= MAX_DRAWN_LINKS) return true;
|
||||||
if(Object.keys(fields).length*ratio >= MAX_DRAWN_FIELDS) return true;
|
if(window.fieldsCount*ratio >= MAX_DRAWN_FIELDS) return true;
|
||||||
var param = { 'reached': false };
|
var param = { 'reached': false };
|
||||||
window.runHooks('checkRenderLimit', param);
|
window.runHooks('checkRenderLimit', param);
|
||||||
return param.reached;
|
return param.reached;
|
||||||
|
3
main.js
3
main.js
@ -250,8 +250,11 @@ var portalsLayers, linksLayer, fieldsLayer;
|
|||||||
// automatically kept in sync with the items on *sLayer, so never ever
|
// automatically kept in sync with the items on *sLayer, so never ever
|
||||||
// write to them.
|
// write to them.
|
||||||
window.portals = {};
|
window.portals = {};
|
||||||
|
window.portalsCount = 0;
|
||||||
window.links = {};
|
window.links = {};
|
||||||
|
window.linksCount = 0;
|
||||||
window.fields = {};
|
window.fields = {};
|
||||||
|
window.fieldsCount = 0;
|
||||||
window.resonators = {};
|
window.resonators = {};
|
||||||
|
|
||||||
// contain current status(on/off) of overlay layerGroups.
|
// contain current status(on/off) of overlay layerGroups.
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
// @id iitc-plugin-draw-tools@breunigs
|
// @id iitc-plugin-draw-tools@breunigs
|
||||||
// @name IITC plugin: draw tools
|
// @name IITC plugin: draw tools
|
||||||
// @category Layer
|
// @category Layer
|
||||||
// @version 0.4.1.@@DATETIMEVERSION@@
|
// @version 0.5.0.@@DATETIMEVERSION@@
|
||||||
// @namespace https://github.com/jonatkins/ingress-intel-total-conversion
|
// @namespace https://github.com/jonatkins/ingress-intel-total-conversion
|
||||||
// @updateURL @@UPDATEURL@@
|
// @updateURL @@UPDATEURL@@
|
||||||
// @downloadURL @@DOWNLOADURL@@
|
// @downloadURL @@DOWNLOADURL@@
|
||||||
@ -32,6 +32,33 @@ window.plugin.drawTools.loadExternals = function() {
|
|||||||
$('head').append('<style>@@INCLUDESTRING:external/leaflet.draw.css@@</style>');
|
$('head').append('<style>@@INCLUDESTRING:external/leaflet.draw.css@@</style>');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
window.plugin.drawTools.setOptions = function() {
|
||||||
|
window.plugin.drawTools.lineOptions = {
|
||||||
|
stroke: true,
|
||||||
|
color: '#f06eaa',
|
||||||
|
weight: 4,
|
||||||
|
opacity: 0.5,
|
||||||
|
fill: false,
|
||||||
|
clickable: true
|
||||||
|
};
|
||||||
|
|
||||||
|
window.plugin.drawTools.polygonOptions = {
|
||||||
|
stroke: true,
|
||||||
|
color: '#f06eaa',
|
||||||
|
weight: 4,
|
||||||
|
opacity: 0.5,
|
||||||
|
fill: true,
|
||||||
|
fillColor: null,
|
||||||
|
fillOpacity: 0.2,
|
||||||
|
clickable: true
|
||||||
|
};
|
||||||
|
|
||||||
|
window.plugin.drawTools.markerOptions = {
|
||||||
|
icon: new L.Icon.Default(),
|
||||||
|
zIndexOffset: 2000
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// renders the draw control buttons in the top left corner
|
// renders the draw control buttons in the top left corner
|
||||||
@ -45,7 +72,8 @@ window.plugin.drawTools.addDrawControl = function() {
|
|||||||
+ 'define the start of the polygon. Continue clicking\n'
|
+ 'define the start of the polygon. Continue clicking\n'
|
||||||
+ 'to draw the line you want. Click the first or last\n'
|
+ 'to draw the line you want. Click the first or last\n'
|
||||||
+ 'point of the line (a small white rectangle) to\n'
|
+ 'point of the line (a small white rectangle) to\n'
|
||||||
+ 'finish. Double clicking also works.'
|
+ 'finish. Double clicking also works.',
|
||||||
|
shapeOptions: window.plugin.drawTools.polygonOptions,
|
||||||
},
|
},
|
||||||
|
|
||||||
polyline: {
|
polyline: {
|
||||||
@ -54,7 +82,8 @@ window.plugin.drawTools.addDrawControl = function() {
|
|||||||
+ 'define the start of the line. Continue clicking\n'
|
+ 'define the start of the line. Continue clicking\n'
|
||||||
+ 'to draw the line you want. Click the <b>last</b>\n'
|
+ 'to draw the line you want. Click the <b>last</b>\n'
|
||||||
+ 'point of the line (a small white rectangle) to\n'
|
+ 'point of the line (a small white rectangle) to\n'
|
||||||
+ 'finish. Double clicking also works.'
|
+ 'finish. Double clicking also works.',
|
||||||
|
shapeOptions: window.plugin.drawTools.lineOptions,
|
||||||
},
|
},
|
||||||
|
|
||||||
circle: {
|
circle: {
|
||||||
@ -62,13 +91,15 @@ window.plugin.drawTools.addDrawControl = function() {
|
|||||||
+ 'Click on the button, then click-AND-HOLD on the\n'
|
+ 'Click on the button, then click-AND-HOLD on the\n'
|
||||||
+ 'map where the circle’s center should be. Move\n'
|
+ 'map where the circle’s center should be. Move\n'
|
||||||
+ 'the mouse to control the radius. Release the mouse\n'
|
+ 'the mouse to control the radius. Release the mouse\n'
|
||||||
+ 'to finish.'
|
+ 'to finish.',
|
||||||
|
shapeOptions: window.plugin.drawTools.polygonOptions,
|
||||||
},
|
},
|
||||||
|
|
||||||
marker: {
|
marker: {
|
||||||
title: 'Add a marker.\n\n'
|
title: 'Add a marker.\n\n'
|
||||||
+ 'Click on the button, then click on the map where\n'
|
+ 'Click on the button, then click on the map where\n'
|
||||||
+ 'you want the marker to appear.'
|
+ 'you want the marker to appear.',
|
||||||
|
shapeOptions: window.plugin.drawTools.markerOptions,
|
||||||
},
|
},
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -114,11 +145,79 @@ window.plugin.drawTools.getSnapLatLng = function(containerPoint) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
window.plugin.drawTools.boot = function() {
|
window.plugin.drawTools.save = function() {
|
||||||
//create a leaflet FeatureGroup to hold drawn items
|
var data = [];
|
||||||
|
|
||||||
|
window.plugin.drawTools.drawnItems.eachLayer( function(layer) {
|
||||||
|
var item = {};
|
||||||
|
if (layer instanceof L.GeodesicCircle || layer instanceof L.Circle) {
|
||||||
|
item.type = 'circle';
|
||||||
|
item.latLng = layer.getLatLng();
|
||||||
|
item.radius = layer.getRadius();
|
||||||
|
} else if (layer instanceof L.GeodesicPolygon || layer instanceof L.Polygon) {
|
||||||
|
item.type = 'polygon';
|
||||||
|
item.latLngs = layer.getLatLngs();
|
||||||
|
} else if (layer instanceof L.GeodesicPolyline || layer instanceof L.Polyline) {
|
||||||
|
item.type = 'polyline';
|
||||||
|
item.latLngs = layer.getLatLngs();
|
||||||
|
} else if (layer instanceof L.Marker) {
|
||||||
|
item.type = 'marker';
|
||||||
|
item.latLng = layer.getLatLng();
|
||||||
|
} else {
|
||||||
|
console.warn('Unknown layer type when saving draw tools layer');
|
||||||
|
return; //.eachLayer 'continue'
|
||||||
|
}
|
||||||
|
|
||||||
|
data.push(item);
|
||||||
|
});
|
||||||
|
|
||||||
|
localStorage['plugin-draw-tools-layer'] = JSON.stringify(data);
|
||||||
|
|
||||||
|
console.log('draw-tools: saved to localStorage');
|
||||||
|
}
|
||||||
|
|
||||||
|
window.plugin.drawTools.load = function() {
|
||||||
|
var dataStr = localStorage['plugin-draw-tools-layer'];
|
||||||
|
if (dataStr === undefined) return;
|
||||||
|
|
||||||
|
var data = JSON.parse(dataStr);
|
||||||
|
$.each(data, function(index,item) {
|
||||||
|
var layer = null;
|
||||||
|
switch(item.type) {
|
||||||
|
case 'polyline':
|
||||||
|
layer = L.geodesicPolyline(item.latLngs,window.plugin.drawTools.lineOptions);
|
||||||
|
break;
|
||||||
|
case 'polygon':
|
||||||
|
layer = L.geodesicPolygon(item.latLngs,window.plugin.drawTools.polygonOptions);
|
||||||
|
break;
|
||||||
|
case 'circle':
|
||||||
|
layer = L.circle(item.latLng,item.radius,window.plugin.drawTools.polygonOptions);
|
||||||
|
break;
|
||||||
|
case 'marker':
|
||||||
|
layer = L.marker(item.latLng,window.plugin.drawTools.markerOptions)
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
console.warn('unknown layer type "'+item.type+'" when loading draw tools layer');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (layer) {
|
||||||
|
window.plugin.drawTools.drawnItems.addLayer(layer);
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
window.plugin.drawTools.boot = function() {
|
||||||
|
window.plugin.drawTools.setOptions();
|
||||||
|
|
||||||
|
//create a leaflet FeatureGroup to hold drawn items
|
||||||
window.plugin.drawTools.drawnItems = new L.FeatureGroup();
|
window.plugin.drawTools.drawnItems = new L.FeatureGroup();
|
||||||
|
|
||||||
|
//load any previously saved items
|
||||||
|
plugin.drawTools.load();
|
||||||
|
|
||||||
//add the draw control - this references the above FeatureGroup for editing purposes
|
//add the draw control - this references the above FeatureGroup for editing purposes
|
||||||
plugin.drawTools.addDrawControl();
|
plugin.drawTools.addDrawControl();
|
||||||
|
|
||||||
@ -147,8 +246,18 @@ window.plugin.drawTools.boot = function() {
|
|||||||
var type=e.layerType;
|
var type=e.layerType;
|
||||||
var layer=e.layer;
|
var layer=e.layer;
|
||||||
window.plugin.drawTools.drawnItems.addLayer(layer);
|
window.plugin.drawTools.drawnItems.addLayer(layer);
|
||||||
|
window.plugin.drawTools.save();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
map.on('draw:deleted', function(e) {
|
||||||
|
window.plugin.drawTools.save();
|
||||||
|
});
|
||||||
|
|
||||||
|
map.on('draw:edited', function(e) {
|
||||||
|
window.plugin.drawTools.save();
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ Important IITC release 0.13.0, to fix enlightened from showing up as the wrong c
|
|||||||
<li>IPAS plugin updated. This had been done earlier on desktop, but not mobile</li>
|
<li>IPAS plugin updated. This had been done earlier on desktop, but not mobile</li>
|
||||||
</ul>
|
</ul>
|
||||||
<li>Plugins<ul>
|
<li>Plugins<ul>
|
||||||
<li>Update mod highlither plugin</li>
|
<li>Update mod highlighter plugin</li>
|
||||||
<li>Portals list plugin updates</li>
|
<li>Portals list plugin updates</li>
|
||||||
</ul>
|
</ul>
|
||||||
<li>plus various other tweaks, bug fixes, etc</li>
|
<li>plus various other tweaks, bug fixes, etc</li>
|
||||||
|
@ -19,7 +19,7 @@ Important IITC release 0.13.0, to fix enlightened from showing up as the wrong c
|
|||||||
<li>IPAS plugin updated. This had been done earlier on desktop, but not mobile</li>
|
<li>IPAS plugin updated. This had been done earlier on desktop, but not mobile</li>
|
||||||
</ul>
|
</ul>
|
||||||
<li>Plugins<ul>
|
<li>Plugins<ul>
|
||||||
<li>Update mod highlither plugin</li>
|
<li>Update mod highlighter plugin</li>
|
||||||
<li>Portals list plugin updates</li>
|
<li>Portals list plugin updates</li>
|
||||||
</ul>
|
</ul>
|
||||||
<li>plus various other tweaks, bug fixes, etc</li>
|
<li>plus various other tweaks, bug fixes, etc</li>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user