summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFreeyorp <TheFreeYorp@NOSPAM.G.m.a.i.l.replace>2013-05-14 10:10:15 +1200
committerFreeyorp <TheFreeYorp@NOSPAM.G.m.a.i.l.replace>2013-05-14 10:10:15 +1200
commit8804397ff39f142fec4ac13ee193928b639327cf (patch)
tree5748cec705a974513309c2e35d771c16ff388d87
parentb547523e1964d24c3e3e3e3598fdd67b208e2dfd (diff)
downloadmanavis-8804397ff39f142fec4ac13ee193928b639327cf.tar.gz
manavis-8804397ff39f142fec4ac13ee193928b639327cf.tar.bz2
manavis-8804397ff39f142fec4ac13ee193928b639327cf.tar.xz
manavis-8804397ff39f142fec4ac13ee193928b639327cf.zip
Chart the number of attackers
-rw-r--r--public/index.html3
-rw-r--r--public/js/mv/chart.js3
-rw-r--r--public/js/mv/heap.js1
-rw-r--r--public/js/mv/parse.js14
4 files changed, 18 insertions, 3 deletions
diff --git a/public/index.html b/public/index.html
index e27c0e6..5d0a9a2 100644
--- a/public/index.html
+++ b/public/index.html
@@ -25,6 +25,9 @@
<div id="wpn-chart">
<h3>Instance breakdown by Weapon <a class="reset" style="display: none;" href="javascript:mv.charts.wpn.filterAll();dc.redrawAll();">clear</a></h3>
</div>
+ <div id="num-attackers-chart">
+ <h3>Instance breakdown by number of attackers <a class="reset" style="display: none;" href="javascript:mv.charts.numAttackers.filterAll();dc.redrawAll();">clear</a><h3>
+ </div>
<div id="type-chart">
<h3>Instance breakdown by Type <a class="reset" style="display: none;" href="javascript:mv.charts.type.filterAll();dc.redrawAll();">clear</a></h3>
</div>
diff --git a/public/js/mv/chart.js b/public/js/mv/chart.js
index be0740b..bb511b9 100644
--- a/public/js/mv/chart.js
+++ b/public/js/mv/chart.js
@@ -23,6 +23,9 @@ var mv = function(mv) {
;
mv.charts.wpn = pie(monoGroup(dc.pieChart("#wpn-chart"), "wpn"))
;
+ mv.charts.numAttackers = pie(monoGroup(dc.pieChart("#num-attackers-chart"), "numAttackers"))
+ .sort(function(d1, d2) { return d3.descending(d1.key, d2.key); })
+ ;
mv.charts.map = monoGroup(margined(wide(dc.bubbleChart("#map-chart"))), "map")
.height(500)
.colorCalculator(d3.scale.category20c())
diff --git a/public/js/mv/heap.js b/public/js/mv/heap.js
index b226d72..4ba5c06 100644
--- a/public/js/mv/heap.js
+++ b/public/js/mv/heap.js
@@ -16,6 +16,7 @@ var mv = function(mv) {
monoGroup("type", function(d) { return d.type; });
monoGroup("target", function(d) { return d.target; });
monoGroup("wpn", function(d) { return d.wpn; });
+ monoGroup("numAttackers", function(d) { return d.numAttackers; });
function sa(p, d) {
if (!d.pcstat) return p;
p.str[d.pcstat.str]++ || (p.str[d.pcstat.str] = 1);
diff --git a/public/js/mv/parse.js b/public/js/mv/parse.js
index ecef612..162739f 100644
--- a/public/js/mv/parse.js
+++ b/public/js/mv/parse.js
@@ -25,7 +25,7 @@ var mv = function(mv) {
*/
var killedMobID = 0;
/*
- * mob ID -> { mobClass, player IDs -> { total, weapon names -> { sum damage } } }
+ * mob ID -> { mobClass, numAttackers, player IDs -> { total, weapon names -> { sum damage } } }
*/
var combat = {};
function freeMob() {
@@ -73,7 +73,8 @@ var mv = function(mv) {
pcstat: pcstat[d[2]],
target: "UNKNOWN",
dmg: 0,
- wpn: "UNKNOWN"
+ wpn: "UNKNOWN",
+ numAttackers: 0
};
if (pcstat[d[2]] == undefined && (!fullyDefinedCutoff || ts > fullyDefinedCutoff)) {
/* Undefined, and newer than any existing definedness cutoff */
@@ -83,6 +84,7 @@ var mv = function(mv) {
if (killedMobID && killedMobID in combat && rec.pc in combat[killedMobID]) {
var mob = combat[killedMobID];
rec.target = mob.mobClass;
+ rec.numAttackers = mob.numAttackers || 0;
var weapons = mob[rec.pc];
/* We have the needed information. */
rec.dmg = weapons.total;
@@ -145,7 +147,13 @@ var mv = function(mv) {
var damage = parseInt(d[9]);
/* Update combat state */
var mobData = combat[target] || (combat[target] = { mobClass: mobClass });
- var pcData = mobData[pc] || (mobData[pc] = {});
+ var pcData;
+ if (pc in mobData) {
+ pcData = mobData[pc];
+ } else {
+ (++mobData.numAttackers) || (mobData.numAttackers = 1);
+ pcData = mobData[pc] = {};
+ }
(pcData[wpn] += damage) || (pcData[wpn] = damage);
(pcData.total += damage) || (pcData.total = damage);
return true;