From a62065ab34d845348cc4dc993863fde3d6fb51f3 Mon Sep 17 00:00:00 2001 From: plural Date: Mon, 16 Sep 2024 19:16:08 -0500 Subject: [PATCH] Show side bias on standings for Single-sided swiss rounds. (#339) * Show side bias on standings for Single-sided swiss rounds. * Remove errant text change. * Rename player meeting render function. * Set nil side_bias for player meeting. --- app/controllers/players_controller.rb | 10 ++++++---- app/frontend/standings/StandingsData.ts | 1 + app/frontend/standings/SwissStandings.svelte | 20 ++++++++++++++++++-- spec/requests/players_controller_spec.rb | 6 ++++-- 4 files changed, 29 insertions(+), 8 deletions(-) diff --git a/app/controllers/players_controller.rb b/app/controllers/players_controller.rb index e56dd149..e4b2ade0 100644 --- a/app/controllers/players_controller.rb +++ b/app/controllers/players_controller.rb @@ -158,7 +158,7 @@ def render_standings_for_stage(stage) end # No standings during player meeting or first round, so list players - render_player_list_for_standings stage + render_player_list_for_player_meeting stage end def compute_and_render_cut_standings(stage) @@ -184,12 +184,13 @@ def render_completed_standings(stage) extended_sos: row.extended_sos, corp_points: row.corp_points || 0, runner_points: row.runner_points || 0, - manual_seed: row.manual_seed + manual_seed: row.manual_seed, + side_bias: stage.format == 'single_sided_swiss' ? row.player.side_bias : nil } end end - def render_player_list_for_standings(stage) + def render_player_list_for_player_meeting(stage) stage.players.sort.each_with_index.map do |player, i| { player: standings_player(player, show_ids: false), @@ -200,7 +201,8 @@ def render_player_list_for_standings(stage) extended_sos: 0, corp_points: 0, runner_points: 0, - manual_seed: player.manual_seed + manual_seed: player.manual_seed, + side_bias: nil } end end diff --git a/app/frontend/standings/StandingsData.ts b/app/frontend/standings/StandingsData.ts index 77ef6fb1..51a838fe 100644 --- a/app/frontend/standings/StandingsData.ts +++ b/app/frontend/standings/StandingsData.ts @@ -44,6 +44,7 @@ export type SwissStanding = { corp_points: number; runner_points: number; manual_seed: number | null; + side_bias: number | null; } export type CutStanding = { diff --git a/app/frontend/standings/SwissStandings.svelte b/app/frontend/standings/SwissStandings.svelte index 7e54a819..6bea92b2 100644 --- a/app/frontend/standings/SwissStandings.svelte +++ b/app/frontend/standings/SwissStandings.svelte @@ -6,6 +6,16 @@ export let stage: SwissStage; export let manual_seed: boolean; + function printSideBias(sideBias: number) { + if (sideBias === 0) { + return 'Balanced'; + } else if (sideBias > 0) { + return `Corp +${sideBias}`; + } else { + return `Runner +${-sideBias}`; + } + } + function printSOS(sos: string) { return parseFloat(sos).toLocaleString(undefined, { minimumFractionDigits: 4, @@ -29,8 +39,11 @@ {#if manual_seed} Seed {/if} - SOS - Extended SOS + SoS + ESoS + {#if stage.format == 'single_sided_swiss' } + Side Bias + {/if} @@ -62,6 +75,9 @@ {/if} {printSOS(standing.sos)} {printSOS(standing.extended_sos)} + {#if stage.format == 'single_sided_swiss' } + {printSideBias(standing.side_bias)} + {/if} {/each} diff --git a/spec/requests/players_controller_spec.rb b/spec/requests/players_controller_spec.rb index bad9aa14..930b44b7 100644 --- a/spec/requests/players_controller_spec.rb +++ b/spec/requests/players_controller_spec.rb @@ -563,7 +563,8 @@ def standing_with_no_score(position, player) 'extended_sos' => 0, 'runner_points' => 0, 'corp_points' => 0, - 'manual_seed' => nil + 'manual_seed' => nil, + 'side_bias' => nil } end @@ -577,7 +578,8 @@ def standing_with_custom_score(position, points:, sos:, extended_sos:, player:) 'extended_sos' => extended_sos, 'runner_points' => 0, 'corp_points' => 0, - 'manual_seed' => nil + 'manual_seed' => nil, + 'side_bias' => nil } end