Ejemplo n.º 1
0
    def end_game(self) -> None:

        # Stop updating our time text, and set it to show the exact last
        # finish time if we have one. (so users don't get upset if their
        # final time differs from what they see onscreen by a tiny bit)
        assert self._timer is not None
        if self._timer.has_started():
            cur_time = self._timer.getstarttime(
                timeformat=ba.TimeFormat.MILLISECONDS)
            self._timer.stop(
                endtime=None if self._last_team_time is None else (
                    cur_time + self._last_team_time))

        results = ba.TeamGameResults()

        for team in self.teams:
            if team.gamedata['time'] is not None:
                results.set_team_score(team, team.gamedata['time'])
            # If game have ended before we
            # get any result, use 'fail' screen

        # We don't announce a winner in ffa mode since its probably been a
        # while since the first place guy crossed the finish line so it seems
        # odd to be announcing that now.
        self.end(results=results,
                 announce_winning_team=isinstance(self.session,
                                                  ba.DualTeamSession))
Ejemplo n.º 2
0
    def end_game(self) -> None:

        # Stop our on-screen timer so players can see what they got.
        assert self._timer is not None
        self._timer.stop()

        results = ba.TeamGameResults()

        # If we won, set our score to the elapsed time
        # (there should just be 1 team here since this is co-op).
        # ..if we didn't win, leave scores as default (None) which means
        # we lost.
        if self._won:
            curtime = ba.time(timeformat=ba.TimeFormat.MILLISECONDS)
            assert isinstance(curtime, int)
            starttime = self._timer.getstarttime(
                timeformat=ba.TimeFormat.MILLISECONDS)
            assert isinstance(starttime, int)
            elapsed_time_ms = curtime - starttime
            ba.cameraflash()
            ba.playsound(self._winsound)
            for team in self.teams:
                for player in team.players:
                    if player.actor:
                        player.actor.handlemessage(ba.CelebrateMessage())
                results.set_team_score(team, elapsed_time_ms)

        # Ends the activity.
        self.end(results)
Ejemplo n.º 3
0
 def end_game(self) -> None:
     results = ba.TeamGameResults()
     for team in self.teams:
         results.set_team_score(
             team,
             self.settings['Hold Time'] - team.gamedata['time_remaining'])
     self.end(results=results, announce_delay=0)
Ejemplo n.º 4
0
    def end_game(self) -> None:

        # Stop updating our time text, and set it to show the exact last
        # finish time if we have one. (so users don't get upset if their
        # final time differs from what they see onscreen by a tiny amount)
        assert self._timer is not None
        if self._timer.has_started():
            self._timer.stop(
                endtime=None if self._last_team_time is None else (
                    self._timer.getstarttime() + self._last_team_time))

        results = ba.TeamGameResults()

        for team in self.teams:
            if team.time is not None:
                # We store time in seconds, but pass a score in milliseconds.
                results.set_team_score(team, int(team.time * 1000.0))
            else:
                results.set_team_score(team, None)

        # We don't announce a winner in ffa mode since its probably been a
        # while since the first place guy crossed the finish line so it seems
        # odd to be announcing that now.
        self.end(results=results,
                 announce_winning_team=isinstance(self.session,
                                                  ba.DualTeamSession))
Ejemplo n.º 5
0
 def end_game(self) -> None:
     if self.has_ended():
         return
     results = ba.TeamGameResults()
     self._vs_text = None  # Kill our 'vs' if its there.
     for team in self.teams:
         results.set_team_score(team, team.survival_seconds)
     self.end(results=results)
Ejemplo n.º 6
0
    def end_game(self) -> None:
        cur_time = ba.time()
        assert self._timer is not None
        start_time = self._timer.getstarttime()

        # Mark death-time as now for any still-living players
        # and award players points for how long they lasted.
        # (these per-player scores are only meaningful in team-games)
        for team in self.teams:
            for player in team.players:
                playerdata = PlayerData.get(player)
                survived = False

                # Throw an extra fudge factor in so teams that
                # didn't die come out ahead of teams that did.
                if playerdata.death_time is None:
                    survived = True
                    playerdata.death_time = cur_time + 1

                # Award a per-player score depending on how many seconds
                # they lasted (per-player scores only affect teams mode;
                # everywhere else just looks at the per-team score).
                score = int(playerdata.death_time - self._timer.getstarttime())
                if survived:
                    score += 50  # A bit extra for survivors.
                self.stats.player_scored(player, score, screenmessage=False)

        # Stop updating our time text, and set the final time to match
        # exactly when our last guy died.
        self._timer.stop(endtime=self._last_player_death_time)

        # Ok now calc game results: set a score for each team and then tell
        # the game to end.
        results = ba.TeamGameResults()

        # Remember that 'free-for-all' mode is simply a special form
        # of 'teams' mode where each player gets their own team, so we can
        # just always deal in teams and have all cases covered.
        for team in self.teams:

            # Set the team score to the max time survived by any player on
            # that team.
            longest_life = 0.0
            for player in team.players:
                playerdata = PlayerData.get(player)
                assert playerdata.death_time is not None
                longest_life = max(longest_life,
                                   playerdata.death_time - start_time)

            # Submit the score value in milliseconds.
            results.set_team_score(team, int(1000.0 * longest_life))

        self.end(results=results)
Ejemplo n.º 7
0
    def end_game(self) -> None:

        # Stop our on-screen timer so players can see what they got.
        assert self._timer is not None
        self._timer.stop()

        results = ba.TeamGameResults()

        # If we won, set our score to the elapsed time in milliseconds.
        # (there should just be 1 team here since this is co-op).
        # ..if we didn't win, leave scores as default (None) which means
        # we lost.
        if self._won:
            elapsed_time_ms = int((ba.time() - self._timer.starttime) * 1000.0)
            ba.cameraflash()
            ba.playsound(self._winsound)
            for team in self.teams:
                for player in team.players:
                    if player.actor:
                        player.actor.handlemessage(ba.CelebrateMessage())
                results.set_team_score(team, elapsed_time_ms)

        # Ends the activity.
        self.end(results)
Ejemplo n.º 8
0
 def end_game(self) -> None:
     results = ba.TeamGameResults()
     for team in self.teams:
         results.set_team_score(team, team.score)
     self.end(results=results)
Ejemplo n.º 9
0
 def end_game(self) -> None:
     results = ba.TeamGameResults()
     for team in self.teams:
         results.set_team_score(team, team.gamedata['score'])
     self.end(results=results, announce_delay=0.8)
Ejemplo n.º 10
0
 def end_game(self) -> None:
     results = ba.TeamGameResults()
     for team in self.teams:
         results.set_team_score(team, self._hold_time - team.timeremaining)
     self.end(results=results, announce_delay=0)
Ejemplo n.º 11
0
 def end_game(self) -> None:
     results = ba.TeamGameResults()
     for team in self.teams:
         results.set_team_score(team, team.gamedata['flags_held'])
     self.end(results=results)