From 93050ae334fcb08e23b4aa21867af7f9b8a92338 Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Sun, 23 Jul 2023 20:12:50 +0200 Subject: [PATCH] Count callahans in the viewer. --- ultimate.js | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/ultimate.js b/ultimate.js index 2b483e2..b6f4aed 100644 --- a/ultimate.js +++ b/ultimate.js @@ -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; -- 2.39.2