From 98c8fcf61dc28a2a8cacd3209bca7c2af12ddfd2 Mon Sep 17 00:00:00 2001 From: Eric Froemling Date: Wed, 8 Apr 2020 02:05:16 -0700 Subject: [PATCH] Cleaned up co-op score screen and text actor --- assets/src/ba_data/python/ba/_achievement.py | 95 ++++++----- .../src/ba_data/python/ba/_activitytypes.py | 24 +-- assets/src/ba_data/python/ba/_actor.py | 7 +- assets/src/ba_data/python/ba/_coopgame.py | 6 +- .../python/bastd/activity/coopjoinscreen.py | 28 +-- .../python/bastd/activity/coopscorescreen.py | 161 +++++++++--------- .../bastd/activity/freeforallendscreen.py | 18 +- .../bastd/activity/multiteamendscreen.py | 68 ++++---- .../bastd/activity/multiteamjoinscreen.py | 70 ++++---- .../python/bastd/activity/teamsscorescreen.py | 37 ++-- .../src/ba_data/python/bastd/actor/image.py | 2 +- assets/src/ba_data/python/bastd/actor/text.py | 77 ++++++--- assets/src/ba_data/python/bastd/mainmenu.py | 34 ++-- 13 files changed, 334 insertions(+), 293 deletions(-) diff --git a/assets/src/ba_data/python/ba/_achievement.py b/assets/src/ba_data/python/ba/_achievement.py index c88e02c6..9798e33e 100644 --- a/assets/src/ba_data/python/ba/_achievement.py +++ b/assets/src/ba_data/python/ba/_achievement.py @@ -382,18 +382,20 @@ class Achievement: if style == 'post_game': in_game_colors = False in_main_menu = False - h_attach = v_attach = attach = 'center' + h_attach = Text.HAttach.CENTER + v_attach = Text.VAttach.CENTER + attach = 'center' elif style == 'in_game': in_game_colors = True in_main_menu = False - h_attach = 'left' - v_attach = 'top' + h_attach = Text.HAttach.LEFT + v_attach = Text.VAttach.TOP attach = 'topLeft' elif style == 'news': in_game_colors = True in_main_menu = True - h_attach = 'center' - v_attach = 'top' + h_attach = Text.HAttach.CENTER + v_attach = Text.VAttach.TOP attach = 'topCenter' else: raise Exception('invalid style "' + style + '"') @@ -449,7 +451,7 @@ class Achievement: host_only=True, maxwidth=txt_max_w, position=(x, y + 2), - transition='fade_in', + transition=Text.Transition.FADE_IN, scale=txt_s, flatness=0.6, shadow=0.5, @@ -466,7 +468,7 @@ class Achievement: host_only=True, maxwidth=txt2_max_w, position=(x, y - 14), - transition='fade_in', + transition=Text.Transition.FADE_IN, vr_depth=-5, h_attach=h_attach, v_attach=v_attach, @@ -483,19 +485,18 @@ class Achievement: host_only=True, maxwidth=txt2_max_w * 0.7, position=(x + 60, y + 5), - transition='fade_in', + transition=Text.Transition.FADE_IN, vr_depth=-5, h_attach=h_attach, v_attach=v_attach, - h_align='center', - v_align='center', + h_align=Text.HAlign.CENTER, + v_align=Text.VAlign.CENTER, scale=txt_s * 0.8, flatness=1.0, shadow=0.5, color=(1, 1, 0.6, 1), transition_delay=delay + 0.1, transition_out_delay=out_delay_fin).autoretain() - assert txtactor.node txtactor.node.rotate = 10 objs.append(txtactor) @@ -505,12 +506,12 @@ class Achievement: Text(_ba.charstr(SpecialChar.TICKET), host_only=True, position=(x + award_x + 33, y + 7), - transition='fade_in', + transition=Text.Transition.FADE_IN, scale=1.5, h_attach=h_attach, v_attach=v_attach, - h_align='center', - v_align='center', + h_align=Text.HAlign.CENTER, + v_align=Text.VAlign.CENTER, color=(1, 1, 1, 0.2 if hmo else 0.4), transition_delay=delay + 0.05, transition_out_delay=out_delay_fin).autoretain()) @@ -518,13 +519,13 @@ class Achievement: Text('+' + str(self.get_award_ticket_value()), host_only=True, position=(x + award_x + 28, y + 16), - transition='fade_in', + transition=Text.Transition.FADE_IN, scale=0.7, flatness=1, h_attach=h_attach, v_attach=v_attach, - h_align='center', - v_align='center', + h_align=Text.HAlign.CENTER, + v_align=Text.VAlign.CENTER, color=cl2, transition_delay=delay + 0.05, transition_out_delay=out_delay_fin).autoretain()) @@ -566,12 +567,12 @@ class Achievement: Text(_ba.charstr(SpecialChar.TICKET), host_only=True, position=(x + award_x + 33, y + 7), - transition='in_right', + transition=Text.Transition.IN_RIGHT, scale=1.5, h_attach=h_attach, v_attach=v_attach, - h_align='center', - v_align='center', + h_align=Text.HAlign.CENTER, + v_align=Text.VAlign.CENTER, color=(1, 1, 1, 0.4) if complete else (1, 1, 1, (0.1 if hmo else 0.2)), transition_delay=delay + 0.05, @@ -580,13 +581,13 @@ class Achievement: Text('+' + str(self.get_award_ticket_value()), host_only=True, position=(x + award_x + 28, y + 16), - transition='in_right', + transition=Text.Transition.IN_RIGHT, scale=0.7, flatness=1, h_attach=h_attach, v_attach=v_attach, - h_align='center', - v_align='center', + h_align=Text.HAlign.CENTER, + v_align=Text.VAlign.CENTER, color=((0.8, 0.93, 0.8, 1.0) if complete else (0.6, 0.6, 0.6, (0.2 if hmo else 0.4))), transition_delay=delay + 0.05, @@ -595,23 +596,25 @@ class Achievement: # Show 'hard-mode-only' only over incomplete achievements # when that's the case. if hmo: + print('DOING HMO WITH STYLE', style) txtactor = Text( Lstr(resource='difficultyHardOnlyText'), host_only=True, maxwidth=300 * 0.7, position=(x + 60, y + 5), - transition='fade_in', + transition=Text.Transition.FADE_IN, vr_depth=-5, h_attach=h_attach, v_attach=v_attach, - h_align='center', - v_align='center', + h_align=Text.HAlign.CENTER, + v_align=Text.VAlign.CENTER, scale=0.85 * 0.8, flatness=1.0, shadow=0.5, color=(1, 1, 0.6, 1), transition_delay=delay + 0.05, transition_out_delay=None).autoretain() + print('DID HMO') assert txtactor.node txtactor.node.rotate = 10 objs.append(txtactor) @@ -621,7 +624,7 @@ class Achievement: host_only=True, maxwidth=300, position=(x, y + 2), - transition='in_right', + transition=Text.Transition.IN_RIGHT, scale=0.85, flatness=0.6, h_attach=h_attach, @@ -636,7 +639,7 @@ class Achievement: host_only=True, maxwidth=400, position=(x, y - 14), - transition='in_right', + transition=Text.Transition.IN_RIGHT, vr_depth=-5, h_attach=h_attach, v_attach=v_attach, @@ -862,9 +865,9 @@ class Achievement: subs=[('${A}', Lstr(resource='achievementText'))]), position=(-120, 91 + y_offs), front=True, - v_attach='bottom', + v_attach=Text.VAttach.BOTTOM, vr_depth=base_vr_depth - 10, - transition='in_bottom', + transition=Text.Transition.IN_BOTTOM, flatness=0.5, transition_delay=in_time, transition_out_delay=out_time, @@ -877,8 +880,8 @@ class Achievement: objt = Text(self.display_name, position=(-120, 50 + y_offs), front=True, - v_attach='bottom', - transition='in_bottom', + v_attach=Text.VAttach.BOTTOM, + transition=Text.Transition.IN_BOTTOM, vr_depth=base_vr_depth, flatness=0.5, transition_delay=in_time, @@ -893,10 +896,10 @@ class Achievement: objt = Text(_ba.charstr(SpecialChar.TICKET), position=(-120 - 170 + 5, 75 + y_offs - 20), front=True, - v_attach='bottom', - h_align='center', - v_align='center', - transition='in_bottom', + v_attach=Text.VAttach.BOTTOM, + h_align=Text.HAlign.CENTER, + v_align=Text.VAlign.CENTER, + transition=Text.Transition.IN_BOTTOM, vr_depth=base_vr_depth, transition_delay=in_time, transition_out_delay=out_time, @@ -909,11 +912,11 @@ class Achievement: objt = Text('+' + str(self.get_award_ticket_value()), position=(-120 - 180 + 5, 80 + y_offs - 20), - v_attach='bottom', + v_attach=Text.VAttach.BOTTOM, front=True, - h_align='center', - v_align='center', - transition='in_bottom', + h_align=Text.HAlign.CENTER, + v_align=Text.VAlign.CENTER, + transition=Text.Transition.IN_BOTTOM, vr_depth=base_vr_depth, flatness=0.5, shadow=1.0, @@ -930,11 +933,11 @@ class Achievement: if _account.have_pro(): objt = Text('x 2', position=(-120 - 180 + 45, 80 + y_offs - 50), - v_attach='bottom', + v_attach=Text.VAttach.BOTTOM, front=True, - h_align='center', - v_align='center', - transition='in_bottom', + h_align=Text.HAlign.CENTER, + v_align=Text.VAlign.CENTER, + transition=Text.Transition.IN_BOTTOM, vr_depth=base_vr_depth, flatness=0.5, shadow=1.0, @@ -950,8 +953,8 @@ class Achievement: objt = Text(self.description_complete, position=(-120, 30 + y_offs), front=True, - v_attach='bottom', - transition='in_bottom', + v_attach=Text.VAttach.BOTTOM, + transition=Text.Transition.IN_BOTTOM, vr_depth=base_vr_depth - 10, flatness=0.5, transition_delay=in_time, diff --git a/assets/src/ba_data/python/ba/_activitytypes.py b/assets/src/ba_data/python/ba/_activitytypes.py index aed67931..3fb87912 100644 --- a/assets/src/ba_data/python/ba/_activitytypes.py +++ b/assets/src/ba_data/python/ba/_activitytypes.py @@ -179,7 +179,7 @@ class ScoreScreenActivity(Activity): def on_begin(self) -> None: # pylint: disable=cyclic-import - from bastd.actor import text + from bastd.actor.text import Text from ba import _lang super().on_begin() @@ -193,17 +193,17 @@ class ScoreScreenActivity(Activity): else: sval = _lang.Lstr(resource='pressAnyButtonText') - text.Text(self._custom_continue_message - if self._custom_continue_message is not None else sval, - v_attach='bottom', - h_align='center', - flash=True, - vr_depth=50, - position=(0, 10), - scale=0.8, - color=(0.5, 0.7, 0.5, 0.5), - transition='in_bottom_slow', - transition_delay=self._min_view_time).autoretain() + Text(self._custom_continue_message + if self._custom_continue_message is not None else sval, + v_attach=Text.VAttach.BOTTOM, + h_align=Text.HAlign.CENTER, + flash=True, + vr_depth=50, + position=(0, 10), + scale=0.8, + color=(0.5, 0.7, 0.5, 0.5), + transition=Text.Transition.IN_BOTTOM_SLOW, + transition_delay=self._min_view_time).autoretain() def _player_press(self) -> None: diff --git a/assets/src/ba_data/python/ba/_actor.py b/assets/src/ba_data/python/ba/_actor.py index 42a9d611..b0727214 100644 --- a/assets/src/ba_data/python/ba/_actor.py +++ b/assets/src/ba_data/python/ba/_actor.py @@ -27,18 +27,18 @@ from typing import TYPE_CHECKING, TypeVar from ba._messages import DieMessage, DeathType, OutOfBoundsMessage from ba import _error - import _ba if TYPE_CHECKING: from typing import Any, Optional + import ba T = TypeVar('T', bound='Actor') class Actor: - """High level logical entities in a game/activity. + """High level logical entities in a ba.Activity. Category: Gameplay Classes @@ -86,9 +86,6 @@ class Actor: def __init__(self) -> None: """Instantiates an Actor in the current ba.Activity.""" - # FIXME: Actor should not be assumed to have a 'node' attr. - # self.node: Optional[ba.Node] = None - if __debug__: self._root_actor_init_called = True activity = _ba.getactivity() diff --git a/assets/src/ba_data/python/ba/_coopgame.py b/assets/src/ba_data/python/ba/_coopgame.py index 1b183f4d..321e23ba 100644 --- a/assets/src/ba_data/python/ba/_coopgame.py +++ b/assets/src/ba_data/python/ba/_coopgame.py @@ -163,10 +163,10 @@ class CoopGameActivity(GameActivity): Text(_lang.Lstr(resource='achievementsRemainingText'), host_only=True, position=(ts_h_offs - 10 + 40, v_offs - 10), - transition='fade_in', + transition=Text.Transition.FADE_IN, scale=1.1, - h_attach="left", - v_attach="top", + h_attach=Text.HAttach.LEFT, + v_attach=Text.VAttach.TOP, color=(1, 1, 1.2, 1) if vrmode else (0.8, 0.8, 1.0, 1.0), flatness=1.0 if vrmode else 0.6, shadow=1.0 if vrmode else 0.5, diff --git a/assets/src/ba_data/python/bastd/activity/coopjoinscreen.py b/assets/src/ba_data/python/bastd/activity/coopjoinscreen.py index bf84f62a..e703bff2 100644 --- a/assets/src/ba_data/python/bastd/activity/coopjoinscreen.py +++ b/assets/src/ba_data/python/bastd/activity/coopjoinscreen.py @@ -57,10 +57,10 @@ class CoopJoiningActivity(JoiningActivity): Text(self.session.campaign.get_level( self.session.campaign_state['level']).displayname, scale=1.3, - h_attach='center', - h_align='center', - v_attach='top', - transition='fade_in', + h_attach=Text.HAttach.CENTER, + h_align=Text.HAlign.CENTER, + v_attach=Text.VAttach.TOP, + transition=Text.Transition.FADE_IN, transition_delay=4.0, color=(1, 1, 1, 0.6), position=(0, -95)).autoretain() @@ -106,10 +106,10 @@ class CoopJoiningActivity(JoiningActivity): ) -> None: Text(text, scale=scale * 0.76, - h_align='left', - h_attach='left', - v_attach='top', - transition='fade_in', + h_align=Text.HAlign.LEFT, + h_attach=Text.HAttach.LEFT, + v_attach=Text.VAttach.TOP, + transition=Text.Transition.FADE_IN, transition_delay=delay, color=color, position=(60 + h_offs, vpos)).autoretain() @@ -179,10 +179,10 @@ class CoopJoiningActivity(JoiningActivity): Text(ba.Lstr(resource='achievementsRemainingText'), host_only=True, position=(ts_h_offs - 10, vpos), - transition='fade_in', + transition=Text.Transition.FADE_IN, scale=1.1 * 0.76, - h_attach="left", - v_attach="top", + h_attach=Text.HAttach.LEFT, + v_attach=Text.VAttach.TOP, color=(1, 1, 1.2, 1) if vrmode else (0.8, 0.8, 1, 1), shadow=1.0, flatness=1.0 if vrmode else 0.6, @@ -197,9 +197,9 @@ class CoopJoiningActivity(JoiningActivity): Text(ba.Lstr(resource='noAchievementsRemainingText'), host_only=True, position=(ts_h_offs + 15, vpos + 10), - transition='fade_in', + transition=Text.Transition.FADE_IN, scale=0.7, - h_attach="left", - v_attach="top", + h_attach=Text.HAttach.LEFT, + v_attach=Text.VAttach.TOP, color=(1, 1, 1, 0.5), transition_delay=delay + 0.5).autoretain() diff --git a/assets/src/ba_data/python/bastd/activity/coopscorescreen.py b/assets/src/ba_data/python/bastd/activity/coopscorescreen.py index e90a65d5..c5564180 100644 --- a/assets/src/ba_data/python/bastd/activity/coopscorescreen.py +++ b/assets/src/ba_data/python/bastd/activity/coopscorescreen.py @@ -140,8 +140,8 @@ class CoopScoreScreen(ba.Activity): self._score: Optional[int] = settings['score'] assert isinstance(self._score, (int, type(None))) - self._fail_message: Optional[str] = settings['fail_message'] - assert isinstance(self._fail_message, (str, type(None))) + self._fail_message: Optional[ba.Lstr] = settings['fail_message'] + assert isinstance(self._fail_message, (ba.Lstr, type(None))) self._begin_time = ba.time() @@ -295,7 +295,7 @@ class CoopScoreScreen(ba.Activity): flash=True, maxwidth=360, scale=0.54, - h_align='center', + h_align=Text.HAlign.CENTER, color=(0.5, 0.7, 0.5, 1), position=(300, -235)) ba.playsound(ba.getsound('error')) @@ -555,20 +555,20 @@ class CoopScoreScreen(ba.Activity): ]) if self._newly_complete else ba.Lstr(value='${A}:\n', subs=[('${A}', ba.Lstr(resource='nextLevelText'))]), - transition='in_right', + transition=Text.Transition.IN_RIGHT, transition_delay=5.2, flash=self._newly_complete, scale=0.54, - h_align='center', + h_align=Text.HAlign.CENTER, maxwidth=270, color=(0.5, 0.7, 0.5, 1), position=(270, -235)).autoretain() Text(ba.Lstr(translate=('coopLevelNames', self._next_level_name)), - transition='in_right', + transition=Text.Transition.IN_RIGHT, transition_delay=5.2, flash=self._newly_complete, scale=0.7, - h_align='center', + h_align=Text.HAlign.CENTER, maxwidth=205, color=(0.5, 0.7, 0.5, 1), position=(270, -255)).autoretain() @@ -599,10 +599,10 @@ class CoopScoreScreen(ba.Activity): jitter=1.0).autoretain() Text(pstr, maxwidth=300, - transition='fade_in', + transition=Text.Transition.FADE_IN, scale=0.7, - h_align='center', - v_align='center', + h_align=Text.HAlign.CENTER, + v_align=Text.VAlign.CENTER, color=(0.5, 0.7, 0.5, 1), position=(0, 230)).autoretain() @@ -610,11 +610,11 @@ class CoopScoreScreen(ba.Activity): txt = Text(ba.Lstr(resource='waitingForHostText', subs=[('${HOST}', adisp)]), maxwidth=300, - transition='fade_in', + transition=Text.Transition.FADE_IN, transition_delay=8.0, scale=0.85, - h_align='center', - v_align='center', + h_align=Text.HAlign.CENTER, + v_align=Text.VAlign.CENTER, color=(1, 1, 0, 1), position=(0, -230)).autoretain() assert txt.node @@ -636,19 +636,19 @@ class CoopScoreScreen(ba.Activity): [p['name'] for p in self._player_info]) if self._show_friend_scores: - self._friends_loading_status = Text(ba.Lstr( - value='${A}...', - subs=[('${A}', ba.Lstr(resource='loadingText'))]), - position=(-405, 150 + 30), - color=(1, 1, 1, 0.4), - transition='fade_in', - scale=0.7, - transition_delay=2.0) + self._friends_loading_status = Text( + ba.Lstr(value='${A}...', + subs=[('${A}', ba.Lstr(resource='loadingText'))]), + position=(-405, 150 + 30), + color=(1, 1, 1, 0.4), + transition=Text.Transition.FADE_IN, + scale=0.7, + transition_delay=2.0) self._score_loading_status = Text(ba.Lstr( value='${A}...', subs=[('${A}', ba.Lstr(resource='loadingText'))]), position=(280, 150 + 30), color=(1, 1, 1, 0.4), - transition='fade_in', + transition=Text.Transition.FADE_IN, scale=0.7, transition_delay=2.0) @@ -732,8 +732,8 @@ class CoopScoreScreen(ba.Activity): resource='worldsBestTimesText'), maxwidth=210, position=(ts_h_offs - 10, ts_height / 2 + 25 + v_offs + 20), - transition='in_left', - v_align='center', + transition=Text.Transition.IN_LEFT, + v_align=Text.VAlign.CENTER, scale=1.2, transition_delay=2.2).autoretain() @@ -753,8 +753,8 @@ class CoopScoreScreen(ba.Activity): maxwidth=210, position=(ts_h_offs - 10, ts_height / 2 + 25 + v_offs + 20), - transition='in_right', - v_align='center', + transition=Text.Transition.IN_RIGHT, + v_align=Text.VAlign.CENTER, scale=1.2, transition_delay=1.8).autoretain() assert txt.node @@ -769,8 +769,8 @@ class CoopScoreScreen(ba.Activity): resource='yourBestTimesText'), maxwidth=210, position=(ts_h_offs - 10, ts_height / 2 + 25 + v_offs + 20), - transition='in_right', - v_align='center', + transition=Text.Transition.IN_RIGHT, + v_align=Text.VAlign.CENTER, scale=1.2, transition_delay=1.8).autoretain() @@ -825,11 +825,11 @@ class CoopScoreScreen(ba.Activity): position=(ts_h_offs + 20 + h_offs_extra, v_offs_extra + ts_height / 2 + -ts_height * (i + 1) / 10 + v_offs + 11.0), - h_align='right', - v_align='center', + h_align=Text.HAlign.RIGHT, + v_align=Text.VAlign.CENTER, color=color0, flash=flash, - transition='in_right', + transition=Text.Transition.IN_RIGHT, transition_delay=tdelay1).autoretain() Text(ba.Lstr(value=name_str), @@ -837,11 +837,11 @@ class CoopScoreScreen(ba.Activity): v_offs_extra + ts_height / 2 + -ts_height * (i + 1) / 10 + v_offs_names + v_offs + 11.0), maxwidth=80.0 + 100.0 * len(self._player_info), - v_align='center', + v_align=Text.VAlign.CENTER, color=color1, flash=flash, scale=scale, - transition='in_right', + transition=Text.Transition.IN_RIGHT, transition_delay=tdelay2).autoretain() # Show achievements for this level. @@ -859,8 +859,8 @@ class CoopScoreScreen(ba.Activity): ts_height / 2 + 25 + v_offs + 3), maxwidth=210, host_only=True, - transition='in_right', - v_align='center', + transition=Text.Transition.IN_RIGHT, + v_align=Text.VAlign.CENTER, scale=1.2, transition_delay=2.8).autoretain() @@ -905,7 +905,7 @@ class CoopScoreScreen(ba.Activity): maxwidth=330, position=(-475, 150 + v_offs), color=(1, 1, 1, 0.4), - transition='fade_in', + transition=Text.Transition.FADE_IN, transition_delay=base_delay + 0.8, scale=0.7) return @@ -976,11 +976,11 @@ class CoopScoreScreen(ba.Activity): position=(ts_h_offs + 20 + h_offs_extra, v_offs_extra + ts_height / 2 + -ts_height * (i + 1) / 10 + v_offs + 11.0), - h_align='right', - v_align='center', + h_align=Text.HAlign.RIGHT, + v_align=Text.VAlign.CENTER, color=color0, flash=flash, - transition='in_right', + transition=Text.Transition.IN_RIGHT, transition_delay=tdelay1).autoretain() else: if is_me: @@ -992,10 +992,10 @@ class CoopScoreScreen(ba.Activity): (i + 1) / 10 + v_offs_names + v_offs + 11.0), color=color1, maxwidth=160.0, - v_align='center', + v_align=Text.VAlign.CENTER, flash=flash, scale=scale, - transition='in_right', + transition=Text.Transition.IN_RIGHT, transition_delay=tdelay2).autoretain() def _got_score_results(self, results: Optional[Dict[str, Any]]) -> None: @@ -1020,7 +1020,7 @@ class CoopScoreScreen(ba.Activity): ba.Lstr(resource='worldScoresUnavailableText'), position=(230, 150 + v_offs), color=(1, 1, 1, 0.4), - transition='fade_in', + transition=Text.Transition.FADE_IN, transition_delay=base_delay + 0.3, scale=0.7) else: @@ -1071,7 +1071,7 @@ class CoopScoreScreen(ba.Activity): ts_height / 2 + 6 + v_offs), color=(0.4, 0.4, 0.4, 1.0), scale=0.7, - transition='in_right', + transition=Text.Transition.IN_RIGHT, transition_delay=base_delay + 0.3).autoretain() else: v_offs += 20 @@ -1129,22 +1129,22 @@ class CoopScoreScreen(ba.Activity): position=(ts_h_offs + 20 + h_offs_extra, ts_height / 2 + -ts_height * (i + 1) / 10 + v_offs + 11.0), - h_align='right', - v_align='center', + h_align=Text.HAlign.RIGHT, + v_align=Text.VAlign.CENTER, color=color0, flash=flash, - transition='in_left', + transition=Text.Transition.IN_LEFT, transition_delay=tdelay1).autoretain() Text(ba.Lstr(value=name_str), position=(ts_h_offs + 35 + h_offs_extra, ts_height / 2 + -ts_height * (i + 1) / 10 + v_offs_names + v_offs + 11.0), maxwidth=80.0 + 100.0 * len(self._player_info), - v_align='center', + v_align=Text.VAlign.CENTER, color=color1, flash=flash, scale=scale, - transition='in_left', + transition=Text.Transition.IN_LEFT, transition_delay=tdelay2).autoretain() def _show_tips(self) -> None: @@ -1222,9 +1222,9 @@ class CoopScoreScreen(ba.Activity): Text(ba.Lstr(resource='coopSelectWindow.prizesText'), position=(-360, -70 + 77), color=(1, 1, 1, 0.7), - h_align='center', - v_align='center', - transition='fade_in', + h_align=Text.HAlign.CENTER, + v_align=Text.VAlign.CENTER, + transition=Text.Transition.FADE_IN, scale=1.0, maxwidth=300, transition_delay=2.0).autoretain() @@ -1233,18 +1233,18 @@ class CoopScoreScreen(ba.Activity): Text(rng, position=(-410 + 10, vval), color=(1, 1, 1, 0.7), - h_align='right', - v_align='center', - transition='fade_in', + h_align=Text.HAlign.RIGHT, + v_align=Text.VAlign.CENTER, + transition=Text.Transition.FADE_IN, scale=0.6, maxwidth=300, transition_delay=2.0).autoretain() Text(val, position=(-390 + 10, vval), color=(0.7, 0.7, 0.7, 1.0), - h_align='left', - v_align='center', - transition='fade_in', + h_align=Text.HAlign.LEFT, + v_align=Text.VAlign.CENTER, + transition=Text.Transition.FADE_IN, scale=0.8, maxwidth=300, transition_delay=2.0).autoretain() @@ -1266,9 +1266,9 @@ class CoopScoreScreen(ba.Activity): Text(ba.Lstr(translate=('serverResponses', error)), position=(0, -140), color=(1, 1, 1, 0.7), - h_align='center', - v_align='center', - transition='fade_in', + h_align=Text.HAlign.CENTER, + v_align=Text.VAlign.CENTER, + transition=Text.Transition.FADE_IN, scale=0.9, maxwidth=400, transition_delay=1.0).autoretain() @@ -1288,9 +1288,9 @@ class CoopScoreScreen(ba.Activity): subs=[('${A}', ba.Lstr(resource='rankText'))]), position=(0, 36), maxwidth=300, - transition='fade_in', - h_align='center', - v_align='center', + transition=Text.Transition.FADE_IN, + h_align=Text.HAlign.CENTER, + v_align=Text.VAlign.CENTER, transition_delay=0).autoretain() if best_player_rank is not None: Text(ba.Lstr(resource='currentStandingText', @@ -1298,8 +1298,8 @@ class CoopScoreScreen(ba.Activity): subs=[('${RANK}', str(best_player_rank))]), position=(0, -155), color=(1, 1, 1, 0.7), - h_align='center', - transition='fade_in', + h_align=Text.HAlign.CENTER, + transition=Text.Transition.FADE_IN, scale=0.7, transition_delay=1.0).autoretain() else: @@ -1360,9 +1360,9 @@ class CoopScoreScreen(ba.Activity): Text(score + ' =', position=(xval, -64 + offs_y), color=(0.6, 0.6, 0.6, 0.6), - h_align='center', - v_align='center', - transition='fade_in', + h_align=Text.HAlign.CENTER, + v_align=Text.VAlign.CENTER, + transition=Text.Transition.FADE_IN, scale=0.4, transition_delay=1.0).autoretain() stx = xval + 20 @@ -1398,8 +1398,8 @@ class CoopScoreScreen(ba.Activity): ]), position=(0, -155 if self._newly_complete else -145), color=(1, 1, 1, 0.7), - h_align='center', - transition='fade_in', + h_align=Text.HAlign.CENTER, + transition=Text.Transition.FADE_IN, scale=0.55, transition_delay=1.0).autoretain() @@ -1418,8 +1418,9 @@ class CoopScoreScreen(ba.Activity): position=(0, -165), color=(1, 1, 1, 0.7), flash=new_best, - h_align='center', - transition='in_right' if new_best else 'fade_in', + h_align=Text.HAlign.CENTER, + transition=(Text.Transition.IN_RIGHT + if new_best else Text.Transition.FADE_IN), scale=0.5, transition_delay=1.0).autoretain() @@ -1427,9 +1428,9 @@ class CoopScoreScreen(ba.Activity): subs=[('${A}', ba.Lstr(resource='ratingText'))]), position=(0, 36), maxwidth=300, - transition='fade_in', - h_align='center', - v_align='center', + transition=Text.Transition.FADE_IN, + h_align=Text.HAlign.CENTER, + v_align=Text.VAlign.CENTER, transition_delay=0).autoretain() ba.timer(0.35, ba.Call(ba.playsound, self._score_display_sound)) @@ -1449,11 +1450,11 @@ class CoopScoreScreen(ba.Activity): jitter=1.0).autoretain() if self._fail_message is not None: Text(self._fail_message, - h_align='center', + h_align=Text.HAlign.CENTER, position=(0, -130), maxwidth=300, color=(1, 1, 1, 0.5), - transition='fade_in', + transition=Text.Transition.FADE_IN, transition_delay=1.0).autoretain() ba.timer(0.35, ba.Call(ba.playsound, self._score_display_sound)) @@ -1480,8 +1481,8 @@ class CoopScoreScreen(ba.Activity): subs=[('${A}', ba.Lstr(resource='finalTimeText'))]), maxwidth=300, position=(0, 200), - transition='fade_in', - h_align='center', - v_align='center', + transition=Text.Transition.FADE_IN, + h_align=Text.HAlign.CENTER, + v_align=Text.VAlign.CENTER, transition_delay=0).autoretain() ba.timer(0.35, ba.Call(ba.playsound, self._score_display_sound)) diff --git a/assets/src/ba_data/python/bastd/activity/freeforallendscreen.py b/assets/src/ba_data/python/bastd/activity/freeforallendscreen.py index b4444642..09668007 100644 --- a/assets/src/ba_data/python/bastd/activity/freeforallendscreen.py +++ b/assets/src/ba_data/python/bastd/activity/freeforallendscreen.py @@ -97,8 +97,8 @@ class FreeForAllVictoryScoreScreenActivity(TeamsScoreScreenActivity): scale=scale * extrascale, color=((1.0, 0.7, 0.3, 1.0) if highlight else (0.7, 0.7, 0.7, 0.7)), - h_align='right', - transition='in_left', + h_align=Text.HAlign.RIGHT, + transition=Text.Transition.IN_LEFT, transition_delay=tdelay + delay, flash=flash).autoretain() @@ -115,9 +115,9 @@ class FreeForAllVictoryScoreScreenActivity(TeamsScoreScreenActivity): scale=1.05 * scale, position=(ts_h_offs - 0.0 * scale, y_base + (v_offs + 50.0) * scale), - h_align='center', + h_align=Text.HAlign.CENTER, color=(0.5, 0.5, 0.5, 0.5), - transition='in_left', + transition=Text.Transition.IN_LEFT, transition_delay=tdelay).autoretain() v_offs -= 25 @@ -163,10 +163,10 @@ class FreeForAllVictoryScoreScreenActivity(TeamsScoreScreenActivity): scale=0.75 * scale, position=(ts_h_offs - 50.0 * scale, y_base + (v_offs + 15.0) * scale), - h_align='left', - v_align='center', + h_align=Text.HAlign.LEFT, + v_align=Text.VAlign.CENTER, color=ba.safecolor(player.team.color + (1, )), - transition='in_left', + transition=Text.Transition.IN_LEFT, transition_delay=tdelay).autoretain() ba.timer( tdelay + delay2, @@ -187,9 +187,9 @@ class FreeForAllVictoryScoreScreenActivity(TeamsScoreScreenActivity): scale=0.55 * scale, position=(ts_h_offs - 95.0 * scale, y_base + (v_offs + 8.0) * scale), - h_align='right', + h_align=Text.HAlign.RIGHT, color=(0.6, 0.6, 0.6, 0.6), - transition='in_left', + transition=Text.Transition.IN_LEFT, transition_delay=tdelay).autoretain() ba.timer( tdelay + delay3, diff --git a/assets/src/ba_data/python/bastd/activity/multiteamendscreen.py b/assets/src/ba_data/python/bastd/activity/multiteamendscreen.py index 4a34ae84..d346c6cb 100644 --- a/assets/src/ba_data/python/bastd/activity/multiteamendscreen.py +++ b/assets/src/ba_data/python/bastd/activity/multiteamendscreen.py @@ -132,13 +132,13 @@ class TeamSeriesVictoryScoreScreenActivity(TeamsScoreScreenActivity): ]) Text(txt, - v_align='center', + v_align=Text.VAlign.CENTER, maxwidth=300, color=(0.5, 0.5, 0.5, 1.0), position=(0, 220), scale=1.2, - transition='inTopSlow', - h_align='center', + transition=Text.Transition.IN_TOP_SLOW, + h_align=Text.HAlign.CENTER, transition_delay=t_incr * 4).autoretain() win_score = (session.get_series_length() - 1) / 2 + 1 @@ -153,11 +153,11 @@ class TeamSeriesVictoryScoreScreenActivity(TeamsScoreScreenActivity): ('${LOSECOUNT}', str(lose_score))]), color=(0.5, 0.5, 0.5, 1.0), maxwidth=160, - v_align='center', + v_align=Text.VAlign.CENTER, position=(0, -215), scale=1.8, - transition='in_left', - h_align='center', + transition=Text.Transition.IN_LEFT, + h_align=Text.HAlign.CENTER, transition_delay=4.8 + t_incr * 4).autoretain() if self._is_ffa: @@ -179,11 +179,11 @@ class TeamSeriesVictoryScoreScreenActivity(TeamsScoreScreenActivity): if mvp is not None: Text(ba.Lstr(resource='mostValuablePlayerText'), color=(0.5, 0.5, 0.5, 1.0), - v_align='center', + v_align=Text.VAlign.CENTER, maxwidth=300, position=(180, ts_height / 2 + 15), - transition='in_left', - h_align='left', + transition=Text.Transition.IN_LEFT, + h_align=Text.HAlign.LEFT, transition_delay=tval).autoretain() tval += 4 * t_incr @@ -194,12 +194,12 @@ class TeamSeriesVictoryScoreScreenActivity(TeamsScoreScreenActivity): transition_delay=tval).autoretain() Text(ba.Lstr(value=mvp_name), position=(280, ts_height / 2 - 55 + 15 - 5), - h_align='left', - v_align='center', + h_align=Text.HAlign.LEFT, + v_align=Text.VAlign.CENTER, maxwidth=170, scale=1.3, color=ba.safecolor(mvp.team.color + (1, )), - transition='in_left', + transition=Text.Transition.IN_LEFT, transition_delay=tval).autoretain() tval += 4 * t_incr @@ -213,11 +213,11 @@ class TeamSeriesVictoryScoreScreenActivity(TeamsScoreScreenActivity): if mvp is not None: Text(ba.Lstr(resource='mostViolentPlayerText'), color=(0.5, 0.5, 0.5, 1.0), - v_align='center', + v_align=Text.VAlign.CENTER, maxwidth=300, position=(180, ts_height / 2 - 150 + v_extra + 15), - transition='in_left', - h_align='left', + transition=Text.Transition.IN_LEFT, + h_align=Text.HAlign.LEFT, transition_delay=tval).autoretain() Text(ba.Lstr(value='(${A})', subs=[('${A}', @@ -227,8 +227,8 @@ class TeamSeriesVictoryScoreScreenActivity(TeamsScoreScreenActivity): position=(260, ts_height / 2 - 150 - 15 + v_extra), color=(0.3, 0.3, 0.3, 1.0), scale=0.6, - h_align='left', - transition='in_left', + h_align=Text.HAlign.LEFT, + transition=Text.Transition.IN_LEFT, transition_delay=tval).autoretain() tval += 4 * t_incr @@ -239,11 +239,11 @@ class TeamSeriesVictoryScoreScreenActivity(TeamsScoreScreenActivity): transition_delay=tval).autoretain() Text(ba.Lstr(value=mvp_name), position=(270, ts_height / 2 - 150 - 30 - 36 + v_extra + 15), - h_align='left', - v_align='center', + h_align=Text.HAlign.LEFT, + v_align=Text.VAlign.CENTER, maxwidth=180, color=ba.safecolor(mvp.team.color + (1, )), - transition='in_left', + transition=Text.Transition.IN_LEFT, transition_delay=tval).autoretain() tval += 4 * t_incr @@ -258,11 +258,11 @@ class TeamSeriesVictoryScoreScreenActivity(TeamsScoreScreenActivity): if mkp is not None: Text(ba.Lstr(resource='mostViolatedPlayerText'), color=(0.5, 0.5, 0.5, 1.0), - v_align='center', + v_align=Text.VAlign.CENTER, maxwidth=300, position=(180, ts_height / 2 - 300 + v_extra + 15), - transition='in_left', - h_align='left', + transition=Text.Transition.IN_LEFT, + h_align=Text.HAlign.LEFT, transition_delay=tval).autoretain() Text(ba.Lstr(value='(${A})', subs=[('${A}', @@ -270,10 +270,10 @@ class TeamSeriesVictoryScoreScreenActivity(TeamsScoreScreenActivity): subs=[('${COUNT}', str(most_killed))])) ]), position=(260, ts_height / 2 - 300 - 15 + v_extra), - h_align='left', + h_align=Text.HAlign.LEFT, scale=0.6, color=(0.3, 0.3, 0.3, 1.0), - transition='in_left', + transition=Text.Transition.IN_LEFT, transition_delay=tval).autoretain() tval += 4 * t_incr Image(mkp.get_icon(), @@ -283,11 +283,11 @@ class TeamSeriesVictoryScoreScreenActivity(TeamsScoreScreenActivity): transition_delay=tval).autoretain() Text(ba.Lstr(value=mkp_name), position=(270, ts_height / 2 - 300 - 30 - 36 + v_extra + 15), - h_align='left', - v_align='center', + h_align=Text.HAlign.LEFT, + v_align=Text.VAlign.CENTER, color=ba.safecolor(mkp.team.color + (1, )), maxwidth=180, - transition='in_left', + transition=Text.Transition.IN_LEFT, transition_delay=tval).autoretain() tval += 4 * t_incr @@ -296,7 +296,7 @@ class TeamSeriesVictoryScoreScreenActivity(TeamsScoreScreenActivity): Text(ba.Lstr(resource='finalScoresText'), color=(0.5, 0.5, 0.5, 1.0), position=(ts_h_offs, ts_height / 2), - transition='in_right', + transition=Text.Transition.IN_RIGHT, transition_delay=tdelay).autoretain() tdelay += 4 * t_incr @@ -309,8 +309,8 @@ class TeamSeriesVictoryScoreScreenActivity(TeamsScoreScreenActivity): if self._is_ffa else str(prec.score), color=(0.5, 0.5, 0.5, 1.0), position=(ts_h_offs + 230, ts_height / 2 + v_offs), - h_align='right', - transition='in_right', + h_align=Text.HAlign.RIGHT, + transition=Text.Transition.IN_RIGHT, transition_delay=tdelay).autoretain() tdelay -= 4 * t_incr @@ -321,11 +321,11 @@ class TeamSeriesVictoryScoreScreenActivity(TeamsScoreScreenActivity): transition_delay=tdelay).autoretain() Text(ba.Lstr(value=name), position=(ts_h_offs - 50, ts_height / 2 + v_offs + 15), - h_align='left', - v_align='center', + h_align=Text.HAlign.LEFT, + v_align=Text.VAlign.CENTER, maxwidth=180, color=ba.safecolor(prec.team.color + (1, )), - transition='in_right', + transition=Text.Transition.IN_RIGHT, transition_delay=tdelay).autoretain() ba.timer(15.0, ba.WeakCall(self._show_tips)) diff --git a/assets/src/ba_data/python/bastd/activity/multiteamjoinscreen.py b/assets/src/ba_data/python/bastd/activity/multiteamjoinscreen.py index f7258c9f..1725892b 100644 --- a/assets/src/ba_data/python/bastd/activity/multiteamjoinscreen.py +++ b/assets/src/ba_data/python/bastd/activity/multiteamjoinscreen.py @@ -26,7 +26,7 @@ from typing import TYPE_CHECKING import ba from ba.internal import JoiningActivity -from bastd.actor import text as textactor +from bastd.actor.text import Text if TYPE_CHECKING: from typing import Any, Dict, Optional @@ -37,7 +37,7 @@ class TeamJoiningActivity(JoiningActivity): def __init__(self, settings: Dict[str, Any]): super().__init__(settings) - self._next_up_text: Optional[textactor.Text] = None + self._next_up_text: Optional[Text] = None def on_transition_in(self) -> None: from bastd.actor.controlsguide import ControlsGuide @@ -49,19 +49,19 @@ class TeamJoiningActivity(JoiningActivity): assert isinstance(session, ba.TeamBaseSession) # Show info about the next up game. - self._next_up_text = textactor.Text(ba.Lstr( + self._next_up_text = Text(ba.Lstr( value='${1} ${2}', subs=[('${1}', ba.Lstr(resource='upFirstText')), ('${2}', session.get_next_game_description())]), - h_attach='center', - scale=0.7, - v_attach='top', - h_align='center', - position=(0, -70), - flash=False, - color=(0.5, 0.5, 0.5, 1.0), - transition='fade_in', - transition_delay=5.0) + h_attach=Text.HAttach.CENTER, + scale=0.7, + v_attach=Text.VAttach.TOP, + h_align=Text.HAlign.CENTER, + position=(0, -70), + flash=False, + color=(0.5, 0.5, 0.5, 1.0), + transition=Text.Transition.FADE_IN, + transition_delay=5.0) # In teams mode, show our two team names. # FIXME: Lobby should handle this. @@ -72,28 +72,26 @@ class TeamJoiningActivity(JoiningActivity): ] if len(team_names) == 2: for i in range(2): - textactor.Text(team_names[i], - scale=0.7, - h_attach='center', - v_attach='top', - h_align='center', - position=(-200 + 350 * i, -100), - color=team_colors[i], - transition='fade_in').autoretain() + Text(team_names[i], + scale=0.7, + h_attach=Text.HAttach.CENTER, + v_attach=Text.VAttach.TOP, + h_align=Text.HAlign.CENTER, + position=(-200 + 350 * i, -100), + color=team_colors[i], + transition=Text.Transition.FADE_IN).autoretain() - textactor.Text(ba.Lstr(resource='mustInviteFriendsText', - subs=[ - ('${GATHER}', - ba.Lstr(resource='gatherWindow.titleText')) - ]), - h_attach='center', - scale=0.8, - host_only=True, - v_attach='center', - h_align='center', - position=(0, 0), - flash=False, - color=(0, 1, 0, 1.0), - transition='fade_in', - transition_delay=2.0, - transition_out_delay=7.0).autoretain() + Text(ba.Lstr(resource='mustInviteFriendsText', + subs=[('${GATHER}', + ba.Lstr(resource='gatherWindow.titleText'))]), + h_attach=Text.HAttach.CENTER, + scale=0.8, + host_only=True, + v_attach=Text.VAttach.CENTER, + h_align=Text.HAlign.CENTER, + position=(0, 0), + flash=False, + color=(0, 1, 0, 1.0), + transition=Text.Transition.FADE_IN, + transition_delay=2.0, + transition_out_delay=7.0).autoretain() diff --git a/assets/src/ba_data/python/bastd/activity/teamsscorescreen.py b/assets/src/ba_data/python/bastd/activity/teamsscorescreen.py index 6c8946f0..658aec0e 100644 --- a/assets/src/ba_data/python/bastd/activity/teamsscorescreen.py +++ b/assets/src/ba_data/python/bastd/activity/teamsscorescreen.py @@ -59,14 +59,14 @@ class TeamsScoreScreenActivity(ScoreScreenActivity): ]) Text(txt, maxwidth=900, - h_attach='center', - v_attach='bottom', - h_align='center', - v_align='center', + h_attach=Text.HAttach.CENTER, + v_attach=Text.VAttach.BOTTOM, + h_align=Text.HAlign.CENTER, + v_align=Text.VAlign.CENTER, position=(0, 53), flash=False, color=(0.3, 0.3, 0.35, 1.0), - transition='fade_in', + transition=Text.Transition.FADE_IN, transition_delay=2.0).autoretain() def show_player_scores(self, @@ -150,7 +150,7 @@ class TeamsScoreScreenActivity(ScoreScreenActivity): def _txt(x_offs: float, y_offs: float, text: ba.Lstr, - h_align: str = 'right', + h_align: Text.HAlign = Text.HAlign.RIGHT, extrascale: float = 1.0, maxwidth: Optional[float] = 120.0) -> None: Text(text, @@ -158,18 +158,23 @@ class TeamsScoreScreenActivity(ScoreScreenActivity): position=(ts_h_offs + x_offs * scale, ts_v_offset + (v_offs + y_offs + 4.0) * scale), h_align=h_align, - v_align='center', + v_align=Text.VAlign.CENTER, scale=0.8 * scale * extrascale, maxwidth=maxwidth, - transition='in_left', + transition=Text.Transition.IN_LEFT, transition_delay=tdelay).autoretain() session = self.session assert isinstance(session, ba.TeamBaseSession) tval = ba.Lstr(resource='gameLeadersText', subs=[('${COUNT}', str(session.get_game_number()))]) - _txt(180, 43, tval, h_align='center', extrascale=1.4, maxwidth=None) - _txt(-15, 4, ba.Lstr(resource='playerText'), h_align='left') + _txt(180, + 43, + tval, + h_align=Text.HAlign.CENTER, + extrascale=1.4, + maxwidth=None) + _txt(-15, 4, ba.Lstr(resource='playerText'), h_align=Text.HAlign.LEFT) _txt(180, 4, ba.Lstr(resource='killsText')) _txt(280, 4, ba.Lstr(resource='deathsText'), maxwidth=100) @@ -198,10 +203,10 @@ class TeamsScoreScreenActivity(ScoreScreenActivity): scale=scale, color=(1.0, 0.9, 0.5, 1.0) if highlight else (0.5, 0.5, 0.6, 0.5), - h_align='right', - v_align='center', + h_align=Text.HAlign.RIGHT, + v_align=Text.VAlign.CENTER, maxwidth=maxwidth, - transition='in_left', + transition=Text.Transition.IN_LEFT, transition_delay=tdelay + delay2).autoretain() for playerrec in player_records: @@ -218,10 +223,10 @@ class TeamsScoreScreenActivity(ScoreScreenActivity): scale=0.75 * scale, position=(ts_h_offs + 10.0 * scale, ts_v_offset + (v_offs + 15) * scale), - h_align='left', - v_align='center', + h_align=Text.HAlign.LEFT, + v_align=Text.VAlign.CENTER, color=ba.safecolor(playerrec.team.color + (1, )), - transition='in_left', + transition=Text.Transition.IN_LEFT, transition_delay=tdelay).autoretain() _scoretxt(str(playerrec.accum_kill_count), 180, playerrec.accum_kill_count == topkillcount, 100) diff --git a/assets/src/ba_data/python/bastd/actor/image.py b/assets/src/ba_data/python/bastd/actor/image.py index 6b4d1a32..7ed52cdc 100644 --- a/assets/src/ba_data/python/bastd/actor/image.py +++ b/assets/src/ba_data/python/bastd/actor/image.py @@ -146,7 +146,7 @@ class Image(ba.Actor): cmb.input0 = position[0] ba.animate(cmb, 'input1', keys) ba.animate(self.node, 'opacity', o_keys) - elif transition == 'inTopSlow': + elif transition == 'in_top_slow': keys = {transition_delay: 400, transition_delay + 3.5: position[1]} o_keys = {transition_delay: 0.0, transition_delay + 1.0: 1.0} cmb.input0 = position[0] diff --git a/assets/src/ba_data/python/bastd/actor/text.py b/assets/src/ba_data/python/bastd/actor/text.py index 3004cbd7..bd7ead64 100644 --- a/assets/src/ba_data/python/bastd/actor/text.py +++ b/assets/src/ba_data/python/bastd/actor/text.py @@ -21,29 +21,62 @@ """Defines Actor(s).""" from __future__ import annotations +from enum import Enum from typing import TYPE_CHECKING import ba if TYPE_CHECKING: - from typing import Any, Union, Tuple, Sequence + from typing import Any, Union, Tuple, Sequence, Optional class Text(ba.Actor): - """ Text with some tricks """ + """Text with some tricks.""" + + class Transition(Enum): + """Transition types for text.""" + FADE_IN = 'fade_in' + IN_RIGHT = 'in_right' + IN_LEFT = 'in_left' + IN_BOTTOM = 'in_bottom' + IN_BOTTOM_SLOW = 'in_bottom_slow' + IN_TOP_SLOW = 'in_top_slow' + + class HAlign(Enum): + """Horizontal alignment type.""" + LEFT = 'left' + CENTER = 'center' + RIGHT = 'right' + + class VAlign(Enum): + """Vertical alignment type.""" + NONE = 'none' + CENTER = 'center' + + class HAttach(Enum): + """Horizontal attach type.""" + LEFT = 'left' + CENTER = 'center' + RIGHT = 'right' + + class VAttach(Enum): + """Vertical attach type.""" + BOTTOM = 'bottom' + CENTER = 'center' + TOP = 'top' def __init__(self, text: Union[str, ba.Lstr], position: Tuple[float, float] = (0.0, 0.0), - h_align: str = 'left', - v_align: str = 'none', + h_align: HAlign = HAlign.LEFT, + v_align: VAlign = VAlign.NONE, color: Sequence[float] = (1.0, 1.0, 1.0, 1.0), - transition: str = None, + transition: Optional[Transition] = None, transition_delay: float = 0.0, flash: bool = False, - v_attach: str = 'center', - h_attach: str = 'center', + v_attach: VAttach = VAttach.CENTER, + h_attach: HAttach = HAttach.CENTER, scale: float = 1.0, transition_out_delay: float = None, maxwidth: float = None, @@ -63,11 +96,11 @@ class Text(ba.Actor): 'text': text, 'color': color, 'position': position, - 'h_align': h_align, + 'h_align': h_align.value, 'vr_depth': vr_depth, - 'v_align': v_align, - 'h_attach': h_attach, - 'v_attach': v_attach, + 'v_align': v_align.value, + 'h_attach': h_attach.value, + 'v_attach': v_attach.value, 'shadow': shadow, 'flatness': flatness, 'maxwidth': 0.0 if maxwidth is None else maxwidth, @@ -76,7 +109,7 @@ class Text(ba.Actor): 'scale': scale }) - if transition == 'fade_in': + if transition is self.Transition.FADE_IN: if flash: raise Exception("fixme: flash and fade-in" " currently cant both be on") @@ -127,18 +160,19 @@ class Text(ba.Actor): cmb = self.position_combine = ba.newnode('combine', owner=self.node, attrs={'size': 2}) - if transition == 'in_right': + + if transition is self.Transition.IN_RIGHT: keys = { - transition_delay: position[0] + 1.3, + transition_delay: position[0] + 1300, transition_delay + 0.2: position[0] } o_keys = {transition_delay: 0.0, transition_delay + 0.05: 1.0} ba.animate(cmb, 'input0', keys) cmb.input1 = position[1] ba.animate(self.node, 'opacity', o_keys) - elif transition == 'in_left': + elif transition is self.Transition.IN_LEFT: keys = { - transition_delay: position[0] - 1.3, + transition_delay: position[0] - 1300, transition_delay + 0.2: position[0] } o_keys = {transition_delay: 0.0, transition_delay + 0.05: 1.0} @@ -151,7 +185,7 @@ class Text(ba.Actor): ba.animate(cmb, 'input0', keys) cmb.input1 = position[1] ba.animate(self.node, 'opacity', o_keys) - elif transition == 'in_bottom_slow': + elif transition is self.Transition.IN_BOTTOM_SLOW: keys = { transition_delay: -100.0, transition_delay + 1.0: position[1] @@ -160,7 +194,7 @@ class Text(ba.Actor): cmb.input0 = position[0] ba.animate(cmb, 'input1', keys) ba.animate(self.node, 'opacity', o_keys) - elif transition == 'in_bottom': + elif transition is self.Transition.IN_BOTTOM: keys = { transition_delay: -100.0, transition_delay + 0.2: position[1] @@ -174,18 +208,21 @@ class Text(ba.Actor): cmb.input0 = position[0] ba.animate(cmb, 'input1', keys) ba.animate(self.node, 'opacity', o_keys) - elif transition == 'inTopSlow': + elif transition is self.Transition.IN_TOP_SLOW: keys = {transition_delay: 0.4, transition_delay + 3.5: position[1]} o_keys = {transition_delay: 0.0, transition_delay + 1.0: 1.0} cmb.input0 = position[0] ba.animate(cmb, 'input1', keys) ba.animate(self.node, 'opacity', o_keys) else: + if (transition is not self.Transition.FADE_IN + and transition is not None): + ba.print_error(f'Invalid transition: "{transition}"') cmb.input0 = position[0] cmb.input1 = position[1] cmb.connectattr('output', self.node, 'position') - # if we're transitioning out, die at the end of it + # If we're transitioning out, die at the end of it. if transition_out_delay is not None: ba.timer(transition_delay + transition_out_delay + 1.0, ba.WeakCall(self.handlemessage, ba.DieMessage())) diff --git a/assets/src/ba_data/python/bastd/mainmenu.py b/assets/src/ba_data/python/bastd/mainmenu.py index ae5c4816..8939cddf 100644 --- a/assets/src/ba_data/python/bastd/mainmenu.py +++ b/assets/src/ba_data/python/bastd/mainmenu.py @@ -286,7 +286,7 @@ class MainMenuActivity(ba.Activity): self._got_news(news) def _change_phrase(self) -> None: - from bastd.actor import text + from bastd.actor.text import Text # If our news is way out of date, lets re-request it; # otherwise, rotate our phrase. @@ -302,22 +302,22 @@ class MainMenuActivity(ba.Activity): val = self._phrases.pop() if val == '__ACH__': vrmode = app.vr_mode - text.Text(ba.Lstr(resource='nextAchievementsText'), - color=((1, 1, 1, 1) if vrmode else - (0.95, 0.9, 1, 0.4)), - host_only=True, - maxwidth=200, - position=(-300, -35), - h_align='right', - transition='fade_in', - scale=0.9 if vrmode else 0.7, - flatness=1.0 if vrmode else 0.6, - shadow=1.0 if vrmode else 0.5, - h_attach="center", - v_attach="top", - transition_delay=1.0, - transition_out_delay=self. - _message_duration).autoretain() + Text(ba.Lstr(resource='nextAchievementsText'), + color=((1, 1, 1, 1) if vrmode else + (0.95, 0.9, 1, 0.4)), + host_only=True, + maxwidth=200, + position=(-300, -35), + h_align=Text.HAlign.RIGHT, + transition=Text.Transition.FADE_IN, + scale=0.9 if vrmode else 0.7, + flatness=1.0 if vrmode else 0.6, + shadow=1.0 if vrmode else 0.5, + h_attach=Text.HAttach.CENTER, + v_attach=Text.VAttach.TOP, + transition_delay=1.0, + transition_out_delay=self._message_duration + ).autoretain() achs = [ a for a in app.achievements if not a.complete ]