From 00574ec37b9d124c10d9f6a5218c71c52f570ae1 Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Sun, 23 Jul 2023 22:14:23 +0200 Subject: [PATCH] Add filters on O-line/D-line. --- ultimate.js | 40 +++++++++++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/ultimate.js b/ultimate.js index b6f4aed..c0ca1ba 100644 --- a/ultimate.js +++ b/ultimate.js @@ -275,10 +275,10 @@ function process_matches(json, filters) { let p = players[e['player']]; // Sub management - let keep = keep_event(players, formations_used_this_point, filters); + let keep = keep_event(players, formations_used_this_point, last_pull_was_ours, filters); if (type === 'in' && p.on_field_since === null) { p.on_field_since = t; - if (!keep && keep_event(players, formations_used_this_point, filters)) { + if (!keep && keep_event(players, formations_used_this_point, last_pull_was_ours, filters)) { // A player needed for the filters went onto the field, // so pretend people walked on right now (to start their // counting time). @@ -290,7 +290,7 @@ function process_matches(json, filters) { } } else if (type === 'out') { take_off_field(p, t, live_since, offense, keep); - if (keep && !keep_event(players, formations_used_this_point, filters)) { + if (keep && !keep_event(players, formations_used_this_point, last_pull_was_ours, filters)) { // A player needed for the filters went off the field, // so we need to attribute time for all the others. // Pretend they walked off and then immediately on again. @@ -305,7 +305,7 @@ function process_matches(json, filters) { } } - keep = keep_event(players, formations_used_this_point, filters); // Recompute after in/out. + keep = keep_event(players, formations_used_this_point, last_pull_was_ours, filters); // Recompute after in/out. // Liveness management if (type === 'pull' || type === 'their_pull' || type === 'restart') { @@ -587,7 +587,7 @@ function process_matches(json, filters) { } // Add field time for all players still left at match end. - const keep = keep_event(players, formations_used_this_point, filters); + const keep = keep_event(players, formations_used_this_point, last_pull_was_ours, filters); if (keep) { for (const [q,p] of Object.entries(players)) { if (p.on_field_since !== null && last_goal !== null) { @@ -1101,6 +1101,7 @@ function open_filter_menu() { add_menu_item(menu, 2, 'player_all', 'Player on field (all)'); add_menu_item(menu, 3, 'formation_offense', 'Offense played (any)'); add_menu_item(menu, 4, 'formation_defense', 'Defense played (any)'); + add_menu_item(menu, 5, 'starting_on', 'Starting on'); } function add_menu_item(menu, menu_idx, filter_type, title) { @@ -1164,6 +1165,15 @@ function show_submenu(menu_idx, pill, filter_type) { }); } } + } else if (filter_type === 'starting_on') { + choices.push({ + 'title': 'Offense', + 'id': false, // last_pull_was_ours + }); + choices.push({ + 'title': 'Defense', + 'id': true, // last_pull_was_ours + }); } for (const choice of choices) { @@ -1321,7 +1331,7 @@ function make_filter_pill(filter) { let sorted_formation_id = Array.from(filter.elements).sort((a, b) => a - b); for (const formation_id of sorted_formation_id) { if (!first) { - text += ', '; + ktext += ', '; } let desc = find_formation(formation_id)['name']; if (common_prefix === null) { @@ -1335,6 +1345,16 @@ function make_filter_pill(filter) { if (common_prefix !== null) { text += ')'; } + } else if (filter.type === 'starting_on') { + text = 'Starting on: '; + + if (filter.elements.has(false) && filter.elements.has(true)) { + text += 'Any'; + } else if (filter.elements.has(false)) { + text += 'Offense'; + } else { + text += 'Defense'; + } } let text_node = document.createElement('span'); @@ -1441,7 +1461,7 @@ function keep_match(match_id, filters) { return true; } -function filter_passes(players, formations_used_this_point, filter) { +function filter_passes(players, formations_used_this_point, last_pull_was_ours, filter) { if (filter.type === 'player_any') { for (const p of Array.from(filter.elements)) { if (players[p].on_field_since !== null) { @@ -1463,13 +1483,15 @@ function filter_passes(players, formations_used_this_point, filter) { } } return false; + } else if (filter.type === 'starting_on') { + return filter.elements.has(last_pull_was_ours); } return true; } -function keep_event(players, formations_used_this_point, filters) { +function keep_event(players, formations_used_this_point, last_pull_was_ours, filters) { for (const filter of filters) { - if (!filter_passes(players, formations_used_this_point, filter)) { + if (!filter_passes(players, formations_used_this_point, last_pull_was_ours, filter)) { return false; } } -- 2.39.2