bascenev1lib.activity.dualteamscore
Functionality related to the end screen in dual-team mode.
1# Released under the MIT License. See LICENSE for details. 2# 3"""Functionality related to the end screen in dual-team mode.""" 4 5from __future__ import annotations 6 7from typing import override 8 9import bascenev1 as bs 10 11from bascenev1lib.activity.multiteamscore import MultiTeamScoreScreenActivity 12from bascenev1lib.actor.zoomtext import ZoomText 13 14 15class TeamVictoryScoreScreenActivity(MultiTeamScoreScreenActivity): 16 """Scorescreen between rounds of a dual-team session.""" 17 18 def __init__(self, settings: dict): 19 super().__init__(settings=settings) 20 self._winner: bs.SessionTeam = settings['winner'] 21 assert isinstance(self._winner, bs.SessionTeam) 22 23 @override 24 def on_begin(self) -> None: 25 bs.set_analytics_screen('Teams Score Screen') 26 super().on_begin() 27 28 height = 130 29 active_team_count = len(self.teams) 30 vval = (height * active_team_count) / 2 - height / 2 31 i = 0 32 shift_time = 2.5 33 34 # Usually we say 'Best of 7', but if the language prefers we can say 35 # 'First to 4'. 36 session = self.session 37 assert isinstance(session, bs.MultiTeamSession) 38 if bs.app.lang.get_resource('bestOfUseFirstToInstead'): 39 best_txt = bs.Lstr( 40 resource='firstToSeriesText', 41 subs=[('${COUNT}', str(session.get_series_length() / 2 + 1))], 42 ) 43 else: 44 best_txt = bs.Lstr( 45 resource='bestOfSeriesText', 46 subs=[('${COUNT}', str(session.get_series_length()))], 47 ) 48 49 ZoomText( 50 best_txt, 51 position=(0, 175), 52 shiftposition=(-250, 175), 53 shiftdelay=2.5, 54 flash=False, 55 trail=False, 56 h_align='center', 57 scale=0.25, 58 color=(0.5, 0.5, 0.5, 1.0), 59 jitter=3.0, 60 ).autoretain() 61 for team in self.session.sessionteams: 62 bs.timer( 63 i * 0.15 + 0.15, 64 bs.WeakCall( 65 self._show_team_name, 66 vval - i * height, 67 team, 68 i * 0.2, 69 shift_time - (i * 0.150 + 0.150), 70 ), 71 ) 72 bs.timer(i * 0.150 + 0.5, self._score_display_sound_small.play) 73 scored = team is self._winner 74 delay = 0.2 75 if scored: 76 delay = 1.2 77 bs.timer( 78 i * 0.150 + 0.2, 79 bs.WeakCall( 80 self._show_team_old_score, 81 vval - i * height, 82 team, 83 shift_time - (i * 0.15 + 0.2), 84 ), 85 ) 86 bs.timer(i * 0.15 + 1.5, self._score_display_sound.play) 87 88 bs.timer( 89 i * 0.150 + delay, 90 bs.WeakCall( 91 self._show_team_score, 92 vval - i * height, 93 team, 94 scored, 95 i * 0.2 + 0.1, 96 shift_time - (i * 0.15 + delay), 97 ), 98 ) 99 i += 1 100 self.show_player_scores() 101 102 def _show_team_name( 103 self, 104 pos_v: float, 105 team: bs.SessionTeam, 106 kill_delay: float, 107 shiftdelay: float, 108 ) -> None: 109 del kill_delay # Unused arg. 110 ZoomText( 111 bs.Lstr(value='${A}:', subs=[('${A}', team.name)]), 112 position=(100, pos_v), 113 shiftposition=(-150, pos_v), 114 shiftdelay=shiftdelay, 115 flash=False, 116 trail=False, 117 h_align='right', 118 maxwidth=300, 119 color=team.color, 120 jitter=1.0, 121 ).autoretain() 122 123 def _show_team_old_score( 124 self, pos_v: float, sessionteam: bs.SessionTeam, shiftdelay: float 125 ) -> None: 126 ZoomText( 127 str(sessionteam.customdata['score'] - 1), 128 position=(150, pos_v), 129 maxwidth=100, 130 color=(0.6, 0.6, 0.7), 131 shiftposition=(-100, pos_v), 132 shiftdelay=shiftdelay, 133 flash=False, 134 trail=False, 135 lifespan=1.0, 136 h_align='left', 137 jitter=1.0, 138 ).autoretain() 139 140 def _show_team_score( 141 self, 142 pos_v: float, 143 sessionteam: bs.SessionTeam, 144 scored: bool, 145 kill_delay: float, 146 shiftdelay: float, 147 ) -> None: 148 del kill_delay # Unused arg. 149 ZoomText( 150 str(sessionteam.customdata['score']), 151 position=(150, pos_v), 152 maxwidth=100, 153 color=(1.0, 0.9, 0.5) if scored else (0.6, 0.6, 0.7), 154 shiftposition=(-100, pos_v), 155 shiftdelay=shiftdelay, 156 flash=scored, 157 trail=scored, 158 h_align='left', 159 jitter=1.0, 160 trailcolor=(1, 0.8, 0.0, 0), 161 ).autoretain()
class
TeamVictoryScoreScreenActivity(bascenev1._activity.Activity[bascenev1._player.EmptyPlayer, bascenev1._team.EmptyTeam]):
16class TeamVictoryScoreScreenActivity(MultiTeamScoreScreenActivity): 17 """Scorescreen between rounds of a dual-team session.""" 18 19 def __init__(self, settings: dict): 20 super().__init__(settings=settings) 21 self._winner: bs.SessionTeam = settings['winner'] 22 assert isinstance(self._winner, bs.SessionTeam) 23 24 @override 25 def on_begin(self) -> None: 26 bs.set_analytics_screen('Teams Score Screen') 27 super().on_begin() 28 29 height = 130 30 active_team_count = len(self.teams) 31 vval = (height * active_team_count) / 2 - height / 2 32 i = 0 33 shift_time = 2.5 34 35 # Usually we say 'Best of 7', but if the language prefers we can say 36 # 'First to 4'. 37 session = self.session 38 assert isinstance(session, bs.MultiTeamSession) 39 if bs.app.lang.get_resource('bestOfUseFirstToInstead'): 40 best_txt = bs.Lstr( 41 resource='firstToSeriesText', 42 subs=[('${COUNT}', str(session.get_series_length() / 2 + 1))], 43 ) 44 else: 45 best_txt = bs.Lstr( 46 resource='bestOfSeriesText', 47 subs=[('${COUNT}', str(session.get_series_length()))], 48 ) 49 50 ZoomText( 51 best_txt, 52 position=(0, 175), 53 shiftposition=(-250, 175), 54 shiftdelay=2.5, 55 flash=False, 56 trail=False, 57 h_align='center', 58 scale=0.25, 59 color=(0.5, 0.5, 0.5, 1.0), 60 jitter=3.0, 61 ).autoretain() 62 for team in self.session.sessionteams: 63 bs.timer( 64 i * 0.15 + 0.15, 65 bs.WeakCall( 66 self._show_team_name, 67 vval - i * height, 68 team, 69 i * 0.2, 70 shift_time - (i * 0.150 + 0.150), 71 ), 72 ) 73 bs.timer(i * 0.150 + 0.5, self._score_display_sound_small.play) 74 scored = team is self._winner 75 delay = 0.2 76 if scored: 77 delay = 1.2 78 bs.timer( 79 i * 0.150 + 0.2, 80 bs.WeakCall( 81 self._show_team_old_score, 82 vval - i * height, 83 team, 84 shift_time - (i * 0.15 + 0.2), 85 ), 86 ) 87 bs.timer(i * 0.15 + 1.5, self._score_display_sound.play) 88 89 bs.timer( 90 i * 0.150 + delay, 91 bs.WeakCall( 92 self._show_team_score, 93 vval - i * height, 94 team, 95 scored, 96 i * 0.2 + 0.1, 97 shift_time - (i * 0.15 + delay), 98 ), 99 ) 100 i += 1 101 self.show_player_scores() 102 103 def _show_team_name( 104 self, 105 pos_v: float, 106 team: bs.SessionTeam, 107 kill_delay: float, 108 shiftdelay: float, 109 ) -> None: 110 del kill_delay # Unused arg. 111 ZoomText( 112 bs.Lstr(value='${A}:', subs=[('${A}', team.name)]), 113 position=(100, pos_v), 114 shiftposition=(-150, pos_v), 115 shiftdelay=shiftdelay, 116 flash=False, 117 trail=False, 118 h_align='right', 119 maxwidth=300, 120 color=team.color, 121 jitter=1.0, 122 ).autoretain() 123 124 def _show_team_old_score( 125 self, pos_v: float, sessionteam: bs.SessionTeam, shiftdelay: float 126 ) -> None: 127 ZoomText( 128 str(sessionteam.customdata['score'] - 1), 129 position=(150, pos_v), 130 maxwidth=100, 131 color=(0.6, 0.6, 0.7), 132 shiftposition=(-100, pos_v), 133 shiftdelay=shiftdelay, 134 flash=False, 135 trail=False, 136 lifespan=1.0, 137 h_align='left', 138 jitter=1.0, 139 ).autoretain() 140 141 def _show_team_score( 142 self, 143 pos_v: float, 144 sessionteam: bs.SessionTeam, 145 scored: bool, 146 kill_delay: float, 147 shiftdelay: float, 148 ) -> None: 149 del kill_delay # Unused arg. 150 ZoomText( 151 str(sessionteam.customdata['score']), 152 position=(150, pos_v), 153 maxwidth=100, 154 color=(1.0, 0.9, 0.5) if scored else (0.6, 0.6, 0.7), 155 shiftposition=(-100, pos_v), 156 shiftdelay=shiftdelay, 157 flash=scored, 158 trail=scored, 159 h_align='left', 160 jitter=1.0, 161 trailcolor=(1, 0.8, 0.0, 0), 162 ).autoretain()
Scorescreen between rounds of a dual-team session.
TeamVictoryScoreScreenActivity(settings: dict)
19 def __init__(self, settings: dict): 20 super().__init__(settings=settings) 21 self._winner: bs.SessionTeam = settings['winner'] 22 assert isinstance(self._winner, bs.SessionTeam)
Creates an Activity in the current bascenev1.Session.
The activity will not be actually run until bascenev1.Session.setactivity is called. 'settings' should be a dict of key/value pairs specific to the activity.
Activities should preload as much of their media/etc as possible in their constructor, but none of it should actually be used until they are transitioned in.
@override
def
on_begin(self) -> None:
24 @override 25 def on_begin(self) -> None: 26 bs.set_analytics_screen('Teams Score Screen') 27 super().on_begin() 28 29 height = 130 30 active_team_count = len(self.teams) 31 vval = (height * active_team_count) / 2 - height / 2 32 i = 0 33 shift_time = 2.5 34 35 # Usually we say 'Best of 7', but if the language prefers we can say 36 # 'First to 4'. 37 session = self.session 38 assert isinstance(session, bs.MultiTeamSession) 39 if bs.app.lang.get_resource('bestOfUseFirstToInstead'): 40 best_txt = bs.Lstr( 41 resource='firstToSeriesText', 42 subs=[('${COUNT}', str(session.get_series_length() / 2 + 1))], 43 ) 44 else: 45 best_txt = bs.Lstr( 46 resource='bestOfSeriesText', 47 subs=[('${COUNT}', str(session.get_series_length()))], 48 ) 49 50 ZoomText( 51 best_txt, 52 position=(0, 175), 53 shiftposition=(-250, 175), 54 shiftdelay=2.5, 55 flash=False, 56 trail=False, 57 h_align='center', 58 scale=0.25, 59 color=(0.5, 0.5, 0.5, 1.0), 60 jitter=3.0, 61 ).autoretain() 62 for team in self.session.sessionteams: 63 bs.timer( 64 i * 0.15 + 0.15, 65 bs.WeakCall( 66 self._show_team_name, 67 vval - i * height, 68 team, 69 i * 0.2, 70 shift_time - (i * 0.150 + 0.150), 71 ), 72 ) 73 bs.timer(i * 0.150 + 0.5, self._score_display_sound_small.play) 74 scored = team is self._winner 75 delay = 0.2 76 if scored: 77 delay = 1.2 78 bs.timer( 79 i * 0.150 + 0.2, 80 bs.WeakCall( 81 self._show_team_old_score, 82 vval - i * height, 83 team, 84 shift_time - (i * 0.15 + 0.2), 85 ), 86 ) 87 bs.timer(i * 0.15 + 1.5, self._score_display_sound.play) 88 89 bs.timer( 90 i * 0.150 + delay, 91 bs.WeakCall( 92 self._show_team_score, 93 vval - i * height, 94 team, 95 scored, 96 i * 0.2 + 0.1, 97 shift_time - (i * 0.15 + delay), 98 ), 99 ) 100 i += 1 101 self.show_player_scores()
Called once the previous Activity has finished transitioning out.
At this point the activity's initial players and teams are filled in and it should begin its actual game logic.
Inherited Members
- bascenev1._activitytypes.ScoreScreenActivity
- transition_time
- inherits_tint
- inherits_vr_camera_offset
- use_fixed_vr_overlay
- default_music
- on_player_join
- on_transition_in
- bascenev1._activity.Activity
- settings_raw
- teams
- players
- announce_player_deaths
- is_joining_activity
- allow_pausing
- allow_kick_idle_players
- slow_motion
- inherits_slow_motion
- inherits_music
- inherits_vr_overlay_center
- allow_mid_activity_joins
- can_show_ad_on_death
- paused_text
- preloads
- lobby
- context
- globalsnode
- stats
- on_expire
- customdata
- expired
- playertype
- teamtype
- retain_actor
- add_actor_weak_ref
- session
- on_player_leave
- on_team_join
- on_team_leave
- on_transition_out
- handlemessage
- has_transitioned_in
- has_begun
- has_ended
- is_transitioning_out
- transition_out
- end
- create_player
- create_team
- bascenev1._dependency.DependencyComponent
- dep_is_present
- get_dynamic_deps