From de1d02f9eb93ef05fa45f54aa33cc909769f2796 Mon Sep 17 00:00:00 2001 From: Hollow011 Date: Mon, 18 Feb 2013 18:31:14 -0800 Subject: [PATCH] Create compute_AP_stats.user.js Plugin calculates the total potential AP based on what is currently rendered in the map (leaflet objects) --- plugins/compute_AP_stats.user.js | 132 +++++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 plugins/compute_AP_stats.user.js diff --git a/plugins/compute_AP_stats.user.js b/plugins/compute_AP_stats.user.js new file mode 100644 index 00000000..b87a6bd9 --- /dev/null +++ b/plugins/compute_AP_stats.user.js @@ -0,0 +1,132 @@ +// ==UserScript== +// @id iitc-plugin-compute-ap-stats@breunigs +// @name iitc: Compute AP statistics +// @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/compute_AP_stats.user.js +// @downloadURL https://raw.github.com/breunigs/ingress-intel-total-conversion/gh-pages/plugins/compute_AP_stats.user.js +// @description Tries to determine overal AP stats for the current zoom +// @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.compAPStats = function() {}; + +window.plugin.compAPStats.setupCallback = function() { + $('#toolbox').append('Compute AP Stats '); +} + +window.plugin.compAPStats.compAPStats = function() { + var DESTROY_RESONATOR = 75; //AP for destroying portal + var DESTROY_LINK = 187; //AP for destroying link + var DESTROY_FIELD = 750; //AP for destroying field + var CAPTURE_PORTAL = 500; //AP for capturing a portal + var DEPLOY_RESONATOR = 125; //AP for deploying a resonator + var COMPLETION_BONUS = 250; //AP for deploying all resonators on portal + + var totalAP_RES = 0; + var totalAP_ENL = 0; + + //Grab every portal in the viewable area and compute individual AP stats + $.each(window.portals, function(ind, portal) { + var d = portal.options.details + var resoCount = 0; + + //This code lovingly copied and chopped from parent plugin func getDestroyAP(); + /////////////////////////////////////////////////////////////////////////// + $.each(d.resonatorArray.resonators, function(ind, reso) { + if(!reso) return true; + resoCount += 1; + }); + + //We'll count fields/links below so we don't duplicate AP + //var linkCount = d.portalV2.linkedEdges ? d.portalV2.linkedEdges.length : 0; + //var fieldCount = d.portalV2.linkedFields ? d.portalV2.linkedFields.length : 0; + + var resoAp = resoCount * DESTROY_RESONATOR; + //var linkAp = linkCount * DESTROY_LINK; + //var fieldAp = fieldCount * DESTROY_FIELD; + var sum = resoAp + CAPTURE_PORTAL + 8*DEPLOY_RESONATOR + COMPLETION_BONUS; + /////////////////////////////////////////////////////////////////////////// + + //Team1 is a Res portal, Team2 is a Enl portal + if ( getTeam(d) == 1 ) + totalAP_ENL += sum; + else if ( getTeam(d) == 2 ) + totalAP_RES += sum; + else { //it's a neutral portal, potential for both teams + totalAP_ENL += sum; + totalAP_RES += sum; + } + }); + + //Compute team field AP + $.each(window.fields, function(ind, field) { + //This is a hack that extrapolates the team based on the fill color of a field + //Yes, I know it's painful. We'd have an easier time if they would embed the + //filed details in the leaflet object like they do for portals. + var color = field.options.fillColor; //pukes out a string *sigh* + var team = 0; + + if( color == '#0088FF' ) //color is RES + totalAP_ENL += DESTROY_FIELD; + else if( color == '#03FE03' ) //color is Enl + totalAP_RES += DESTROY_FIELD; + }); + + //Compute team Link AP + $.each(window.links, function(ind, link) { + //This is a hack that extrapolates the team based on the fill color of a link + //Yes, I know it's painful. We'd have an easier time if they would embed the + //filed details in the leaflet object like they do for portals. + var color = link.options.color; //pukes out a string *sigh* + + var team = 0; + + if( color == '#0088FF' ) //color is RES + totalAP_ENL += DESTROY_LINK; + else if( color == '#03FE03' ) //color is Enl + totalAP_RES += DESTROY_LINK; + }); + + return [totalAP_RES, totalAP_ENL]; +} + +window.plugin.compAPStats.guess = function() { + var totalAP_RES = window.plugin.compAPStats.compAPStats()[0]; + var totalAP_ENL = window.plugin.compAPStats.compAPStats()[1]; + + var s = 'Total AP for viewable area:\n\n'; + s += 'Possible Resistance AP: ' + totalAP_RES + '\n'; + s += 'Possible Enlightened AP: ' + totalAP_ENL + '\n'; + + alert(s); +} + +var setup = function() { + window.plugin.compAPStats.setupCallback(); +} + +// 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);