Ejemplo n.º 1
0
    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),
                )
Ejemplo n.º 2
0
 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