From 6ff6f5e6d9a653cdac974e709d8663417eccd018 Mon Sep 17 00:00:00 2001 From: Eric Froemling Date: Sat, 28 Sep 2024 16:18:05 -0700 Subject: [PATCH] tidying and lint fixes --- .../bascenev1lib/activity/multiteamvictory.py | 99 +++++++++++-------- .../python/bascenev1lib/actor/scoreboard.py | 2 +- .../python/bauiv1lib/settings/benchmarks.py | 6 +- 3 files changed, 61 insertions(+), 46 deletions(-) diff --git a/src/assets/ba_data/python/bascenev1lib/activity/multiteamvictory.py b/src/assets/ba_data/python/bascenev1lib/activity/multiteamvictory.py index a024da7d..8bc1141c 100644 --- a/src/assets/ba_data/python/bascenev1lib/activity/multiteamvictory.py +++ b/src/assets/ba_data/python/bascenev1lib/activity/multiteamvictory.py @@ -4,12 +4,15 @@ from __future__ import annotations -from typing import override +from typing import override, TYPE_CHECKING import bascenev1 as bs from bascenev1lib.activity.multiteamscore import MultiTeamScoreScreenActivity +if TYPE_CHECKING: + from typing import Any + class TeamSeriesVictoryScoreScreenActivity(MultiTeamScoreScreenActivity): """Final score screen for a team series.""" @@ -24,7 +27,8 @@ class TeamSeriesVictoryScoreScreenActivity(MultiTeamScoreScreenActivity): self._allow_server_transition = True self._tips_text = None self._default_show_tips = False - self._topscored_player: list[object] | None = None + self._ffa_top_player_info: list[Any] | None = None + self._ffa_top_player_rec: bs.PlayerRecord | None = None @override def on_begin(self) -> None: @@ -72,9 +76,15 @@ class TeamSeriesVictoryScoreScreenActivity(MultiTeamScoreScreenActivity): ) player_entries.sort(reverse=True, key=lambda x: x[0]) if len(player_entries) > 0: - self._topscored_player = list(player_entries[0]) - self._topscored_player[1] = self._topscored_player[2].getname() - self._topscored_player[2] = self._topscored_player[2].get_icon() + # Store some info for the top ffa player so we can + # show winner info even if they leave. + self._ffa_top_player_info = list(player_entries[0]) + self._ffa_top_player_info[1] = self._ffa_top_player_info[ + 2 + ].getname() + self._ffa_top_player_info[2] = self._ffa_top_player_info[ + 2 + ].get_icon() else: for _pkey, prec in self.stats.get_records().items(): player_entries.append((prec.score, prec.name_full, prec)) @@ -377,40 +387,41 @@ class TeamSeriesVictoryScoreScreenActivity(MultiTeamScoreScreenActivity): v_offs = 0.0 tdelay += len(player_entries) * 8 * t_incr for _score, name, prec in player_entries: - if prec.player.in_game: - tdelay -= 4 * t_incr - v_offs -= 40 - Text( - ( - str(prec.team.customdata['score']) - if self._is_ffa - else str(prec.score) - ), - color=(0.5, 0.5, 0.5, 1.0), - position=(ts_h_offs + 230, ts_height / 2 + v_offs), - h_align=Text.HAlign.RIGHT, - transition=Text.Transition.IN_RIGHT, - transition_delay=tdelay, - ).autoretain() - tdelay -= 4 * t_incr + if not prec.player.in_game: + continue + tdelay -= 4 * t_incr + v_offs -= 40 + Text( + ( + str(prec.team.customdata['score']) + if self._is_ffa + else str(prec.score) + ), + color=(0.5, 0.5, 0.5, 1.0), + position=(ts_h_offs + 230, ts_height / 2 + v_offs), + h_align=Text.HAlign.RIGHT, + transition=Text.Transition.IN_RIGHT, + transition_delay=tdelay, + ).autoretain() + tdelay -= 4 * t_incr - Image( - prec.get_icon(), - position=(ts_h_offs - 72, ts_height / 2 + v_offs + 15), - scale=(30, 30), - transition=Image.Transition.IN_LEFT, - transition_delay=tdelay, - ).autoretain() - Text( - bs.Lstr(value=name), - position=(ts_h_offs - 50, ts_height / 2 + v_offs + 15), - h_align=Text.HAlign.LEFT, - v_align=Text.VAlign.CENTER, - maxwidth=180, - color=bs.safecolor(prec.team.color + (1,)), - transition=Text.Transition.IN_RIGHT, - transition_delay=tdelay, - ).autoretain() + Image( + prec.get_icon(), + position=(ts_h_offs - 72, ts_height / 2 + v_offs + 15), + scale=(30, 30), + transition=Image.Transition.IN_LEFT, + transition_delay=tdelay, + ).autoretain() + Text( + bs.Lstr(value=name), + position=(ts_h_offs - 50, ts_height / 2 + v_offs + 15), + h_align=Text.HAlign.LEFT, + v_align=Text.VAlign.CENTER, + maxwidth=180, + color=bs.safecolor(prec.team.color + (1,)), + transition=Text.Transition.IN_RIGHT, + transition_delay=tdelay, + ).autoretain() bs.timer(15.0, bs.WeakCall(self._show_tips)) @@ -440,16 +451,20 @@ class TeamSeriesVictoryScoreScreenActivity(MultiTeamScoreScreenActivity): ).autoretain() else: offs_v = -80 + assert isinstance(self.session, bs.MultiTeamSession) series_length = self.session.get_ffa_series_length() + icon: dict | None + # Pull live player info if they're still around. if len(team.players) == 1: icon = team.players[0].get_icon() player_name = team.players[0].getname(full=True, icon=False) + # Otherwise use the special info we stored when we came in. elif ( - self._topscored_player is not None and - self._topscored_player[0] >= series_length + self._ffa_top_player_info is not None + and self._ffa_top_player_info[0] >= series_length ): - icon = self._topscored_player[2] - player_name = self._topscored_player[1] + icon = self._ffa_top_player_info[2] + player_name = self._ffa_top_player_info[1] else: icon = None player_name = 'Player Not Found' diff --git a/src/assets/ba_data/python/bascenev1lib/actor/scoreboard.py b/src/assets/ba_data/python/bascenev1lib/actor/scoreboard.py index 46660468..18ba89d7 100644 --- a/src/assets/ba_data/python/bascenev1lib/actor/scoreboard.py +++ b/src/assets/ba_data/python/bascenev1lib/actor/scoreboard.py @@ -379,7 +379,7 @@ class Scoreboard: score_split: float = 0.7, pos: Sequence[float] | None = None, width: float | None = None, - height: float | None = None + height: float | None = None, ): """Instantiate a scoreboard. diff --git a/src/assets/ba_data/python/bauiv1lib/settings/benchmarks.py b/src/assets/ba_data/python/bauiv1lib/settings/benchmarks.py index cdc2ab25..668bc9b3 100644 --- a/src/assets/ba_data/python/bauiv1lib/settings/benchmarks.py +++ b/src/assets/ba_data/python/bauiv1lib/settings/benchmarks.py @@ -10,6 +10,7 @@ from typing import cast, override import bauiv1 as bui import bascenev1 as bs + class BenchmarksAndStressTestsWindow(bui.MainWindow): """Window for launching benchmarks or stress tests.""" @@ -383,9 +384,8 @@ class BenchmarksAndStressTestsWindow(bui.MainWindow): bui.app.classic.run_stress_test( playlist_type=self._stress_test_game_type, playlist_name=cast( - str, bui.textwidget( - query=self._stress_test_playlist_name_field - ) + str, + bui.textwidget(query=self._stress_test_playlist_name_field), ), player_count=self._stress_test_player_count, round_duration=self._stress_test_round_duration,