diff --git a/assets/src/ba_data/python/ba/_freeforallsession.py b/assets/src/ba_data/python/ba/_freeforallsession.py index 31648583..eb9db6b8 100644 --- a/assets/src/ba_data/python/ba/_freeforallsession.py +++ b/assets/src/ba_data/python/ba/_freeforallsession.py @@ -70,16 +70,18 @@ class FreeForAllSession(TeamBaseSession): def _switch_to_score_screen(self, results: ba.TeamGameResults) -> None: # pylint: disable=cyclic-import - from bastd.activity import drawscreen - from bastd.activity import multiteamendscreen - from bastd.activity import freeforallendscreen + from bastd.activity.drawscreen import DrawScoreScreenActivity + from bastd.activity.multiteamendscreen import ( + TeamSeriesVictoryScoreScreenActivity) + from bastd.activity.freeforallendscreen import ( + FreeForAllVictoryScoreScreenActivity) winners = results.get_winners() # If there's multiple players and everyone has the same score, # call it a draw. if len(self.players) > 1 and len(winners) < 2: self.set_activity( - _ba.new_activity(drawscreen.DrawScoreScreenActivity, + _ba.new_activity(DrawScoreScreenActivity, {'results': results})) else: # Award different point amounts based on number of players. @@ -103,13 +105,9 @@ class FreeForAllSession(TeamBaseSession): and series_winners[0].sessiondata['score'] != series_winners[1].sessiondata['score'])): self.set_activity( - _ba.new_activity( - multiteamendscreen. - TeamSeriesVictoryScoreScreenActivity, - {'winner': series_winners[0]})) + _ba.new_activity(TeamSeriesVictoryScoreScreenActivity, + {'winner': series_winners[0]})) else: self.set_activity( - _ba.new_activity( - freeforallendscreen. - FreeForAllVictoryScoreScreenActivity, - {'results': results})) + _ba.new_activity(FreeForAllVictoryScoreScreenActivity, + {'results': results})) diff --git a/assets/src/ba_data/python/ba/_stats.py b/assets/src/ba_data/python/ba/_stats.py index 6a24cea2..d62ac24f 100644 --- a/assets/src/ba_data/python/ba/_stats.py +++ b/assets/src/ba_data/python/ba/_stats.py @@ -76,9 +76,9 @@ class PlayerRecord: self._stats = weakref.ref(stats) self._last_player: Optional[ba.Player] = None self._player: Optional[ba.Player] = None - self.associate_with_player(player) self._team: Optional[ReferenceType[ba.Team]] = None self.streak = 0 + self.associate_with_player(player) @property def team(self) -> ba.Team: diff --git a/assets/src/ba_data/python/bastd/activity/freeforallendscreen.py b/assets/src/ba_data/python/bastd/activity/freeforallendscreen.py index be983213..0c870ae7 100644 --- a/assets/src/ba_data/python/bastd/activity/freeforallendscreen.py +++ b/assets/src/ba_data/python/bastd/activity/freeforallendscreen.py @@ -78,8 +78,10 @@ class FreeForAllVictoryScoreScreenActivity(TeamsScoreScreenActivity): delay3 += 1.5 ba.timer(0.3, ba.Call(ba.playsound, self._score_display_sound)) + results = self.settings['results'] + assert isinstance(results, ba.TeamGameResults) self.show_player_scores(delay=0.001, - results=self.settings['results'], + results=results, scale=1.2, x_offset=-110.0) @@ -256,12 +258,12 @@ class FreeForAllVictoryScoreScreenActivity(TeamsScoreScreenActivity): ba.Call(_safesetattr, s_txt.node, 'color', (1, 1, 1, 1))) for j in range(score_change): ba.timer( - 0.001 * (tdelay + delay1 + 150 * j), + (tdelay + delay1 + 0.15 * j), ba.Call( _safesetattr, s_txt.node, 'text', str(player.team.sessiondata['previous_score'] + j + 1))) - tfin = tdelay + delay1 + 150 * j + tfin = tdelay + delay1 + 0.15 * j if tfin not in sound_times: sound_times.add(tfin) ba.timer( @@ -272,5 +274,6 @@ class FreeForAllVictoryScoreScreenActivity(TeamsScoreScreenActivity): def _safe_animate(self, node: Optional[ba.Node], attr: str, keys: Dict[float, float]) -> None: + """Run an animation on a node if the node still exists.""" if node: ba.animate(node, attr, keys) diff --git a/assets/src/ba_data/python/bastd/activity/teamsscorescreen.py b/assets/src/ba_data/python/bastd/activity/teamsscorescreen.py index 181534b6..93e46152 100644 --- a/assets/src/ba_data/python/bastd/activity/teamsscorescreen.py +++ b/assets/src/ba_data/python/bastd/activity/teamsscorescreen.py @@ -71,7 +71,7 @@ class TeamsScoreScreenActivity(ScoreScreenActivity): def show_player_scores(self, delay: float = 2.5, - results: Any = None, + results: Optional[ba.TeamGameResults] = None, scale: float = 1.0, x_offset: float = 0.0, y_offset: float = 0.0) -> None: @@ -105,7 +105,7 @@ class TeamsScoreScreenActivity(ScoreScreenActivity): return val return str(p_rec.accumscore) - # get_records() can return players that are no longer in + # stats.get_records() can return players that are no longer in # the game.. if we're using results we have to filter those out # (since they're not in results and that's where we pull their # scores from) @@ -121,7 +121,6 @@ class TeamsScoreScreenActivity(ScoreScreenActivity): # PyCharm incorrectly thinks valid_players is a List[str] # noinspection PyUnresolvedReferences if p_rec[1].player is player: - # noinspection PyTypeChecker return p_rec[1] return None @@ -230,8 +229,8 @@ class TeamsScoreScreenActivity(ScoreScreenActivity): transition=Text.Transition.IN_LEFT, transition_delay=tdelay).autoretain() _scoretxt(str(playerrec.accum_kill_count), 180, - playerrec.accum_kill_count == topkillcount, 100) + playerrec.accum_kill_count == topkillcount, 0.1) _scoretxt(str(playerrec.accum_killed_count), 280, - playerrec.accum_killed_count == topkilledcount, 100) + playerrec.accum_killed_count == topkilledcount, 0.1) _scoretxt(_get_prec_score_str(playerrec), 390, - _get_prec_score(playerrec) == top_score, 200) + _get_prec_score(playerrec) == top_score, 0.2) diff --git a/assets/src/ba_data/python/bastd/actor/text.py b/assets/src/ba_data/python/bastd/actor/text.py index 3e9003c2..968547fc 100644 --- a/assets/src/ba_data/python/bastd/actor/text.py +++ b/assets/src/ba_data/python/bastd/actor/text.py @@ -209,8 +209,11 @@ class Text(ba.Actor): ba.animate(cmb, 'input1', keys) ba.animate(self.node, 'opacity', o_keys) elif transition is self.Transition.IN_TOP_SLOW: - keys = {transition_delay: 0.4, transition_delay + 3.5: position[1]} - o_keys = {transition_delay: 0.0, transition_delay + 1.0: 1.0} + keys = { + transition_delay: 400.0, + transition_delay + 3.5: position[1] + } + o_keys = {transition_delay: 0, transition_delay + 1.0: 1.0} cmb.input0 = position[0] ba.animate(cmb, 'input1', keys) ba.animate(self.node, 'opacity', o_keys)