diff --git a/code/map_data.js b/code/map_data.js index ea55e0f5..118172fa 100644 --- a/code/map_data.js +++ b/code/map_data.js @@ -559,11 +559,8 @@ window.renderField = function(ent) { fillOpacity: 0.25, stroke: false, clickable: false, - smoothFactor: 10, - vertices: ent[2].capturedRegion, - lastUpdate: ent[1], - guid: ent[0], - data: ent[2]}); + smoothFactor: 0, // hiding small fields will be handled below + guid: ent[0]}); // determine which fields are too small to be rendered and don’t // render them, so they don’t count towards the maximum fields limit. diff --git a/plugins/scoreboard.user.js b/plugins/scoreboard.user.js index 0ad5daa6..987cedb6 100644 --- a/plugins/scoreboard.user.js +++ b/plugins/scoreboard.user.js @@ -1,13 +1,13 @@ // ==UserScript== // @id iitc-plugin-scoreboard@vita10gy // @name iitc: show a localized scoreboard. -// @version 0.1 +// @version 0.1.1 // @namespace https://github.com/breunigs/ingress-intel-total-conversion // @updateURL https://raw.github.com/breunigs/ingress-intel-total-conversion/gh-pages/plugins/scoreboard.user.js // @downloadURL https://raw.github.com/breunigs/ingress-intel-total-conversion/gh-pages/plugins/scoreboard.user.js // @description A localized scoreboard. -// @include http://www.ingress.com/intel* -// @match http://www.ingress.com/intel* +// @include https://www.ingress.com/intel* +// @match https://www.ingress.com/intel* // ==/UserScript== function wrapper() { @@ -20,84 +20,205 @@ if(typeof window.plugin !== 'function') window.plugin = function() {}; // use own namespace for plugin window.plugin.scoreboard = function() {}; +window.plugin.scoreboard.scores = {}; +window.plugin.scoreboard.playerGuids = new Array(); -window.plugin.scoreboard.compileStats = function(){ - window.plugin.scoreboard.scores = {"team": {}, "player": {}}; - $.each(window.fields, function(qk, val) { - var team = val.options.data.controllingTeam.team; - var player = val.options.data.creator.creatorGuid; - //Init Team info - if(window.plugin.scoreboard.scores['team'][team] === undefined) { - window.plugin.scoreboard.scores['team'][team] = {}; - } - if(window.plugin.scoreboard.scores['team'][team]['mu'] === undefined) { - window.plugin.scoreboard.scores['team'][team]['mu'] = 0; - } - if(window.plugin.scoreboard.scores['team'][team]['count'] === undefined) { - window.plugin.scoreboard.scores['team'][team]['count'] = {}; - } - if(window.plugin.scoreboard.scores['team'][team]['count']['fields'] === undefined) { - window.plugin.scoreboard.scores['team'][team]['count']['fields'] = 0; - } - if(window.plugin.scoreboard.scores['team'][team]['largest'] === undefined) { - window.plugin.scoreboard.scores['team'][team]['largest'] = {}; - } - //Init Player info - if(window.plugin.scoreboard.scores['player'][player] === undefined) { - window.plugin.scoreboard.scores['player'][player] = {}; - } - if(window.plugin.scoreboard.scores['player'][player]['mu'] === undefined) { - window.plugin.scoreboard.scores['player'][player]['mu'] = 0; - } - if(window.plugin.scoreboard.scores['player'][player]['count'] === undefined) { - window.plugin.scoreboard.scores['player'][player]['count'] = {}; - } - if(window.plugin.scoreboard.scores['player'][player]['count']['fields'] === undefined) { - window.plugin.scoreboard.scores['player'][player]['count']['fields'] = 0; - } - if(window.plugin.scoreboard.scores['player'][player]['largest'] === undefined) { - window.plugin.scoreboard.scores['player'][player]['largest'] = {}; - } +window.plugin.scoreboard.resetTeam = function(team) { + var scores = window.plugin.scoreboard.scores['team']; + scores[team] = {}; + scores[team]['mu'] = 0; + scores[team]['count_fields'] = 0; + scores[team]['count_links'] = 0; + scores[team]['count_portals'] = 0; + scores[team]['count_resonators'] = 0; + scores[team]['largest'] = {}; +}; + +window.plugin.scoreboard.initPlayer = function(player, team) { + var scores = window.plugin.scoreboard.scores['player']; + if(scores[player] === undefined) { + scores[player] = {}; + scores[player]['team'] = team; + scores[player]['mu'] = 0; + scores[player]['count_fields'] = 0; + scores[player]['count_links'] = 0; + scores[player]['count_portals'] = 0; + scores[player]['count_resonators'] = 0; + // scores[player]['count_shields'] = 0; + scores[player]['largest'] = {}; + window.plugin.scoreboard.playerGuids.push(player); + } +} + +window.plugin.scoreboard.compileStats = function() { + var somethingInView = false; + window.plugin.scoreboard.playerGuids = new Array(); + window.plugin.scoreboard.scores = {'team': {}, 'player': {}}; + var scores = window.plugin.scoreboard.scores; + window.plugin.scoreboard.resetTeam(TEAM_RES); + window.plugin.scoreboard.resetTeam(TEAM_ENL); - - if(window.portals[val.options.vertices.vertexA.guid] !== undefined || - window.portals[val.options.vertices.vertexB.guid] !== undefined || - window.portals[val.options.vertices.vertexC.guid] !== undefined ) { + $.each(window.fields, function(qk, val) { + var team = getTeam(val.options.data); + var player = val.options.data.creator.creatorGuid; + + window.plugin.scoreboard.initPlayer(player,team); + + if(window.portals[val.options.vertices.vertexA.guid] !== undefined || + window.portals[val.options.vertices.vertexB.guid] !== undefined || + window.portals[val.options.vertices.vertexC.guid] !== undefined ) { - window.plugin.scoreboard.scores['team'][team]['mu'] += parseInt(val.options.data.entityScore.entityScore); - window.plugin.scoreboard.scores['player'][player]['mu'] += parseInt(val.options.data.entityScore.entityScore); - window.plugin.scoreboard.scores['team'][team]['count']['fields']++; - window.plugin.scoreboard.scores['player'][player]['count']['fields']++; - - if(window.plugin.scoreboard.scores['team'][team]['largest']['mu'] === undefined) { - window.plugin.scoreboard.scores['team'][team]['largest']['mu'] = val; - } - else if(window.plugin.scoreboard.scores['team'][team]['largest']['mu'].options.data.entityScore.entityScore < val.options.data.entityScore.entityScore) { - window.plugin.scoreboard.scores['team'][team]['largest']['mu'] = val; - } - - if(window.plugin.scoreboard.scores['player'][player]['largest']['mu'] === undefined) { - window.plugin.scoreboard.scores['player'][player]['largest']['mu'] = val; - } - else if(window.plugin.scoreboard.scores['player'][player]['largest']['mu'].options.data.entityScore.entityScore < val.options.data.entityScore.entityScore) { - window.plugin.scoreboard.scores['player'][player]['largest']['mu'] = val; - } - //console.log(val.options.data.controllingTeam.team); - //console.log(val.options.data.entityScore.entityScore); - //console.log(window.plugin.muTotal.portalAddress(window.portals[val.options.vertices.vertexA.guid])); - //console.log(window.plugin.muTotal.portalAddress(window.portals[val.options.vertices.vertexB.guid])); - //console.log(window.plugin.muTotal.portalAddress(window.portals[val.options.vertices.vertexC.guid])); + somethingInView = true; + scores['team'][team]['mu'] += parseInt(val.options.data.entityScore.entityScore); + scores['player'][player]['mu'] += parseInt(val.options.data.entityScore.entityScore); + scores['team'][team]['count_fields']++; + scores['player'][player]['count_fields']++; + + if(scores['team'][team]['largest']['mu'] === undefined) { + scores['team'][team]['largest']['mu'] = val; } + else if(scores['team'][team]['largest']['mu'].options.data.entityScore.entityScore < val.options.data.entityScore.entityScore) { + scores['team'][team]['largest']['mu'] = val; + } + if(scores['player'][player]['largest']['mu'] === undefined) { + scores['player'][player]['largest']['mu'] = val; + } + else if(scores['player'][player]['largest']['mu'].options.data.entityScore.entityScore < val.options.data.entityScore.entityScore) { + scores['player'][player]['largest']['mu'] = val; + } + } }); + $.each(window.links, function(qk, link) { + somethingInView = true; + var team = getTeam(link.options.data); + var player = link.options.data.creator.creatorGuid; + window.plugin.scoreboard.initPlayer(player, team); + scores['team'][team]['count_links']++; + scores['player'][player]['count_links']++; + }); + $.each(window.portals, function(qk, portal) { + somethingInView = true; + var team = getTeam(portal.options.details); + var player = portal.options.details.captured.capturingPlayerId; + window.plugin.scoreboard.initPlayer(player, team); + scores['team'][team]['count_portals']++; + scores['player'][player]['count_portals']++; + + //$.each(portal.options.details.portalV2.linkedModArray, function(ind, mod) { + // if(mod !== null) { + // somethingInView = true; + // scores['team'][team]['count_shields']++; + // scores['player'][mod.installingUser]['count_shields']++; + // } + //}); + + $.each(portal.options.details.resonatorArray.resonators, function(ind, reso) { + if(reso !== null) { + somethingInView = true; + window.plugin.scoreboard.initPlayer(reso.ownerGuid, team); + scores['team'][team]['count_resonators']++; + scores['player'][reso.ownerGuid]['count_resonators']++; + } + }); + }); + window.plugin.scoreboard.playerGuids.sort(window.plugin.scoreboard.sortPlayerList); + return somethingInView; +}; + +window.plugin.scoreboard.sortPlayerList = function(a, b) { + var retVal = 0; + if(window.getPlayerName(a).toLowerCase() < window.getPlayerName(b).toLowerCase()) { + retVal = -1; + } else { + retVal = 1; + } + return retVal; +}; + +window.plugin.scoreboard.percentSpan = function(percent, cssClass) { + var retVal = ''; + if(percent > 0) { + retVal += ''; + if(percent >= 7) { //anything less than this and the text doesnt fit in the span. + retVal += percent; + } + retVal += '%'; + } + return retVal; +}; + +window.plugin.scoreboard.teamTableRow = function(field,title) { + var scores = window.plugin.scoreboard.scores['team']; + var retVal = '' + + title + + '' + + scores[TEAM_RES][field] + + '' + + scores[TEAM_ENL][field] + + '' + + (scores[TEAM_RES][field] + scores[TEAM_ENL][field]) + + ''; + return retVal; +}; + +window.plugin.scoreboard.playerTableRow = function(playerGuid) { + var scores = window.plugin.scoreboard.scores['player']; + var retVal = '' + + window.getPlayerName(playerGuid); + + ''; + + $.each(['mu','count_fields','count_links','count_portals','count_resonators'], function(i, field) { + retVal += '' + + scores[playerGuid][field] + + ''; + }); + retVal += ''; + return retVal; }; window.plugin.scoreboard.display = function() { - window.plugin.scoreboard.compileStats(); - console.log(window.plugin.scoreboard.scores); - $('#scoreboard').html(JSON.stringify(window.plugin.scoreboard.scores)); - $( "#scoreboard" ).dialog({ autoOpen: true, - modal: true, - buttons: [ { text: "Close", click: function() { $( this ).dialog( "close" ); } } ]}); + + var somethingInView = window.plugin.scoreboard.compileStats(); + + var resMu = window.plugin.scoreboard.scores['team'][TEAM_RES]['mu']; + var enlMu = window.plugin.scoreboard.scores['team'][TEAM_ENL]['mu']; + + var scoreHtml = ''; + if(somethingInView) { + + if(resMu + enlMu > 0) { + var resMuPercent = Math.round((resMu / (resMu + enlMu)) * 100); + scoreHtml += '
' + + window.plugin.scoreboard.percentSpan(resMuPercent, 'res') + + window.plugin.scoreboard.percentSpan(100-resMuPercent, 'enl') + + '
'; + } + + scoreHtml += '' + + ''; + scoreHtml += window.plugin.scoreboard.teamTableRow('mu','Mu'); + scoreHtml += window.plugin.scoreboard.teamTableRow('count_fields','Fields'); + scoreHtml += window.plugin.scoreboard.teamTableRow('count_links','Links'); + scoreHtml += window.plugin.scoreboard.teamTableRow('count_portals','Portals'); + scoreHtml += window.plugin.scoreboard.teamTableRow('count_resonators','Resonators'); + scoreHtml += '
ResistanceEnlightenedTotal
'; + + scoreHtml += '' + + ''; + $.each(window.plugin.scoreboard.playerGuids, function(index, guid) { + scoreHtml += window.plugin.scoreboard.playerTableRow(guid); + }); + scoreHtml += '
PlayerMuFieldsLinksPortalsResonators
'; + + scoreHtml += '
Score is subject to portals available based on zoom level. If names are unresolved try again. For best results wait until updates are fully loaded.
'; + } else { + scoreHtml += 'You need something in view.'; + } + + alert('
' + scoreHtml + '
'); + $(".ui-dialog").addClass('ui-dialog-scoreboard'); } var setup = function() { @@ -105,6 +226,16 @@ var setup = function() { $('body').append(''); $('#toolbox').append('scoreboard'); + $('head').append(''); }