From 9498e1faa837d7f2bd639f111db809f5f67e564c Mon Sep 17 00:00:00 2001 From: vita10gy Date: Fri, 22 Mar 2013 00:41:17 -0500 Subject: [PATCH] Scoreboard Update: Link Length, Field Area --- plugins/scoreboard.user.js | 141 +++++++++++++++++++++++++++++++------ 1 file changed, 121 insertions(+), 20 deletions(-) diff --git a/plugins/scoreboard.user.js b/plugins/scoreboard.user.js index b3239271..92528b3a 100644 --- a/plugins/scoreboard.user.js +++ b/plugins/scoreboard.user.js @@ -1,7 +1,7 @@ // ==UserScript== // @id iitc-plugin-scoreboard@vita10gy // @name IITC plugin: show a localized scoreboard. -// @version 0.1.4.@@DATETIMEVERSION@@ +// @version 0.1.5.@@DATETIMEVERSION@@ // @namespace https://github.com/jonatkins/ingress-intel-total-conversion // @updateURL @@UPDATEURL@@ // @downloadURL @@DOWNLOADURL@@ @@ -33,6 +33,8 @@ window.plugin.scoreboard.resetTeam = function(team) { scores[team]['count_links'] = 0; scores[team]['count_portals'] = 0; scores[team]['count_resonators'] = 0; + scores[team]['link_length'] = 0; + scores[team]['field_area'] = 0; scores[team]['largest'] = {}; }; @@ -46,6 +48,9 @@ window.plugin.scoreboard.initPlayer = function(player, team) { scores[player]['count_links'] = 0; scores[player]['count_portals'] = 0; scores[player]['count_resonators'] = 0; + scores[player]['link_length'] = 0; + scores[player]['field_area'] = 0; + // scores[player]['count_shields'] = 0; scores[player]['largest'] = {}; window.plugin.scoreboard.playerGuids.push(player); @@ -61,6 +66,7 @@ window.plugin.scoreboard.compileStats = function() { window.plugin.scoreboard.resetTeam(TEAM_ENL); $.each(window.fields, function(qk, val) { + var team = getTeam(val.options.data); var player = val.options.data.creator.creatorGuid; @@ -71,23 +77,33 @@ window.plugin.scoreboard.compileStats = function() { window.portals[val.options.vertices.vertexB.guid] !== undefined || window.portals[val.options.vertices.vertexC.guid] !== undefined ) { + var fieldArea = window.plugin.scoreboard.fieldArea(val); 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']++; - + scores['team'][team]['field_area'] += fieldArea; + scores['player'][player]['field_area'] += fieldArea; + val.options.data.fieldArea = fieldArea; var largestMu = scores['team'][team]['largest']['mu']; if(largestMu === undefined || parseInt(largestMu.options.data.entityScore.entityScore) < parseInt(val.options.data.entityScore.entityScore)) { largestMu = val; } scores['team'][team]['largest']['mu'] = largestMu; - var largestMu = scores['player'][player]['largest']['mu']; - if(largestMu === undefined || parseInt(largestMu.options.data.entityScore.entityScore) < parseInt(val.options.data.entityScore.entityScore)) { - largestMu = val; + //var largestMu = scores['player'][player]['largest']['mu']; + //if(largestMu === undefined || parseInt(largestMu.options.data.entityScore.entityScore) < parseInt(val.options.data.entityScore.entityScore)) { + // largestMu = val; + //} + //scores['player'][player]['largest']['mu'] = largestMu; + + var largestArea = scores['team'][team]['largest']['field_area']; + if(largestArea === undefined || largestArea.options.data.fieldArea < val.options.data.fieldArea) { + largestArea = val; } - scores['player'][player]['largest']['mu'] = largestMu; + scores['team'][team]['largest']['field_area'] = largestArea; + } }); $.each(window.links, function(qk, link) { @@ -97,9 +113,29 @@ window.plugin.scoreboard.compileStats = function() { window.plugin.scoreboard.initPlayer(player, team); scores['team'][team]['count_links']++; scores['player'][player]['count_links']++; + + var linkLength = window.plugin.scoreboard.portalDistance(link.options.data.edge.destinationPortalLocation,link.options.data.edge.originPortalLocation); + scores['team'][team]['link_length'] += linkLength; + scores['player'][player]['link_length'] += linkLength; + + var largestLink = scores['team'][team]['largest']['link']; + if(largestLink === undefined || largestLink.distance < linkLength) { + largestLink = {}; + largestLink.distance = linkLength; + largestLink.player = player; + } + scores['team'][team]['largest']['link'] = largestLink; + + //var largestLink = scores['player'][player]['largest']['link']; + //if(largestLink === undefined || largestLink < linkLength) { + // largestLink = linkLength; + //} + //scores['player'][player]['largest']['link'] = largestLink; + }); $.each(window.portals, function(qk, portal) { somethingInView = true; + var team = getTeam(portal.options.details); if(team !== TEAM_NONE) { var player = portal.options.details.captured.capturingPlayerId; @@ -145,11 +181,11 @@ window.plugin.scoreboard.teamTableRow = function(field,title) { var retVal = '' + title + '' - + window.digits(scores[TEAM_RES][field]) + + window.digits(Math.round(scores[TEAM_RES][field])) + '' - + window.digits(scores[TEAM_ENL][field]) + + window.digits(Math.round(scores[TEAM_ENL][field])) + '' - + window.digits(scores[TEAM_RES][field] + scores[TEAM_ENL][field]) + + window.digits(Math.round(scores[TEAM_RES][field] + scores[TEAM_ENL][field])) + ''; return retVal; }; @@ -165,7 +201,27 @@ window.plugin.scoreboard.fieldInfo = function(field) { } retVal = '
' - + field.options.data.entityScore.entityScore + + window.digits(field.options.data.entityScore.entityScore) + + ' - ' + window.getPlayerName(field.options.data.creator.creatorGuid) + + '
'; + } else { + retVal = 'N/A'; + } + return retVal; +}; + +window.plugin.scoreboard.fieldInfoArea = function(field) { + var title = ''; + var retVal = ''; + + if(field !== undefined) { + var portal = window.portals[field.options.vertices.vertexA.guid]; + if(portal !== undefined) { + title = ' @' + portal.options.details.portalV2.descriptiveText.TITLE; + } + + retVal = '
' + + window.digits(Math.round(field.options.data.fieldArea)) + ' - ' + window.getPlayerName(field.options.data.creator.creatorGuid) + '
'; } else { @@ -182,9 +238,9 @@ window.plugin.scoreboard.playerTableRow = function(playerGuid) { + window.getPlayerName(playerGuid); + ''; - $.each(['mu','count_fields','count_links','count_portals','count_resonators'], function(i, field) { + $.each(['mu','count_fields','field_area','count_links','link_length','count_portals','count_resonators'], function(i, field) { retVal += '' - + window.digits(scores[playerGuid][field]) + + window.digits(Math.round(scores[playerGuid][field])) + ''; }); retVal += ''; @@ -210,8 +266,10 @@ window.plugin.scoreboard.playerTable = function(sortBy) { var scoreHtml = '' + '' + '' - + '' - + '' + + '' + + '' + + '' + + '' + '' + ''; $.each(window.plugin.scoreboard.playerGuids, function(index, guid) { @@ -252,22 +310,48 @@ window.plugin.scoreboard.display = function() { scoreHtml += '
PlayerMuFieldsLinksField #Field (km²)Link #Link (m)PortalsResonators
' + '' + window.plugin.scoreboard.teamTableRow('mu','Mu') - + window.plugin.scoreboard.teamTableRow('count_fields','Fields') - + window.plugin.scoreboard.teamTableRow('count_links','Links') + + window.plugin.scoreboard.teamTableRow('count_fields','Field #') + + window.plugin.scoreboard.teamTableRow('field_area','Field (km²)') + + window.plugin.scoreboard.teamTableRow('count_links','Link #') + + window.plugin.scoreboard.teamTableRow('link_length','Link (m)') + window.plugin.scoreboard.teamTableRow('count_portals','Portals') + window.plugin.scoreboard.teamTableRow('count_resonators','Resonators') + '
ResistanceEnlightenedTotal
'; scoreHtml += '' + '' - + '' - + '
ResistanceEnlightened
Largest Field' + + '
Largest Field (Mu)' + window.plugin.scoreboard.fieldInfo(scores['team'][TEAM_RES]['largest']['mu']) + '' + window.plugin.scoreboard.fieldInfo(scores['team'][TEAM_ENL]['largest']['mu']) + '
'; + + 'Largest Field (km²)' + + window.plugin.scoreboard.fieldInfoArea(scores['team'][TEAM_RES]['largest']['field_area']) + + '' + + window.plugin.scoreboard.fieldInfoArea(scores['team'][TEAM_ENL]['largest']['field_area']) + + '' + + 'Longest Link (m)'; + if(scores['team'][TEAM_RES]['largest']['link'] === undefined) { + scoreHtml += 'N/A'; + } + else { + scoreHtml += window.digits(Math.round(scores['team'][TEAM_RES]['largest']['link']['distance'])) + + ' - ' + + window.getPlayerName(scores['team'][TEAM_RES]['largest']['link']['player']); + } + scoreHtml += ''; - scoreHtml += '
' + if(scores['team'][TEAM_ENL]['largest']['link'] === undefined) { + scoreHtml += 'N/A'; + } + else { + scoreHtml += window.digits(Math.round(scores['team'][TEAM_ENL]['largest']['link']['distance'])) + + ' - ' + + window.getPlayerName(scores['team'][TEAM_ENL]['largest']['link']['player']); + } + scoreHtml += '' + + '' + + '
' + window.plugin.scoreboard.playerTable('mu') + '
'; @@ -287,11 +371,28 @@ window.plugin.scoreboard.display = function() { }); } +window.plugin.scoreboard.portalDistance = function(portalAE6Location, portalBE6Location) { + portalA = new L.LatLng(portalAE6Location.latE6 / 1E6, portalAE6Location.lngE6 / 1E6); + portalB = new L.LatLng(portalBE6Location.latE6 / 1E6, portalBE6Location.lngE6 / 1E6); + return (portalA.distanceTo(portalB)); +} + +window.plugin.scoreboard.fieldArea = function(field) { + var verts = field.options.vertices; + var sideA = window.plugin.scoreboard.portalDistance(verts.vertexA.location,verts.vertexB.location) / 1000; + var sideB = window.plugin.scoreboard.portalDistance(verts.vertexB.location,verts.vertexC.location) / 1000; + var sideC = window.plugin.scoreboard.portalDistance(verts.vertexC.location,verts.vertexA.location) / 1000; + // Heron's Formula; + var perimeter = sideA + sideB + sideC; + var s = perimeter/2; + return Math.sqrt(s*(s-sideA)*(s-sideB)*(s-sideC)); +} + var setup = function() { $('body').append(''); $('#toolbox').append('scoreboard'); $('head').append('