Conflicts:
	plugins/max-links.user.js
This commit is contained in:
boombuler 2013-02-25 10:22:59 +01:00
commit b8a86f8d08
11 changed files with 65 additions and 53 deletions

View File

@ -63,7 +63,7 @@ Contributing
Please do! 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:** **So far, these people have contributed:**

View File

@ -33,7 +33,7 @@ The chat is split up into several categories. It usually only shows messages for
**The chat categories are:** **The chat categories are:**
- full: shows all automated messages *(23:57 \<apj\> destroyed an L3 Resonator on Two Spikes)* - full: shows all automated messages *(23:57 \<apj\> destroyed an L3 Resonator on Two Spikes)*
- compact: shows only the latest automated message per user - 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) - faction: shows messages for own faction (e.g. only Resistance can read Resistance messages)
**Posting 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. “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. - 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. - 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. - 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. - links: shows incoming and outgoing links. The tooltip explains the icons.

View File

@ -58,10 +58,6 @@ window.setupMap = function() {
{zoomControl: !(localStorage['iitc.zoom.buttons'] === 'false')} {zoomControl: !(localStorage['iitc.zoom.buttons'] === 'false')}
)); ));
try {
map.addLayer(views[readCookie('ingress.intelmap.type')]);
} catch(e) { map.addLayer(views[0]); }
var addLayers = {}; var addLayers = {};
portalsLayers = []; portalsLayers = [];
@ -91,6 +87,14 @@ window.setupMap = function() {
}, addLayers); }, addLayers);
map.addControl(window.layerChooser); 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(''); map.attributionControl.setPrefix('');
// listen for changes and store them in cookies // listen for changes and store them in cookies
map.on('moveend', window.storeMapPosition); map.on('moveend', window.storeMapPosition);

View File

@ -15,7 +15,7 @@ window.updateGameScore = function(data) {
var es = '<span class="enl" style="width:'+ep+'%;">&nbsp;'+Math.round(ep)+'%</span>'; var es = '<span class="enl" style="width:'+ep+'%;">&nbsp;'+Math.round(ep)+'%</span>';
$('#gamestat').html(rs+es).one('click', function() { window.updateGameScore() }); $('#gamestat').html(rs+es).one('click', function() { window.updateGameScore() });
// help cursor via “#gamestat span” // 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); window.setTimeout('window.updateGameScore', REFRESH_GAME_SCORE*1000);
} }

View File

@ -43,16 +43,13 @@
// redrawn. It is called early on in the // redrawn. It is called early on in the
// code/map_data.js#renderPortal as long as there was an // code/map_data.js#renderPortal as long as there was an
// old portal for the guid. // 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._hooks = {}
window.VALID_HOOKS = ['portalAdded', 'portalDetailsUpdated', window.VALID_HOOKS = ['portalAdded', 'portalDetailsUpdated',
'publicChatDataAvailable', 'portalDataLoaded', 'beforePortalReRender', 'publicChatDataAvailable', 'portalDataLoaded', 'beforePortalReRender'];
'checkRenderLimit'];
window.runHooks = function(event, data) { window.runHooks = function(event, data) {
if(VALID_HOOKS.indexOf(event) === -1) throw('Unknown event type: ' + event); if(VALID_HOOKS.indexOf(event) === -1) throw('Unknown event type: ' + event);

View File

@ -26,7 +26,10 @@ window.renderPortalDetails = function(guid) {
: null; : null;
var playerText = player ? ['owner', player] : null; var playerText = player ? ['owner', player] : null;
var time = d.captured ? unixTimeToString(d.captured.capturedTime) : null; var time = d.captured
? '<span title="' + unixTimeToString(d.captured.capturedTime, true) + '">'
+ unixTimeToString(d.captured.capturedTime) + '</span>'
: null;
var sinceText = time ? ['since', time] : null; var sinceText = time ? ['since', time] : null;
var linkedFields = ['fields', d.portalV2.linkedFields.length]; var linkedFields = ['fields', d.portalV2.linkedFields.length];

View File

@ -117,6 +117,7 @@ window.getPaddedBounds = function() {
window._storedPaddedBounds = null; window._storedPaddedBounds = null;
}); });
} }
if(renderLimitReached(0.7)) return window.map.getBounds();
if(window._storedPaddedBounds) return window._storedPaddedBounds; if(window._storedPaddedBounds) return window._storedPaddedBounds;
var p = window.map.getBounds().pad(VIEWPORT_PAD_RATIO); var p = window.map.getBounds().pad(VIEWPORT_PAD_RATIO);
@ -124,13 +125,17 @@ window.getPaddedBounds = function() {
return p; return p;
} }
window.renderLimitReached = function() { // returns true if the render limit has been reached. The default ratio
if(Object.keys(portals).length >= MAX_DRAWN_PORTALS) return true; // is 1, which means it will tell you if there are more items drawn than
if(Object.keys(links).length >= MAX_DRAWN_LINKS) return true; // acceptable. A value of 0.9 will tell you if 90% of the amount of
if(Object.keys(fields).length >= MAX_DRAWN_FIELDS) return true; // acceptable entities have been drawn. You can use this to heuristi-
var param = { 'reached': false }; // cally detect if the render limit will be hit.
window.runHooks('checkRenderLimit', param); window.renderLimitReached = function(ratio) {
return param.reached; 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() { window.getMinPortalLevel = function() {

View File

@ -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. - [**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) - [**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. - [**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. - [**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 theres a tooltip that shows the data in a table. [View screenshot](http://breunigs.github.com/ingress-intel-total-conversion/screenshots/plugin_player_tracker.png). - [**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 theres 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. - [**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.

View File

@ -88,7 +88,7 @@ window.plugin.guessPlayerLevels.guess = function() {
}); });
var s = 'the players have at least the following level:\n\n'; var s = 'the players have at least the following level:\n\n';
s += 'Resistance:\t&nbsp;&nbsp;&nbsp;\tEnlightenment:\t\n'; s += 'Resistance:\t&nbsp;&nbsp;&nbsp;\tEnlightened:\t\n';
var namesR = plugin.guessPlayerLevels.sort(playersRes); var namesR = plugin.guessPlayerLevels.sort(playersRes);
var namesE = plugin.guessPlayerLevels.sort(playersEnl); var namesE = plugin.guessPlayerLevels.sort(playersEnl);

View File

@ -30,8 +30,6 @@ function wrapper() {
}; };
var delaunayScriptLocation = "https://raw.github.com/breunigs/ingress-intel-total-conversion/gh-pages/dist/delaunay.js"; var delaunayScriptLocation = "https://raw.github.com/breunigs/ingress-intel-total-conversion/gh-pages/dist/delaunay.js";
window.plugin.maxLinks.layer = null; window.plugin.maxLinks.layer = null;
var updating = false; var updating = false;
@ -67,7 +65,7 @@ function wrapper() {
renderLimitReached = false; renderLimitReached = false;
$.each(triangles, function(idx, triangle) { $.each(triangles, function(idx, triangle) {
if (drawnLinks <= window.plugin.maxLinks.MAX_DRAWN_LINKS) { 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; drawnLinks += 3;
} else { } else {
renderLimitReached = true; renderLimitReached = true;

View File

@ -1,11 +1,11 @@
// ==UserScript== // ==UserScript==
// @id iitc-plugin-show-portal-weakness@vita10gy // @id iitc-plugin-show-portal-weakness@vita10gy
// @name iitc: show portal weakness // @name iitc: show portal weakness
// @version 0.2 // @version 0.3
// @namespace https://github.com/breunigs/ingress-intel-total-conversion // @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 // @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 // @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* // @include http://www.ingress.com/intel*
// @match http://www.ingress.com/intel* // @match http://www.ingress.com/intel*
// ==/UserScript== // ==/UserScript==
@ -24,46 +24,51 @@ window.plugin.portalWeakness.portalAdded = function(data) {
var d = data.portal.options.details; var d = data.portal.options.details;
var portal_weakness = 0; var portal_weakness = 0;
if(getTeam(d) != 0) if(getTeam(d) !== 0) {
{ var only_shields = true;
if(window.getTotalPortalEnergy(d)> 0 && window.getCurrentPortalEnergy(d) < window.getTotalPortalEnergy(d)) var missing_shields = 0;
{ if(window.getTotalPortalEnergy(d) > 0 && window.getCurrentPortalEnergy(d) < window.getTotalPortalEnergy(d)) {
portal_weakness = 1 - (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. //Ding the portal for every missing sheild.
$.each(d.portalV2.linkedModArray, function(ind, mod) $.each(d.portalV2.linkedModArray, function(ind, mod) {
{ if(mod === null) {
if(mod == null) missing_shields++;
{ portal_weakness += .08;
portal_weakness += .03;
} }
}); });
//Ding the portal for every missing resonator. //Ding the portal for every missing resonator.
var resCount = 0; var resCount = 0;
$.each(d.resonatorArray.resonators, function(ind, reso) $.each(d.resonatorArray.resonators, function(ind, reso) {
{ if(reso === null) {
if(reso == null) {
portal_weakness += .125; portal_weakness += .125;
} only_shields = false;
else { } else {
resCount++; resCount++;
} }
}); });
if(portal_weakness < 0) { if(portal_weakness < 0) {
portal_weakness = 0; portal_weakness = 0;
} }
if(portal_weakness>1) if(portal_weakness > 1) {
{
portal_weakness = 1; portal_weakness = 1;
} }
if(portal_weakness>0) if(portal_weakness > 0) {
{ var fill_opacity = portal_weakness*.7 + .3;
var color = 'red'; var color = 'orange';
var fill_opacity = Math.round((portal_weakness*.8 + .2)*100)/100; if(only_shields) {
var params = {fillColor: color, fillOpacity: fill_opacity, radius: data.portal.options.radius+1}; color = 'yellow';
if(resCount<8) //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 // Hole per missing resonator
var dash = new Array(8-resCount + 1).join("1,4,") + "100,0" var dash = new Array(8-resCount + 1).join("1,4,") + "100,0"
params["dashArray"] = dash; params["dashArray"] = dash;