Merge branch 'plugin' of https://github.com/boombuler/ingress-intel-total-conversion into plugin
Conflicts: plugins/max-links.user.js
This commit is contained in:
commit
b8a86f8d08
@ -63,7 +63,7 @@ Contributing
|
|||||||
|
|
||||||
Please do!
|
Please do!
|
||||||
|
|
||||||
(Obviously, Resistance folks must send in complete patches while Enlightenment gals and guys may just open feature request ☺). If you want to hack the source, please [read HACKING.md for details](https://github.com/breunigs/ingress-intel-total-conversion/blob/gh-pages/HACKING.md) .
|
(Obviously, Resistance folks must send in complete patches while Enlightened gals and guys may just open feature request ☺). If you want to hack the source, please [read HACKING.md for details](https://github.com/breunigs/ingress-intel-total-conversion/blob/gh-pages/HACKING.md) .
|
||||||
|
|
||||||
**So far, these people have contributed:**
|
**So far, these people have contributed:**
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ The chat is split up into several categories. It usually only shows messages for
|
|||||||
**The chat categories are:**
|
**The chat categories are:**
|
||||||
- full: shows all automated messages *(23:57 \<apj\> destroyed an L3 Resonator on Two Spikes)*
|
- full: shows all automated messages *(23:57 \<apj\> destroyed an L3 Resonator on Two Spikes)*
|
||||||
- compact: shows only the latest automated message per user
|
- compact: shows only the latest automated message per user
|
||||||
- public: shows user generated public messages (both Enlightenment and Resistance can read it)
|
- public: shows user generated public messages (both Enlightened and Resistance can read it)
|
||||||
- faction: shows messages for own faction (e.g. only Resistance can read Resistance messages)
|
- faction: shows messages for own faction (e.g. only Resistance can read Resistance messages)
|
||||||
|
|
||||||
**Posting messages:**
|
**Posting messages:**
|
||||||
@ -117,7 +117,7 @@ Starting from the top, the sidebar shows this information:
|
|||||||
“Random Details” are displayed in four columns. The outer ones show the data while the inner ones are the titles.
|
“Random Details” are displayed in four columns. The outer ones show the data while the inner ones are the titles.
|
||||||
|
|
||||||
- owner: who deployed the first resonator after it has been neutral/unclaimed.
|
- owner: who deployed the first resonator after it has been neutral/unclaimed.
|
||||||
- since: when was the first resonator deployed after it has been neutral/unclaimed.
|
- since: when was the first resonator deployed after it has been neutral/unclaimed. The reasonators decay every 24hrs from capture. Move the cursor over it to show the full date time.
|
||||||
- range: shows how far links made from this portal can be. Click on the value to zoom out to link range. The red circle shows how far links may reach.
|
- range: shows how far links made from this portal can be. Click on the value to zoom out to link range. The red circle shows how far links may reach.
|
||||||
- energy: shows current and maximum energy if fully charged. The tooltip contains the exact numbers.
|
- energy: shows current and maximum energy if fully charged. The tooltip contains the exact numbers.
|
||||||
- links: shows incoming and outgoing links. The tooltip explains the icons.
|
- links: shows incoming and outgoing links. The tooltip explains the icons.
|
||||||
|
12
code/boot.js
12
code/boot.js
@ -58,10 +58,6 @@ window.setupMap = function() {
|
|||||||
{zoomControl: !(localStorage['iitc.zoom.buttons'] === 'false')}
|
{zoomControl: !(localStorage['iitc.zoom.buttons'] === 'false')}
|
||||||
));
|
));
|
||||||
|
|
||||||
try {
|
|
||||||
map.addLayer(views[readCookie('ingress.intelmap.type')]);
|
|
||||||
} catch(e) { map.addLayer(views[0]); }
|
|
||||||
|
|
||||||
var addLayers = {};
|
var addLayers = {};
|
||||||
|
|
||||||
portalsLayers = [];
|
portalsLayers = [];
|
||||||
@ -91,6 +87,14 @@ window.setupMap = function() {
|
|||||||
}, addLayers);
|
}, addLayers);
|
||||||
|
|
||||||
map.addControl(window.layerChooser);
|
map.addControl(window.layerChooser);
|
||||||
|
|
||||||
|
// set the map AFTER adding the layer chooser, or Chrome reorders the
|
||||||
|
// layers. This likely leads to broken layer selection because the
|
||||||
|
// views/cookie order does not match the layer chooser order.
|
||||||
|
try {
|
||||||
|
map.addLayer(views[readCookie('ingress.intelmap.type')]);
|
||||||
|
} catch(e) { map.addLayer(views[0]); }
|
||||||
|
|
||||||
map.attributionControl.setPrefix('');
|
map.attributionControl.setPrefix('');
|
||||||
// listen for changes and store them in cookies
|
// listen for changes and store them in cookies
|
||||||
map.on('moveend', window.storeMapPosition);
|
map.on('moveend', window.storeMapPosition);
|
||||||
|
@ -15,7 +15,7 @@ window.updateGameScore = function(data) {
|
|||||||
var es = '<span class="enl" style="width:'+ep+'%;"> '+Math.round(ep)+'%</span>';
|
var es = '<span class="enl" style="width:'+ep+'%;"> '+Math.round(ep)+'%</span>';
|
||||||
$('#gamestat').html(rs+es).one('click', function() { window.updateGameScore() });
|
$('#gamestat').html(rs+es).one('click', function() { window.updateGameScore() });
|
||||||
// help cursor via “#gamestat span”
|
// help cursor via “#gamestat span”
|
||||||
$('#gamestat').attr('title', 'Resistance:\t'+r+' MindUnits\nEnlightenment:\t'+e+' MindUnits');
|
$('#gamestat').attr('title', 'Resistance:\t'+r+' MindUnits\nEnlightened:\t'+e+' MindUnits');
|
||||||
|
|
||||||
window.setTimeout('window.updateGameScore', REFRESH_GAME_SCORE*1000);
|
window.setTimeout('window.updateGameScore', REFRESH_GAME_SCORE*1000);
|
||||||
}
|
}
|
||||||
|
@ -43,16 +43,13 @@
|
|||||||
// redrawn. It is called early on in the
|
// redrawn. It is called early on in the
|
||||||
// code/map_data.js#renderPortal as long as there was an
|
// code/map_data.js#renderPortal as long as there was an
|
||||||
// old portal for the guid.
|
// old portal for the guid.
|
||||||
// checkRenderLimit: callback is passed the argument of
|
|
||||||
// {reached : false} to indicate that the renderlimit is reached
|
|
||||||
// set reached to true.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
window._hooks = {}
|
window._hooks = {}
|
||||||
window.VALID_HOOKS = ['portalAdded', 'portalDetailsUpdated',
|
window.VALID_HOOKS = ['portalAdded', 'portalDetailsUpdated',
|
||||||
'publicChatDataAvailable', 'portalDataLoaded', 'beforePortalReRender',
|
'publicChatDataAvailable', 'portalDataLoaded', 'beforePortalReRender'];
|
||||||
'checkRenderLimit'];
|
|
||||||
|
|
||||||
window.runHooks = function(event, data) {
|
window.runHooks = function(event, data) {
|
||||||
if(VALID_HOOKS.indexOf(event) === -1) throw('Unknown event type: ' + event);
|
if(VALID_HOOKS.indexOf(event) === -1) throw('Unknown event type: ' + event);
|
||||||
|
@ -26,7 +26,10 @@ window.renderPortalDetails = function(guid) {
|
|||||||
: null;
|
: null;
|
||||||
var playerText = player ? ['owner', player] : null;
|
var playerText = player ? ['owner', player] : null;
|
||||||
|
|
||||||
var time = d.captured ? unixTimeToString(d.captured.capturedTime) : null;
|
var time = d.captured
|
||||||
|
? '<span title="' + unixTimeToString(d.captured.capturedTime, true) + '">'
|
||||||
|
+ unixTimeToString(d.captured.capturedTime) + '</span>'
|
||||||
|
: null;
|
||||||
var sinceText = time ? ['since', time] : null;
|
var sinceText = time ? ['since', time] : null;
|
||||||
|
|
||||||
var linkedFields = ['fields', d.portalV2.linkedFields.length];
|
var linkedFields = ['fields', d.portalV2.linkedFields.length];
|
||||||
|
@ -117,6 +117,7 @@ window.getPaddedBounds = function() {
|
|||||||
window._storedPaddedBounds = null;
|
window._storedPaddedBounds = null;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
if(renderLimitReached(0.7)) return window.map.getBounds();
|
||||||
if(window._storedPaddedBounds) return window._storedPaddedBounds;
|
if(window._storedPaddedBounds) return window._storedPaddedBounds;
|
||||||
|
|
||||||
var p = window.map.getBounds().pad(VIEWPORT_PAD_RATIO);
|
var p = window.map.getBounds().pad(VIEWPORT_PAD_RATIO);
|
||||||
@ -124,13 +125,17 @@ window.getPaddedBounds = function() {
|
|||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
window.renderLimitReached = function() {
|
// returns true if the render limit has been reached. The default ratio
|
||||||
if(Object.keys(portals).length >= MAX_DRAWN_PORTALS) return true;
|
// is 1, which means it will tell you if there are more items drawn than
|
||||||
if(Object.keys(links).length >= MAX_DRAWN_LINKS) return true;
|
// acceptable. A value of 0.9 will tell you if 90% of the amount of
|
||||||
if(Object.keys(fields).length >= MAX_DRAWN_FIELDS) return true;
|
// acceptable entities have been drawn. You can use this to heuristi-
|
||||||
var param = { 'reached': false };
|
// cally detect if the render limit will be hit.
|
||||||
window.runHooks('checkRenderLimit', param);
|
window.renderLimitReached = function(ratio) {
|
||||||
return param.reached;
|
ratio = ratio || 1;
|
||||||
|
if(Object.keys(portals).length*ratio >= MAX_DRAWN_PORTALS) return true;
|
||||||
|
if(Object.keys(links).length*ratio >= MAX_DRAWN_LINKS) return true;
|
||||||
|
if(Object.keys(fields).length*ratio >= MAX_DRAWN_FIELDS) return true;
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
window.getMinPortalLevel = function() {
|
window.getMinPortalLevel = function() {
|
||||||
|
@ -12,7 +12,7 @@ Available Plugins
|
|||||||
- [**Compute AP Stats**](https://raw.github.com/breunigs/ingress-intel-total-conversion/gh-pages/plugins/compute-ap-stats.user.js) Shows the potential AP an agent could obtain by destroying and rebuilding all the portals in the current zoom area.
|
- [**Compute AP Stats**](https://raw.github.com/breunigs/ingress-intel-total-conversion/gh-pages/plugins/compute-ap-stats.user.js) Shows the potential AP an agent could obtain by destroying and rebuilding all the portals in the current zoom area.
|
||||||
- [**Draw Tools**](https://raw.github.com/breunigs/ingress-intel-total-conversion/gh-pages/plugins/draw-tools.user.js) allows to draw circles and lines on the map to aid you with planning your next big field. [View screenshot](http://breunigs.github.com/ingress-intel-total-conversion/screenshots/plugin_draw_tools.png)
|
- [**Draw Tools**](https://raw.github.com/breunigs/ingress-intel-total-conversion/gh-pages/plugins/draw-tools.user.js) allows to draw circles and lines on the map to aid you with planning your next big field. [View screenshot](http://breunigs.github.com/ingress-intel-total-conversion/screenshots/plugin_draw_tools.png)
|
||||||
- [**Guess Player Level**](https://raw.github.com/breunigs/ingress-intel-total-conversion/gh-pages/plugins/guess-player-levels.user.js) looks for the highest placed resonator per player in the current view to guess the player level.
|
- [**Guess Player Level**](https://raw.github.com/breunigs/ingress-intel-total-conversion/gh-pages/plugins/guess-player-levels.user.js) looks for the highest placed resonator per player in the current view to guess the player level.
|
||||||
- [**Highlight Weakened Portals**](https://raw.github.com/breunigs/ingress-intel-total-conversion/gh-pages/plugins/show-portal-weakness.user.js) fill portals with red to indicate portal's state of disrepair. The brighter the color the more attention needed (recharge, shields, resonators). A dashed portal means a resonator is missing.
|
- [**Highlight Weakened Portals**](https://raw.github.com/breunigs/ingress-intel-total-conversion/gh-pages/plugins/show-portal-weakness.user.js) fill portals with red to indicate portal's state of disrepair. The brighter the color the more attention needed (recharge, shields, resonators). A dashed portal means a resonator is missing. Red, needs energy and shields. Orange, only needs energy (either recharge or resonators). Yellow, only needs shields.
|
||||||
- [**Max-Links**]((https://raw.github.com/breunigs/ingress-intel-total-conversion/gh-pages/plugins/max-links.user.js) Calculates how to link the portals to create the maximum number of fields.
|
- [**Max-Links**]((https://raw.github.com/breunigs/ingress-intel-total-conversion/gh-pages/plugins/max-links.user.js) Calculates how to link the portals to create the maximum number of fields.
|
||||||
- [**Player Tracker**](https://raw.github.com/breunigs/ingress-intel-total-conversion/gh-pages/plugins/player-tracker.user.js) Draws trails for user actions in the last hour. At the last known location there’s a tooltip that shows the data in a table. [View screenshot](http://breunigs.github.com/ingress-intel-total-conversion/screenshots/plugin_player_tracker.png).
|
- [**Player Tracker**](https://raw.github.com/breunigs/ingress-intel-total-conversion/gh-pages/plugins/player-tracker.user.js) Draws trails for user actions in the last hour. At the last known location there’s a tooltip that shows the data in a table. [View screenshot](http://breunigs.github.com/ingress-intel-total-conversion/screenshots/plugin_player_tracker.png).
|
||||||
- [**Render Limit Increase**](https://raw.github.com/breunigs/ingress-intel-total-conversion/gh-pages/plugins/render-limit-increase.user.js) increases render limits. Good for high density areas (e.g. London, UK) and faster PCs.
|
- [**Render Limit Increase**](https://raw.github.com/breunigs/ingress-intel-total-conversion/gh-pages/plugins/render-limit-increase.user.js) increases render limits. Good for high density areas (e.g. London, UK) and faster PCs.
|
||||||
|
@ -88,7 +88,7 @@ window.plugin.guessPlayerLevels.guess = function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
var s = 'the players have at least the following level:\n\n';
|
var s = 'the players have at least the following level:\n\n';
|
||||||
s += 'Resistance:\t \tEnlightenment:\t\n';
|
s += 'Resistance:\t \tEnlightened:\t\n';
|
||||||
|
|
||||||
var namesR = plugin.guessPlayerLevels.sort(playersRes);
|
var namesR = plugin.guessPlayerLevels.sort(playersRes);
|
||||||
var namesE = plugin.guessPlayerLevels.sort(playersEnl);
|
var namesE = plugin.guessPlayerLevels.sort(playersEnl);
|
||||||
|
@ -30,8 +30,6 @@ function wrapper() {
|
|||||||
};
|
};
|
||||||
var delaunayScriptLocation = "https://raw.github.com/breunigs/ingress-intel-total-conversion/gh-pages/dist/delaunay.js";
|
var delaunayScriptLocation = "https://raw.github.com/breunigs/ingress-intel-total-conversion/gh-pages/dist/delaunay.js";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
window.plugin.maxLinks.layer = null;
|
window.plugin.maxLinks.layer = null;
|
||||||
|
|
||||||
var updating = false;
|
var updating = false;
|
||||||
@ -67,7 +65,7 @@ function wrapper() {
|
|||||||
renderLimitReached = false;
|
renderLimitReached = false;
|
||||||
$.each(triangles, function(idx, triangle) {
|
$.each(triangles, function(idx, triangle) {
|
||||||
if (drawnLinks <= window.plugin.maxLinks.MAX_DRAWN_LINKS) {
|
if (drawnLinks <= window.plugin.maxLinks.MAX_DRAWN_LINKS) {
|
||||||
triangle.draw(window.plugin.maxLinks.layer, minX, minY);
|
triangle.draw(window.plugin.maxLinks.layer, minX, minY)
|
||||||
drawnLinks += 3;
|
drawnLinks += 3;
|
||||||
} else {
|
} else {
|
||||||
renderLimitReached = true;
|
renderLimitReached = true;
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
// ==UserScript==
|
// ==UserScript==
|
||||||
// @id iitc-plugin-show-portal-weakness@vita10gy
|
// @id iitc-plugin-show-portal-weakness@vita10gy
|
||||||
// @name iitc: show portal weakness
|
// @name iitc: show portal weakness
|
||||||
// @version 0.2
|
// @version 0.3
|
||||||
// @namespace https://github.com/breunigs/ingress-intel-total-conversion
|
// @namespace https://github.com/breunigs/ingress-intel-total-conversion
|
||||||
// @updateURL https://raw.github.com/breunigs/ingress-intel-total-conversion/gh-pages/plugins/show-portal-weakness.user.js
|
// @updateURL https://raw.github.com/breunigs/ingress-intel-total-conversion/gh-pages/plugins/show-portal-weakness.user.js
|
||||||
// @downloadURL https://raw.github.com/breunigs/ingress-intel-total-conversion/gh-pages/plugins/show-portal-weakness.user.js
|
// @downloadURL https://raw.github.com/breunigs/ingress-intel-total-conversion/gh-pages/plugins/show-portal-weakness.user.js
|
||||||
// @description Uses the fill color of the portals to denote if the portal is weak (Needs recharging, missing a resonator, needs shields)
|
// @description Uses the fill color of the portals to denote if the portal is weak (Needs recharging, missing a resonator, needs shields) Red, needs energy and shields. Orange, only needs energy (either recharge or resonators). Yellow, only needs shields.
|
||||||
// @include http://www.ingress.com/intel*
|
// @include http://www.ingress.com/intel*
|
||||||
// @match http://www.ingress.com/intel*
|
// @match http://www.ingress.com/intel*
|
||||||
// ==/UserScript==
|
// ==/UserScript==
|
||||||
@ -24,46 +24,51 @@ window.plugin.portalWeakness.portalAdded = function(data) {
|
|||||||
|
|
||||||
var d = data.portal.options.details;
|
var d = data.portal.options.details;
|
||||||
var portal_weakness = 0;
|
var portal_weakness = 0;
|
||||||
if(getTeam(d) != 0)
|
if(getTeam(d) !== 0) {
|
||||||
{
|
var only_shields = true;
|
||||||
if(window.getTotalPortalEnergy(d)> 0 && window.getCurrentPortalEnergy(d) < window.getTotalPortalEnergy(d))
|
var missing_shields = 0;
|
||||||
{
|
if(window.getTotalPortalEnergy(d) > 0 && window.getCurrentPortalEnergy(d) < window.getTotalPortalEnergy(d)) {
|
||||||
portal_weakness = 1 - (window.getCurrentPortalEnergy(d)/window.getTotalPortalEnergy(d));
|
portal_weakness = 1 - (window.getCurrentPortalEnergy(d)/window.getTotalPortalEnergy(d));
|
||||||
|
only_shields = false;
|
||||||
}
|
}
|
||||||
//Ding the portal for every missing sheild.
|
//Ding the portal for every missing sheild.
|
||||||
$.each(d.portalV2.linkedModArray, function(ind, mod)
|
$.each(d.portalV2.linkedModArray, function(ind, mod) {
|
||||||
{
|
if(mod === null) {
|
||||||
if(mod == null)
|
missing_shields++;
|
||||||
{
|
portal_weakness += .08;
|
||||||
portal_weakness += .03;
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
//Ding the portal for every missing resonator.
|
//Ding the portal for every missing resonator.
|
||||||
var resCount = 0;
|
var resCount = 0;
|
||||||
$.each(d.resonatorArray.resonators, function(ind, reso)
|
$.each(d.resonatorArray.resonators, function(ind, reso) {
|
||||||
{
|
if(reso === null) {
|
||||||
if(reso == null) {
|
|
||||||
portal_weakness += .125;
|
portal_weakness += .125;
|
||||||
}
|
only_shields = false;
|
||||||
else {
|
} else {
|
||||||
resCount++;
|
resCount++;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
if(portal_weakness < 0) {
|
if(portal_weakness < 0) {
|
||||||
portal_weakness = 0;
|
portal_weakness = 0;
|
||||||
}
|
}
|
||||||
if(portal_weakness>1)
|
if(portal_weakness > 1) {
|
||||||
{
|
|
||||||
portal_weakness = 1;
|
portal_weakness = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(portal_weakness>0)
|
if(portal_weakness > 0) {
|
||||||
{
|
var fill_opacity = portal_weakness*.7 + .3;
|
||||||
var color = 'red';
|
var color = 'orange';
|
||||||
var fill_opacity = Math.round((portal_weakness*.8 + .2)*100)/100;
|
if(only_shields) {
|
||||||
var params = {fillColor: color, fillOpacity: fill_opacity, radius: data.portal.options.radius+1};
|
color = 'yellow';
|
||||||
if(resCount<8)
|
//If only shields are missing, make portal yellow
|
||||||
{
|
// but fill more than usual since pale yellow is basically invisible
|
||||||
|
fill_opacity = missing_shields*.15 + .1;
|
||||||
|
} else if(missing_shields > 0) {
|
||||||
|
color = 'red';
|
||||||
|
}
|
||||||
|
fill_opacity = Math.round(fill_opacity*100)/100;
|
||||||
|
var params = {fillColor: color, fillOpacity: fill_opacity};
|
||||||
|
if(resCount < 8) {
|
||||||
// Hole per missing resonator
|
// Hole per missing resonator
|
||||||
var dash = new Array(8-resCount + 1).join("1,4,") + "100,0"
|
var dash = new Array(8-resCount + 1).join("1,4,") + "100,0"
|
||||||
params["dashArray"] = dash;
|
params["dashArray"] = dash;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user