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 7import bascenev1 as bs 8from bascenev1lib.activity.multiteamscore import MultiTeamScoreScreenActivity 9from bascenev1lib.actor.zoomtext import ZoomText 10 11 12class TeamVictoryScoreScreenActivity(MultiTeamScoreScreenActivity): 13 """Scorescreen between rounds of a dual-team session.""" 14 15 def __init__(self, settings: dict): 16 super().__init__(settings=settings) 17 self._winner: bs.SessionTeam = settings['winner'] 18 assert isinstance(self._winner, bs.SessionTeam) 19 20 def on_begin(self) -> None: 21 bs.set_analytics_screen('Teams Score Screen') 22 super().on_begin() 23 24 height = 130 25 active_team_count = len(self.teams) 26 vval = (height * active_team_count) / 2 - height / 2 27 i = 0 28 shift_time = 2.5 29 30 # Usually we say 'Best of 7', but if the language prefers we can say 31 # 'First to 4'. 32 session = self.session 33 assert isinstance(session, bs.MultiTeamSession) 34 if bs.app.lang.get_resource('bestOfUseFirstToInstead'): 35 best_txt = bs.Lstr( 36 resource='firstToSeriesText', 37 subs=[('${COUNT}', str(session.get_series_length() / 2 + 1))], 38 ) 39 else: 40 best_txt = bs.Lstr( 41 resource='bestOfSeriesText', 42 subs=[('${COUNT}', str(session.get_series_length()))], 43 ) 44 45 ZoomText( 46 best_txt, 47 position=(0, 175), 48 shiftposition=(-250, 175), 49 shiftdelay=2.5, 50 flash=False, 51 trail=False, 52 h_align='center', 53 scale=0.25, 54 color=(0.5, 0.5, 0.5, 1.0), 55 jitter=3.0, 56 ).autoretain() 57 for team in self.session.sessionteams: 58 bs.timer( 59 i * 0.15 + 0.15, 60 bs.WeakCall( 61 self._show_team_name, 62 vval - i * height, 63 team, 64 i * 0.2, 65 shift_time - (i * 0.150 + 0.150), 66 ), 67 ) 68 bs.timer(i * 0.150 + 0.5, self._score_display_sound_small.play) 69 scored = team is self._winner 70 delay = 0.2 71 if scored: 72 delay = 1.2 73 bs.timer( 74 i * 0.150 + 0.2, 75 bs.WeakCall( 76 self._show_team_old_score, 77 vval - i * height, 78 team, 79 shift_time - (i * 0.15 + 0.2), 80 ), 81 ) 82 bs.timer(i * 0.15 + 1.5, self._score_display_sound.play) 83 84 bs.timer( 85 i * 0.150 + delay, 86 bs.WeakCall( 87 self._show_team_score, 88 vval - i * height, 89 team, 90 scored, 91 i * 0.2 + 0.1, 92 shift_time - (i * 0.15 + delay), 93 ), 94 ) 95 i += 1 96 self.show_player_scores() 97 98 def _show_team_name( 99 self, 100 pos_v: float, 101 team: bs.SessionTeam, 102 kill_delay: float, 103 shiftdelay: float, 104 ) -> None: 105 del kill_delay # Unused arg. 106 ZoomText( 107 bs.Lstr(value='${A}:', subs=[('${A}', team.name)]), 108 position=(100, pos_v), 109 shiftposition=(-150, pos_v), 110 shiftdelay=shiftdelay, 111 flash=False, 112 trail=False, 113 h_align='right', 114 maxwidth=300, 115 color=team.color, 116 jitter=1.0, 117 ).autoretain() 118 119 def _show_team_old_score( 120 self, pos_v: float, sessionteam: bs.SessionTeam, shiftdelay: float 121 ) -> None: 122 ZoomText( 123 str(sessionteam.customdata['score'] - 1), 124 position=(150, pos_v), 125 maxwidth=100, 126 color=(0.6, 0.6, 0.7), 127 shiftposition=(-100, pos_v), 128 shiftdelay=shiftdelay, 129 flash=False, 130 trail=False, 131 lifespan=1.0, 132 h_align='left', 133 jitter=1.0, 134 ).autoretain() 135 136 def _show_team_score( 137 self, 138 pos_v: float, 139 sessionteam: bs.SessionTeam, 140 scored: bool, 141 kill_delay: float, 142 shiftdelay: float, 143 ) -> None: 144 del kill_delay # Unused arg. 145 ZoomText( 146 str(sessionteam.customdata['score']), 147 position=(150, pos_v), 148 maxwidth=100, 149 color=(1.0, 0.9, 0.5) if scored else (0.6, 0.6, 0.7), 150 shiftposition=(-100, pos_v), 151 shiftdelay=shiftdelay, 152 flash=scored, 153 trail=scored, 154 h_align='left', 155 jitter=1.0, 156 trailcolor=(1, 0.8, 0.0, 0), 157 ).autoretain()
class
TeamVictoryScoreScreenActivity(bascenev1._activity.Activity[bascenev1._player.EmptyPlayer, bascenev1._team.EmptyTeam]):
13class TeamVictoryScoreScreenActivity(MultiTeamScoreScreenActivity): 14 """Scorescreen between rounds of a dual-team session.""" 15 16 def __init__(self, settings: dict): 17 super().__init__(settings=settings) 18 self._winner: bs.SessionTeam = settings['winner'] 19 assert isinstance(self._winner, bs.SessionTeam) 20 21 def on_begin(self) -> None: 22 bs.set_analytics_screen('Teams Score Screen') 23 super().on_begin() 24 25 height = 130 26 active_team_count = len(self.teams) 27 vval = (height * active_team_count) / 2 - height / 2 28 i = 0 29 shift_time = 2.5 30 31 # Usually we say 'Best of 7', but if the language prefers we can say 32 # 'First to 4'. 33 session = self.session 34 assert isinstance(session, bs.MultiTeamSession) 35 if bs.app.lang.get_resource('bestOfUseFirstToInstead'): 36 best_txt = bs.Lstr( 37 resource='firstToSeriesText', 38 subs=[('${COUNT}', str(session.get_series_length() / 2 + 1))], 39 ) 40 else: 41 best_txt = bs.Lstr( 42 resource='bestOfSeriesText', 43 subs=[('${COUNT}', str(session.get_series_length()))], 44 ) 45 46 ZoomText( 47 best_txt, 48 position=(0, 175), 49 shiftposition=(-250, 175), 50 shiftdelay=2.5, 51 flash=False, 52 trail=False, 53 h_align='center', 54 scale=0.25, 55 color=(0.5, 0.5, 0.5, 1.0), 56 jitter=3.0, 57 ).autoretain() 58 for team in self.session.sessionteams: 59 bs.timer( 60 i * 0.15 + 0.15, 61 bs.WeakCall( 62 self._show_team_name, 63 vval - i * height, 64 team, 65 i * 0.2, 66 shift_time - (i * 0.150 + 0.150), 67 ), 68 ) 69 bs.timer(i * 0.150 + 0.5, self._score_display_sound_small.play) 70 scored = team is self._winner 71 delay = 0.2 72 if scored: 73 delay = 1.2 74 bs.timer( 75 i * 0.150 + 0.2, 76 bs.WeakCall( 77 self._show_team_old_score, 78 vval - i * height, 79 team, 80 shift_time - (i * 0.15 + 0.2), 81 ), 82 ) 83 bs.timer(i * 0.15 + 1.5, self._score_display_sound.play) 84 85 bs.timer( 86 i * 0.150 + delay, 87 bs.WeakCall( 88 self._show_team_score, 89 vval - i * height, 90 team, 91 scored, 92 i * 0.2 + 0.1, 93 shift_time - (i * 0.15 + delay), 94 ), 95 ) 96 i += 1 97 self.show_player_scores() 98 99 def _show_team_name( 100 self, 101 pos_v: float, 102 team: bs.SessionTeam, 103 kill_delay: float, 104 shiftdelay: float, 105 ) -> None: 106 del kill_delay # Unused arg. 107 ZoomText( 108 bs.Lstr(value='${A}:', subs=[('${A}', team.name)]), 109 position=(100, pos_v), 110 shiftposition=(-150, pos_v), 111 shiftdelay=shiftdelay, 112 flash=False, 113 trail=False, 114 h_align='right', 115 maxwidth=300, 116 color=team.color, 117 jitter=1.0, 118 ).autoretain() 119 120 def _show_team_old_score( 121 self, pos_v: float, sessionteam: bs.SessionTeam, shiftdelay: float 122 ) -> None: 123 ZoomText( 124 str(sessionteam.customdata['score'] - 1), 125 position=(150, pos_v), 126 maxwidth=100, 127 color=(0.6, 0.6, 0.7), 128 shiftposition=(-100, pos_v), 129 shiftdelay=shiftdelay, 130 flash=False, 131 trail=False, 132 lifespan=1.0, 133 h_align='left', 134 jitter=1.0, 135 ).autoretain() 136 137 def _show_team_score( 138 self, 139 pos_v: float, 140 sessionteam: bs.SessionTeam, 141 scored: bool, 142 kill_delay: float, 143 shiftdelay: float, 144 ) -> None: 145 del kill_delay # Unused arg. 146 ZoomText( 147 str(sessionteam.customdata['score']), 148 position=(150, pos_v), 149 maxwidth=100, 150 color=(1.0, 0.9, 0.5) if scored else (0.6, 0.6, 0.7), 151 shiftposition=(-100, pos_v), 152 shiftdelay=shiftdelay, 153 flash=scored, 154 trail=scored, 155 h_align='left', 156 jitter=1.0, 157 trailcolor=(1, 0.8, 0.0, 0), 158 ).autoretain()
Scorescreen between rounds of a dual-team session.
TeamVictoryScoreScreenActivity(settings: dict)
16 def __init__(self, settings: dict): 17 super().__init__(settings=settings) 18 self._winner: bs.SessionTeam = settings['winner'] 19 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.
def
on_begin(self) -> None:
21 def on_begin(self) -> None: 22 bs.set_analytics_screen('Teams Score Screen') 23 super().on_begin() 24 25 height = 130 26 active_team_count = len(self.teams) 27 vval = (height * active_team_count) / 2 - height / 2 28 i = 0 29 shift_time = 2.5 30 31 # Usually we say 'Best of 7', but if the language prefers we can say 32 # 'First to 4'. 33 session = self.session 34 assert isinstance(session, bs.MultiTeamSession) 35 if bs.app.lang.get_resource('bestOfUseFirstToInstead'): 36 best_txt = bs.Lstr( 37 resource='firstToSeriesText', 38 subs=[('${COUNT}', str(session.get_series_length() / 2 + 1))], 39 ) 40 else: 41 best_txt = bs.Lstr( 42 resource='bestOfSeriesText', 43 subs=[('${COUNT}', str(session.get_series_length()))], 44 ) 45 46 ZoomText( 47 best_txt, 48 position=(0, 175), 49 shiftposition=(-250, 175), 50 shiftdelay=2.5, 51 flash=False, 52 trail=False, 53 h_align='center', 54 scale=0.25, 55 color=(0.5, 0.5, 0.5, 1.0), 56 jitter=3.0, 57 ).autoretain() 58 for team in self.session.sessionteams: 59 bs.timer( 60 i * 0.15 + 0.15, 61 bs.WeakCall( 62 self._show_team_name, 63 vval - i * height, 64 team, 65 i * 0.2, 66 shift_time - (i * 0.150 + 0.150), 67 ), 68 ) 69 bs.timer(i * 0.150 + 0.5, self._score_display_sound_small.play) 70 scored = team is self._winner 71 delay = 0.2 72 if scored: 73 delay = 1.2 74 bs.timer( 75 i * 0.150 + 0.2, 76 bs.WeakCall( 77 self._show_team_old_score, 78 vval - i * height, 79 team, 80 shift_time - (i * 0.15 + 0.2), 81 ), 82 ) 83 bs.timer(i * 0.15 + 1.5, self._score_display_sound.play) 84 85 bs.timer( 86 i * 0.150 + delay, 87 bs.WeakCall( 88 self._show_team_score, 89 vval - i * height, 90 team, 91 scored, 92 i * 0.2 + 0.1, 93 shift_time - (i * 0.15 + delay), 94 ), 95 ) 96 i += 1 97 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