From 195dc611b249ad3467fbd21c5e7183e39afdafc1 Mon Sep 17 00:00:00 2001 From: vita10gy Date: Tue, 12 Feb 2013 00:21:49 -0600 Subject: [PATCH] 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. --- code/map_data.js | 2 +- main.js | 2 +- plugins/show-portal-weakness.user.js | 132 +++++++++++++++++++++++++++ 3 files changed, 134 insertions(+), 2 deletions(-) create mode 100644 plugins/show-portal-weakness.user.js diff --git a/code/map_data.js b/code/map_data.js index 893ecc3a..7f8737c7 100644 --- a/code/map_data.js +++ b/code/map_data.js @@ -351,7 +351,7 @@ window.isResonatorsShow = function() { } window.portalResetColor = function(portal) { - portal.setStyle({color: portal.options.fillColor}); + portal.setStyle({color: COLORS[getTeam(portal.options.details)]}); } // renders a link on the map from the given entity diff --git a/main.js b/main.js index 64a0967d..6460139c 100644 --- a/main.js +++ b/main.js @@ -125,7 +125,7 @@ var MAX_DRAWN_LINKS = 400; var MAX_DRAWN_FIELDS = 200; -var COLOR_SELECTED_PORTAL = '#f00'; +var COLOR_SELECTED_PORTAL = '#fff'; var COLORS = ['#FFCE00', '#0088FF', '#03FE03']; // none, res, enl var COLORS_LVL = ['#000', '#FECE5A', '#FFA630', '#FF7315', '#E40000', '#FD2992', '#EB26CD', '#C124E0', '#9627F4']; var COLORS_MOD = {VERY_RARE: '#F78AF6', RARE: '#AD8AFF', COMMON: '#84FBBD'}; diff --git a/plugins/show-portal-weakness.user.js b/plugins/show-portal-weakness.user.js new file mode 100644 index 00000000..34647d78 --- /dev/null +++ b/plugins/show-portal-weakness.user.js @@ -0,0 +1,132 @@ +// ==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);