At a glance high level indicator of portals in disrepair. Opacity is used to denote how much it's hurting. (Bright means needs the most attention.) Factors in current energy, missing shields, or missing resonators. Red means it needs attention. Orange means the same thing, except that it's down at least one resonator. I realise this is in opposition to game convention where dim == almost dead, but I tried it that way, and it just made no sense to me to do it that way. The whole point is a high level way to quickly identify portals that most need repairing. If opacity isn't done this way your eyes are most drawn to the portals that least need your attention.
133 lines
3.8 KiB
JavaScript
133 lines
3.8 KiB
JavaScript
// ==UserScript==
|
|
// @id iitc-plugin-show-portal-weakness@vita10gy
|
|
// @name iitc: show portal weakness
|
|
// @version 0.1
|
|
// @namespace https://github.com/breunigs/ingress-intel-total-conversion
|
|
// @updateURL https://raw.github.com/breunigs/ingress-intel-total-conversion/gh-pages/plugins/show-portal-weekness.user.js
|
|
// @downloadURL https://raw.github.com/breunigs/ingress-intel-total-conversion/gh-pages/plugins/show-portal-weekness.user.js
|
|
// @description Uses the fill color of the portals to denote if the portal is weak (Needs recharging, missing a resonator, needs shields)
|
|
// @include http://www.ingress.com/intel*
|
|
// @match http://www.ingress.com/intel*
|
|
// ==/UserScript==
|
|
|
|
function wrapper() {
|
|
// ensure plugin framework is there, even if iitc is not yet loaded
|
|
if(typeof window.plugin !== 'function') window.plugin = function() {};
|
|
|
|
|
|
// PLUGIN START ////////////////////////////////////////////////////////
|
|
|
|
// use own namespace for plugin
|
|
window.plugin.portalWeakness = function() {};
|
|
|
|
window.plugin.portalWeakness.getPortalWeaknessFactor = function(d)
|
|
{
|
|
var portal_weakness = 0;
|
|
if(getTeam(d) != 0)
|
|
{
|
|
if(window.getTotalPortalEnergy(d)> 0 && window.getCurrentPortalEnergy(d) < window.getTotalPortalEnergy(d))
|
|
{
|
|
portal_weakness = 1 - (window.getPortalEnergy(d)/window.getTotalPortalEnergy(d));
|
|
}
|
|
//Ding the portal for every missing sheild.
|
|
$.each(d.portalV2.linkedModArray, function(ind, mod)
|
|
{
|
|
if(mod == null)
|
|
{
|
|
portal_weakness += .05;
|
|
}
|
|
});
|
|
//Ding the portal for every missing resonator.
|
|
var resCount = 0;
|
|
$.each(d.resonatorArray.resonators, function(ind, reso)
|
|
{
|
|
if(reso == null) {
|
|
portal_weakness += .125;
|
|
}
|
|
else {
|
|
resCount++;
|
|
}
|
|
});
|
|
if(portal_weakness<0) {
|
|
portal_weakness = 0;
|
|
}
|
|
if(portal_weakness>1)
|
|
{
|
|
portal_weakness = 1;
|
|
}
|
|
}
|
|
return(Math.round(portal_weakness*100)/100);
|
|
}
|
|
|
|
window.plugin.portalWeakness.portalAdded = function(data) {
|
|
|
|
var d = data.portal.options.details;
|
|
var portal_weakness = 0;
|
|
if(getTeam(d) != 0)
|
|
{
|
|
if(window.getTotalPortalEnergy(d)> 0 && window.getCurrentPortalEnergy(d) < window.getTotalPortalEnergy(d))
|
|
{
|
|
portal_weakness = 1 - (window.getCurrentPortalEnergy(d)/window.getTotalPortalEnergy(d));
|
|
}
|
|
//Ding the portal for every missing sheild.
|
|
$.each(d.portalV2.linkedModArray, function(ind, mod)
|
|
{
|
|
if(mod == null)
|
|
{
|
|
portal_weakness += .05;
|
|
}
|
|
});
|
|
//Ding the portal for every missing resonator.
|
|
var resCount = 0;
|
|
$.each(d.resonatorArray.resonators, function(ind, reso)
|
|
{
|
|
if(reso == null) {
|
|
portal_weakness += .125;
|
|
}
|
|
else {
|
|
resCount++;
|
|
}
|
|
});
|
|
if(portal_weakness<0) {
|
|
portal_weakness = 0;
|
|
}
|
|
if(portal_weakness>1)
|
|
{
|
|
portal_weakness = 1;
|
|
}
|
|
|
|
if(portal_weakness>0)
|
|
{
|
|
var color = 'red';
|
|
if(resCount<8)
|
|
{
|
|
color = 'orange';
|
|
}
|
|
var fill_opacity = Math.round((portal_weakness*.7 + .3)*100)/100;
|
|
data.portal.setStyle({fillColor: color, fillOpacity: fill_opacity});
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
|
|
var setup = function() {
|
|
window.addHook('portalAdded', window.plugin.portalWeakness.portalAdded);
|
|
}
|
|
|
|
// PLUGIN END //////////////////////////////////////////////////////////
|
|
|
|
if(window.iitcLoaded && typeof setup === 'function') {
|
|
setup();
|
|
} else {
|
|
if(window.bootPlugins)
|
|
window.bootPlugins.push(setup);
|
|
else
|
|
window.bootPlugins = [setup];
|
|
}
|
|
} // wrapper end
|
|
// inject code into site context
|
|
var script = document.createElement('script');
|
|
script.appendChild(document.createTextNode('('+ wrapper +')();'));
|
|
(document.body || document.head || document.documentElement).appendChild(script);
|