ingress-intel-total-conversion/plugins/show-portal-weakness.user.js
vita10gy 195dc611b2 Weak Portal Plugin
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.
2013-02-12 00:21:49 -06:00

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);