diff --git a/README.md b/README.md index 2bbea048..6c22e26e 100644 --- a/README.md +++ b/README.md @@ -63,7 +63,7 @@ Contributing Please do! -(Obviously, Resistance folks must send in complete patches while Enlightenment gals and guys may just open feature request ☺). If you want to hack the source, please [read HACKING.md for details](https://github.com/breunigs/ingress-intel-total-conversion/blob/gh-pages/HACKING.md) . +(Obviously, Resistance folks must send in complete patches while Enlightened gals and guys may just open feature request ☺). If you want to hack the source, please [read HACKING.md for details](https://github.com/breunigs/ingress-intel-total-conversion/blob/gh-pages/HACKING.md) . **So far, these people have contributed:** diff --git a/USERGUIDE.md b/USERGUIDE.md index c345ab4b..a1ffd673 100644 --- a/USERGUIDE.md +++ b/USERGUIDE.md @@ -33,7 +33,7 @@ The chat is split up into several categories. It usually only shows messages for **The chat categories are:** - full: shows all automated messages *(23:57 \ destroyed an L3 Resonator on Two Spikes)* - compact: shows only the latest automated message per user -- public: shows user generated public messages (both Enlightenment and Resistance can read it) +- public: shows user generated public messages (both Enlightened and Resistance can read it) - faction: shows messages for own faction (e.g. only Resistance can read Resistance messages) **Posting messages:** @@ -117,7 +117,7 @@ Starting from the top, the sidebar shows this information: “Random Details” are displayed in four columns. The outer ones show the data while the inner ones are the titles. - owner: who deployed the first resonator after it has been neutral/unclaimed. -- since: when was the first resonator deployed after it has been neutral/unclaimed. +- since: when was the first resonator deployed after it has been neutral/unclaimed. The reasonators decay every 24hrs from capture. Move the cursor over it to show the full date time. - range: shows how far links made from this portal can be. Click on the value to zoom out to link range. The red circle shows how far links may reach. - energy: shows current and maximum energy if fully charged. The tooltip contains the exact numbers. - links: shows incoming and outgoing links. The tooltip explains the icons. diff --git a/code/boot.js b/code/boot.js index 70542bab..4f231010 100644 --- a/code/boot.js +++ b/code/boot.js @@ -58,10 +58,6 @@ window.setupMap = function() { {zoomControl: !(localStorage['iitc.zoom.buttons'] === 'false')} )); - try { - map.addLayer(views[readCookie('ingress.intelmap.type')]); - } catch(e) { map.addLayer(views[0]); } - var addLayers = {}; portalsLayers = []; @@ -91,6 +87,14 @@ window.setupMap = function() { }, addLayers); map.addControl(window.layerChooser); + + // set the map AFTER adding the layer chooser, or Chrome reorders the + // layers. This likely leads to broken layer selection because the + // views/cookie order does not match the layer chooser order. + try { + map.addLayer(views[readCookie('ingress.intelmap.type')]); + } catch(e) { map.addLayer(views[0]); } + map.attributionControl.setPrefix(''); // listen for changes and store them in cookies map.on('moveend', window.storeMapPosition); diff --git a/code/game_status.js b/code/game_status.js index fe29b868..907d76e3 100644 --- a/code/game_status.js +++ b/code/game_status.js @@ -15,7 +15,7 @@ window.updateGameScore = function(data) { var es = ' '+Math.round(ep)+'%'; $('#gamestat').html(rs+es).one('click', function() { window.updateGameScore() }); // help cursor via “#gamestat span” - $('#gamestat').attr('title', 'Resistance:\t'+r+' MindUnits\nEnlightenment:\t'+e+' MindUnits'); + $('#gamestat').attr('title', 'Resistance:\t'+r+' MindUnits\nEnlightened:\t'+e+' MindUnits'); window.setTimeout('window.updateGameScore', REFRESH_GAME_SCORE*1000); } diff --git a/code/hooks.js b/code/hooks.js index 8bef1098..92840b7c 100644 --- a/code/hooks.js +++ b/code/hooks.js @@ -43,16 +43,13 @@ // redrawn. It is called early on in the // code/map_data.js#renderPortal as long as there was an // old portal for the guid. -// checkRenderLimit: callback is passed the argument of -// {reached : false} to indicate that the renderlimit is reached -// set reached to true. + window._hooks = {} window.VALID_HOOKS = ['portalAdded', 'portalDetailsUpdated', - 'publicChatDataAvailable', 'portalDataLoaded', 'beforePortalReRender', - 'checkRenderLimit']; + 'publicChatDataAvailable', 'portalDataLoaded', 'beforePortalReRender']; window.runHooks = function(event, data) { if(VALID_HOOKS.indexOf(event) === -1) throw('Unknown event type: ' + event); diff --git a/code/portal_detail_display.js b/code/portal_detail_display.js index ffd653c9..f930d5ca 100644 --- a/code/portal_detail_display.js +++ b/code/portal_detail_display.js @@ -26,7 +26,10 @@ window.renderPortalDetails = function(guid) { : null; var playerText = player ? ['owner', player] : null; - var time = d.captured ? unixTimeToString(d.captured.capturedTime) : null; + var time = d.captured + ? '' + + unixTimeToString(d.captured.capturedTime) + '' + : null; var sinceText = time ? ['since', time] : null; var linkedFields = ['fields', d.portalV2.linkedFields.length]; diff --git a/code/utils_misc.js b/code/utils_misc.js index 6638955f..e208fcc0 100644 --- a/code/utils_misc.js +++ b/code/utils_misc.js @@ -117,6 +117,7 @@ window.getPaddedBounds = function() { window._storedPaddedBounds = null; }); } + if(renderLimitReached(0.7)) return window.map.getBounds(); if(window._storedPaddedBounds) return window._storedPaddedBounds; var p = window.map.getBounds().pad(VIEWPORT_PAD_RATIO); @@ -124,13 +125,17 @@ window.getPaddedBounds = function() { return p; } -window.renderLimitReached = function() { - if(Object.keys(portals).length >= MAX_DRAWN_PORTALS) return true; - if(Object.keys(links).length >= MAX_DRAWN_LINKS) return true; - if(Object.keys(fields).length >= MAX_DRAWN_FIELDS) return true; - var param = { 'reached': false }; - window.runHooks('checkRenderLimit', param); - return param.reached; +// returns true if the render limit has been reached. The default ratio +// is 1, which means it will tell you if there are more items drawn than +// acceptable. A value of 0.9 will tell you if 90% of the amount of +// acceptable entities have been drawn. You can use this to heuristi- +// cally detect if the render limit will be hit. +window.renderLimitReached = function(ratio) { + ratio = ratio || 1; + if(Object.keys(portals).length*ratio >= MAX_DRAWN_PORTALS) return true; + if(Object.keys(links).length*ratio >= MAX_DRAWN_LINKS) return true; + if(Object.keys(fields).length*ratio >= MAX_DRAWN_FIELDS) return true; + return false; } window.getMinPortalLevel = function() { diff --git a/plugins/README.md b/plugins/README.md index 0dc4f5da..86280f0e 100644 --- a/plugins/README.md +++ b/plugins/README.md @@ -12,7 +12,7 @@ Available Plugins - [**Compute AP Stats**](https://raw.github.com/breunigs/ingress-intel-total-conversion/gh-pages/plugins/compute-ap-stats.user.js) Shows the potential AP an agent could obtain by destroying and rebuilding all the portals in the current zoom area. - [**Draw Tools**](https://raw.github.com/breunigs/ingress-intel-total-conversion/gh-pages/plugins/draw-tools.user.js) allows to draw circles and lines on the map to aid you with planning your next big field. [View screenshot](http://breunigs.github.com/ingress-intel-total-conversion/screenshots/plugin_draw_tools.png) - [**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 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. +- [**Highlight Weakened Portals**](https://raw.github.com/breunigs/ingress-intel-total-conversion/gh-pages/plugins/show-portal-weakness.user.js) fill portals with red 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. Red, needs energy and shields. Orange, only needs energy (either recharge or resonators). Yellow, only needs shields. - [**Max-Links**]((https://raw.github.com/breunigs/ingress-intel-total-conversion/gh-pages/plugins/max-links.user.js) Calculates how to link the portals to create the maximum number of fields. - [**Player Tracker**](https://raw.github.com/breunigs/ingress-intel-total-conversion/gh-pages/plugins/player-tracker.user.js) Draws trails for user actions in the last hour. At the last known location there’s a tooltip that shows the data in a table. [View screenshot](http://breunigs.github.com/ingress-intel-total-conversion/screenshots/plugin_player_tracker.png). - [**Render Limit Increase**](https://raw.github.com/breunigs/ingress-intel-total-conversion/gh-pages/plugins/render-limit-increase.user.js) increases render limits. Good for high density areas (e.g. London, UK) and faster PCs. diff --git a/plugins/guess-player-levels.user.js b/plugins/guess-player-levels.user.js index e8249042..6d987894 100644 --- a/plugins/guess-player-levels.user.js +++ b/plugins/guess-player-levels.user.js @@ -88,7 +88,7 @@ window.plugin.guessPlayerLevels.guess = function() { }); var s = 'the players have at least the following level:\n\n'; - s += 'Resistance:\t   \tEnlightenment:\t\n'; + s += 'Resistance:\t   \tEnlightened:\t\n'; var namesR = plugin.guessPlayerLevels.sort(playersRes); var namesE = plugin.guessPlayerLevels.sort(playersEnl); diff --git a/plugins/max-links.user.js b/plugins/max-links.user.js index 3f435897..86a86447 100644 --- a/plugins/max-links.user.js +++ b/plugins/max-links.user.js @@ -29,14 +29,12 @@ function wrapper() { smoothFactor: 10 }; var delaunayScriptLocation = "https://raw.github.com/breunigs/ingress-intel-total-conversion/gh-pages/dist/delaunay.js"; - - window.plugin.maxLinks.layer = null; var updating = false; var renderLimitReached = false; - + window.plugin.maxLinks.updateLayer = function() { if (updating || window.plugin.maxLinks.layer === null || !window.map.hasLayer(window.plugin.maxLinks.layer)) return; @@ -67,7 +65,7 @@ function wrapper() { renderLimitReached = false; $.each(triangles, function(idx, triangle) { if (drawnLinks <= window.plugin.maxLinks.MAX_DRAWN_LINKS) { - triangle.draw(window.plugin.maxLinks.layer, minX, minY); + triangle.draw(window.plugin.maxLinks.layer, minX, minY) drawnLinks += 3; } else { renderLimitReached = true; diff --git a/plugins/show-portal-weakness.user.js b/plugins/show-portal-weakness.user.js index 332605d8..3e272dde 100644 --- a/plugins/show-portal-weakness.user.js +++ b/plugins/show-portal-weakness.user.js @@ -1,11 +1,11 @@ // ==UserScript== // @id iitc-plugin-show-portal-weakness@vita10gy // @name iitc: show portal weakness -// @version 0.2 +// @version 0.3 // @namespace https://github.com/breunigs/ingress-intel-total-conversion // @updateURL https://raw.github.com/breunigs/ingress-intel-total-conversion/gh-pages/plugins/show-portal-weakness.user.js // @downloadURL https://raw.github.com/breunigs/ingress-intel-total-conversion/gh-pages/plugins/show-portal-weakness.user.js -// @description Uses the fill color of the portals to denote if the portal is weak (Needs recharging, missing a resonator, needs shields) +// @description Uses the fill color of the portals to denote if the portal is weak (Needs recharging, missing a resonator, needs shields) Red, needs energy and shields. Orange, only needs energy (either recharge or resonators). Yellow, only needs shields. // @include http://www.ingress.com/intel* // @match http://www.ingress.com/intel* // ==/UserScript== @@ -24,46 +24,51 @@ 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)) - { + if(getTeam(d) !== 0) { + var only_shields = true; + var missing_shields = 0; + if(window.getTotalPortalEnergy(d) > 0 && window.getCurrentPortalEnergy(d) < window.getTotalPortalEnergy(d)) { portal_weakness = 1 - (window.getCurrentPortalEnergy(d)/window.getTotalPortalEnergy(d)); + only_shields = false; } //Ding the portal for every missing sheild. - $.each(d.portalV2.linkedModArray, function(ind, mod) - { - if(mod == null) - { - portal_weakness += .03; + $.each(d.portalV2.linkedModArray, function(ind, mod) { + if(mod === null) { + missing_shields++; + portal_weakness += .08; } }); //Ding the portal for every missing resonator. var resCount = 0; - $.each(d.resonatorArray.resonators, function(ind, reso) - { - if(reso == null) { + $.each(d.resonatorArray.resonators, function(ind, reso) { + if(reso === null) { portal_weakness += .125; - } - else { + only_shields = false; + } else { resCount++; } }); - if(portal_weakness<0) { + if(portal_weakness < 0) { portal_weakness = 0; } - if(portal_weakness>1) - { + 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) - { + if(portal_weakness > 0) { + var fill_opacity = portal_weakness*.7 + .3; + var color = 'orange'; + if(only_shields) { + color = 'yellow'; + //If only shields are missing, make portal yellow + // but fill more than usual since pale yellow is basically invisible + fill_opacity = missing_shields*.15 + .1; + } else if(missing_shields > 0) { + color = 'red'; + } + fill_opacity = Math.round(fill_opacity*100)/100; + var params = {fillColor: color, fillOpacity: fill_opacity}; + if(resCount < 8) { // Hole per missing resonator var dash = new Array(8-resCount + 1).join("1,4,") + "100,0" params["dashArray"] = dash;