diff --git a/README.md b/README.md index bdbe428d..af629764 100644 --- a/README.md +++ b/README.md @@ -87,6 +87,7 @@ Contributors [sorgo](https://github.com/sorgo), [Xelio](https://github.com/Xelio), [ZauberNerd](https://github.com/ZauberNerd) +[vita10gy](https://github.com/vita10gy) Hacking diff --git a/code/map_data.js b/code/map_data.js index 7059fd55..791d9705 100644 --- a/code/map_data.js +++ b/code/map_data.js @@ -372,7 +372,7 @@ window.isSameResonator = function(oldRes, newRes) { } 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/plugins/README.md b/plugins/README.md index 310077f6..779f22df 100644 --- a/plugins/README.md +++ b/plugins/README.md @@ -10,12 +10,14 @@ Available Plugins ----------------- - [**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 or orange 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. Hacking ------- -Plugins may be developed in the same way as the total conversion script. Plugins may provide features tailored to specific needs and are allowed to change things as they see fit. You can provide them separately oder submit a pull request to have them managed in this repository. There are currently no hooks that allow integration with the main script, but I will add those if the need arises. Simply open a bug report. +Plugins may be developed in the same way as the total conversion script. Plugins may provide features tailored to specific needs and are allowed to change things as they see fit. You can provide them separately or submit a pull request to have them managed in this repository. +If you think a hook in the main script is required, simply open a bug report. You can use the guess player level script as an example to get you started. Just update the names and the part between `// PLUGIN START` and `// PLUGIN END` and you should be able to develop your plugin. The other code ensures your plugin is executed after the main script. diff --git a/plugins/show-portal-weakness.user.js b/plugins/show-portal-weakness.user.js new file mode 100644 index 00000000..48e60682 --- /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.2 +// @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 += .03; + } + }); + //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'; + var fill_opacity = Math.round((portal_weakness*.8 + .2)*100)/100; + var params = {fillColor: color, fillOpacity: fill_opacity, radius: data.portal.options.radius+1}; + if(resCount<8) + { + params["dashArray"] = "4,6"; + } + data.portal.setStyle(params); + } + } +} + +var setup = function() { + window.addHook('portalAdded', window.plugin.portalWeakness.portalAdded); + window.COLOR_SELECTED_PORTAL = '#f0f'; +} + +// 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);