]> git.sesse.net Git - pkanalytics/commitdiff
Count callahans in the viewer.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Sun, 23 Jul 2023 18:12:50 +0000 (20:12 +0200)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Sun, 23 Jul 2023 18:12:50 +0000 (20:12 +0200)
ultimate.js

index 2b483e225a68039c41023474d31a88f1122cbb06..b6f4aedb206c014ade421d84928d1aa53846c642 100644 (file)
@@ -189,6 +189,7 @@ function process_matches(json, filters) {
                        'stallouts': 0,
 
                        'defenses': 0,
+                       'callahans': 0,
                        'points_played': 0,
                        'playing_time_ms': 0,
                        'offensive_playing_time_ms': 0,
@@ -239,6 +240,7 @@ function process_matches(json, filters) {
                let our_score = 0;
                let their_score = 0;
                let handler = null;
+               let handler_got_by_interception = false;  // Only relevant if handler !== null.
                let prev_handler = null;
                let live_since = null;
                let offense = null;  // True/false/null (unknown).
@@ -503,7 +505,19 @@ function process_matches(json, filters) {
                        }
 
                        // Event management
-                       if (type === 'catch' || type === 'goal') {
+                       if (type === 'goal' && handler === e['player'] && handler_got_by_interception) {
+                               // Self-pass to goal after an interception; this is not a real pass,
+                               // just how we represent a Callahan right now -- so don't
+                               // count the throw, any assists or similar.
+                               //
+                               // It's an open question how we should handle a self-pass that is
+                               // _not_ after an interception, or a self-pass that's not a goal.
+                               // (It must mean we tipped off someone.) We'll count it as a regular one
+                               // for the time being, although it will make hockey assists weird.
+                               ++p.goals;
+                               ++p.callahans;
+                               handler = prev_handler = null;
+                       } else if (type === 'catch' || type === 'goal') {
                                if (handler !== null) {
                                        if (keep) {
                                                ++players[handler].num_throws;
@@ -527,6 +541,7 @@ function process_matches(json, filters) {
                                        // Update hold history.
                                        prev_handler = handler;
                                        handler = e['player'];
+                                       handler_got_by_interception = false;
                                }
                        } else if (type === 'throwaway') {
                                if (keep) {
@@ -553,6 +568,7 @@ function process_matches(json, filters) {
                                }
                                prev_handler = null;
                                handler = e['player'];
+                               handler_got_by_interception = true;
                        } else if (type === 'offensive_soft_plus' || type === 'offensive_soft_minus' || type === 'defensive_soft_plus' || type === 'defensive_soft_minus') {
                                if (keep) ++p[type];
                        } else if (type !== 'in' && type !== 'out' && type !== 'pull' &&
@@ -897,6 +913,7 @@ function make_table_defense(players) {
                add_th(header, 'OOB pulls');
                add_th(header, 'OOB%');
                add_th(header, 'Avg. hang time (IB)');
+               add_th(header, 'Callahans');
                add_th(header, 'Soft +/-', 6);
                rows.push(header);
        }
@@ -925,6 +942,7 @@ function make_table_defense(players) {
                } else {
                        add_3cell(row, 'N/A');
                }
+               add_3cell(row, p.callahans);
                add_3cell(row, '+' + p.defensive_soft_plus);
                add_3cell(row, '-' + p.defensive_soft_minus);
                row.dataset.player = q;