def announce_game_results(self, activity: ba.GameActivity, results: ba.GameResults, delay: float, announce_winning_team: bool = True) -> None: """Show basic game result at the end of a game. (before transitioning to a score screen). This will include a zoom-text of 'BLUE WINS' or whatnot, along with a possible audio announcement of the same. """ # pylint: disable=cyclic-import # pylint: disable=too-many-locals from ba._math import normalized_color from ba._general import Call from ba._gameutils import cameraflash from ba._language import Lstr from ba._freeforallsession import FreeForAllSession from ba._messages import CelebrateMessage _ba.timer(delay, Call(_ba.playsound, _ba.getsound('boxingBell'))) if announce_winning_team: winning_sessionteam = results.winning_sessionteam if winning_sessionteam is not None: # Have all players celebrate. celebrate_msg = CelebrateMessage(duration=10.0) assert winning_sessionteam.activityteam is not None for player in winning_sessionteam.activityteam.players: if player.actor: player.actor.handlemessage(celebrate_msg) cameraflash() # Some languages say "FOO WINS" different for teams vs players. if isinstance(self, FreeForAllSession): wins_resource = 'winsPlayerText' else: wins_resource = 'winsTeamText' wins_text = Lstr(resource=wins_resource, subs=[('${NAME}', winning_sessionteam.name)]) activity.show_zoom_message( wins_text, scale=0.85, color=normalized_color(winning_sessionteam.color), )
def set_game(self, game: ba.GameActivity) -> None: """Set the game instance these results are applying to.""" if self._game_set: raise RuntimeError('Game set twice for TeamGameResults.') self._game_set = True self._teams = [weakref.ref(team) for team in game.teams] score_info = game.get_resolved_score_info() self._player_info = copy.deepcopy(game.initial_player_info) self._lower_is_better = score_info['lower_is_better'] self._score_name = score_info['score_name'] self._none_is_winner = score_info['none_is_winner'] self._score_type = score_info['score_type']
def set_game(self, game: ba.GameActivity) -> None: """Set the game instance these results are applying to.""" if self._game_set: raise RuntimeError('Game set twice for GameResults.') self._game_set = True self._sessionteams = [ weakref.ref(team.sessionteam) for team in game.teams ] scoreconfig = game.getscoreconfig() self._playerinfos = copy.deepcopy(game.initialplayerinfos) self._lower_is_better = scoreconfig.lower_is_better self._score_label = scoreconfig.label self._none_is_winner = scoreconfig.none_is_winner self._scoretype = scoreconfig.scoretype