]> git.sesse.net Git - pkanalytics/blobdiff - ultimate.js
Store event types internally as an enum.
[pkanalytics] / ultimate.js
index cfcdf2e682772bb0625f6b3dfbe9404271d3f1cf..d327ed5ad6008c220aa5185efb24941e7582f91d 100644 (file)
@@ -11,6 +11,17 @@ fetch('ultimate.json')
    .then(response => response.json())
    .then(response => { global_json = response; process_matches(global_json, global_filters); });
 
+function format_time(t)
+{
+       const ms = t % 1000 + '';
+       t = Math.floor(t / 1000);
+       const sec = t % 60 + '';
+       t = Math.floor(t / 60);
+       const min = t % 60 + '';
+       const hour = Math.floor(t / 60) + '';
+       return hour + ':' + min.padStart(2, '0') + ':' + sec.padStart(2, '0') + '.' + ms.padStart(3, '0');
+}
+
 function attribute_player_time(player, to, from, offense) {
        let delta_time;
        if (player.on_field_since > from) {
@@ -178,7 +189,6 @@ function process_matches(json, filters) {
                        'stallouts': 0,
 
                        'defenses': 0,
-                       'interceptions': 0,
                        'points_played': 0,
                        'playing_time_ms': 0,
                        'offensive_playing_time_ms': 0,
@@ -300,7 +310,7 @@ function process_matches(json, filters) {
                                live_since = t;
                        } else if (type === 'catch' && last_pull_was_ours === null) {
                                // Someone forgot to add the pull, so we'll need to wing it.
-                               console.log('Missing pull on ' + our_score + '\u2013' + their_score + ' in ' + match['description'] + '; pretending to have one.');
+                               console.log(match['description'] + ' ' + format_time(t) + ': Missing pull on ' + our_score + '\u2013' + their_score + '; pretending to have one.');
                                live_since = t;
                                last_pull_was_ours = !offense;
                        } else if (type === 'goal' || type === 'their_goal' || type === 'stoppage') {
@@ -483,6 +493,16 @@ function process_matches(json, filters) {
                                }
                        }
 
+                       if (type !== 'out' && type !== 'in' && p !== undefined && p.on_field_since === null) {
+                               console.log(match['description'] + ' ' + format_time(t) + ': Event “' + type + '” on subbed-out player ' + p.name);
+                       }
+                       if (type === 'catch' && handler !== null && players[handler].on_field_since === null) {
+                               // The handler subbed out and was replaced with another handler,
+                               // so this wasn't a pass.
+                               console.log(match['description'] + ' ' + format_time(t) + ': Disc came from subbed-out player ' + players[handler].name + '; not counting a pass.');
+                               handler = null;
+                       }
+
                        // Event management
                        if (type === 'catch' || type === 'goal') {
                                if (handler !== null) {
@@ -528,7 +548,7 @@ function process_matches(json, filters) {
                                if (keep) ++p.defenses;
                        } else if (type === 'interception') {
                                if (keep) {
-                                       ++p.interceptions;
+                                       ++p.catches;
                                        ++p.defenses;
                                        ++p.touches;
                                }
@@ -543,7 +563,7 @@ function process_matches(json, filters) {
                                   type !== 'pull' && type !== 'pull_landed' && type !== 'pull_oob' && type !== 'their_pull' &&
                                   type !== 'their_throwaway' && type !== 'defense' && type !== 'interception' &&
                                   type !== 'formation_offense' && type !== 'formation_defense') {
-                               console.log("Unknown event:", e);
+                               console.log(format_time(t) + ": Unknown event “" + e + "”");
                        }
 
                        if (type === 'goal' || type === 'their_goal') {