bascenev1lib.activity.coopjoin
Functionality related to the co-op join screen.
1# Released under the MIT License. See LICENSE for details. 2# 3"""Functionality related to the co-op join screen.""" 4 5from __future__ import annotations 6 7import bascenev1 as bs 8 9 10class CoopJoinActivity(bs.JoinActivity): 11 """Join-screen for co-op mode.""" 12 13 # We can assume our session is a CoopSession. 14 session: bs.CoopSession 15 16 def __init__(self, settings: dict): 17 super().__init__(settings) 18 session = self.session 19 assert isinstance(session, bs.CoopSession) 20 21 def on_transition_in(self) -> None: 22 from bascenev1lib.actor.controlsguide import ControlsGuide 23 from bascenev1lib.actor.text import Text 24 25 super().on_transition_in() 26 assert isinstance(self.session, bs.CoopSession) 27 assert self.session.campaign 28 Text( 29 self.session.campaign.getlevel( 30 self.session.campaign_level_name 31 ).displayname, 32 scale=1.3, 33 h_attach=Text.HAttach.CENTER, 34 h_align=Text.HAlign.CENTER, 35 v_attach=Text.VAttach.TOP, 36 transition=Text.Transition.FADE_IN, 37 transition_delay=4.0, 38 color=(1, 1, 1, 0.6), 39 position=(0, -95), 40 ).autoretain() 41 ControlsGuide(delay=1.0).autoretain() 42 43 bs.pushcall(self._show_remaining_achievements) 44 45 def _show_remaining_achievements(self) -> None: 46 from bascenev1lib.actor.text import Text 47 48 app = bs.app 49 env = app.env 50 51 # We only show achievements and challenges for CoopGameActivities. 52 session = self.session 53 assert isinstance(session, bs.CoopSession) 54 gameinstance = session.get_current_game_instance() 55 if not isinstance(gameinstance, bs.CoopGameActivity): 56 return 57 58 delay = 1.0 59 vpos = -140.0 60 61 # Now list our remaining achievements for this level. 62 assert self.session.campaign is not None 63 assert isinstance(self.session, bs.CoopSession) 64 levelname = ( 65 self.session.campaign.name + ':' + self.session.campaign_level_name 66 ) 67 ts_h_offs = 60 68 69 # Show remaining achievements in some cases. 70 if app.classic is not None and not (env.demo or env.arcade): 71 achievements = [ 72 a 73 for a in app.classic.ach.achievements_for_coop_level(levelname) 74 if not a.complete 75 ] 76 have_achievements = bool(achievements) 77 achievements = [a for a in achievements if not a.complete] 78 vrmode = env.vr 79 if have_achievements: 80 Text( 81 bs.Lstr(resource='achievementsRemainingText'), 82 host_only=True, 83 position=(ts_h_offs - 10, vpos), 84 transition=Text.Transition.FADE_IN, 85 scale=1.1 * 0.76, 86 h_attach=Text.HAttach.LEFT, 87 v_attach=Text.VAttach.TOP, 88 color=(1, 1, 1.2, 1) if vrmode else (0.8, 0.8, 1, 1), 89 shadow=1.0, 90 flatness=1.0 if vrmode else 0.6, 91 transition_delay=delay, 92 ).autoretain() 93 hval = ts_h_offs + 50 94 vpos -= 35 95 for ach in achievements: 96 delay += 0.05 97 ach.create_display(hval, vpos, delay, style='in_game') 98 vpos -= 55 99 if not achievements: 100 Text( 101 bs.Lstr(resource='noAchievementsRemainingText'), 102 host_only=True, 103 position=(ts_h_offs + 15, vpos + 10), 104 transition=Text.Transition.FADE_IN, 105 scale=0.7, 106 h_attach=Text.HAttach.LEFT, 107 v_attach=Text.VAttach.TOP, 108 color=(1, 1, 1, 0.5), 109 transition_delay=delay + 0.5, 110 ).autoretain()
11class CoopJoinActivity(bs.JoinActivity): 12 """Join-screen for co-op mode.""" 13 14 # We can assume our session is a CoopSession. 15 session: bs.CoopSession 16 17 def __init__(self, settings: dict): 18 super().__init__(settings) 19 session = self.session 20 assert isinstance(session, bs.CoopSession) 21 22 def on_transition_in(self) -> None: 23 from bascenev1lib.actor.controlsguide import ControlsGuide 24 from bascenev1lib.actor.text import Text 25 26 super().on_transition_in() 27 assert isinstance(self.session, bs.CoopSession) 28 assert self.session.campaign 29 Text( 30 self.session.campaign.getlevel( 31 self.session.campaign_level_name 32 ).displayname, 33 scale=1.3, 34 h_attach=Text.HAttach.CENTER, 35 h_align=Text.HAlign.CENTER, 36 v_attach=Text.VAttach.TOP, 37 transition=Text.Transition.FADE_IN, 38 transition_delay=4.0, 39 color=(1, 1, 1, 0.6), 40 position=(0, -95), 41 ).autoretain() 42 ControlsGuide(delay=1.0).autoretain() 43 44 bs.pushcall(self._show_remaining_achievements) 45 46 def _show_remaining_achievements(self) -> None: 47 from bascenev1lib.actor.text import Text 48 49 app = bs.app 50 env = app.env 51 52 # We only show achievements and challenges for CoopGameActivities. 53 session = self.session 54 assert isinstance(session, bs.CoopSession) 55 gameinstance = session.get_current_game_instance() 56 if not isinstance(gameinstance, bs.CoopGameActivity): 57 return 58 59 delay = 1.0 60 vpos = -140.0 61 62 # Now list our remaining achievements for this level. 63 assert self.session.campaign is not None 64 assert isinstance(self.session, bs.CoopSession) 65 levelname = ( 66 self.session.campaign.name + ':' + self.session.campaign_level_name 67 ) 68 ts_h_offs = 60 69 70 # Show remaining achievements in some cases. 71 if app.classic is not None and not (env.demo or env.arcade): 72 achievements = [ 73 a 74 for a in app.classic.ach.achievements_for_coop_level(levelname) 75 if not a.complete 76 ] 77 have_achievements = bool(achievements) 78 achievements = [a for a in achievements if not a.complete] 79 vrmode = env.vr 80 if have_achievements: 81 Text( 82 bs.Lstr(resource='achievementsRemainingText'), 83 host_only=True, 84 position=(ts_h_offs - 10, vpos), 85 transition=Text.Transition.FADE_IN, 86 scale=1.1 * 0.76, 87 h_attach=Text.HAttach.LEFT, 88 v_attach=Text.VAttach.TOP, 89 color=(1, 1, 1.2, 1) if vrmode else (0.8, 0.8, 1, 1), 90 shadow=1.0, 91 flatness=1.0 if vrmode else 0.6, 92 transition_delay=delay, 93 ).autoretain() 94 hval = ts_h_offs + 50 95 vpos -= 35 96 for ach in achievements: 97 delay += 0.05 98 ach.create_display(hval, vpos, delay, style='in_game') 99 vpos -= 55 100 if not achievements: 101 Text( 102 bs.Lstr(resource='noAchievementsRemainingText'), 103 host_only=True, 104 position=(ts_h_offs + 15, vpos + 10), 105 transition=Text.Transition.FADE_IN, 106 scale=0.7, 107 h_attach=Text.HAttach.LEFT, 108 v_attach=Text.VAttach.TOP, 109 color=(1, 1, 1, 0.5), 110 transition_delay=delay + 0.5, 111 ).autoretain()
Join-screen for co-op mode.
17 def __init__(self, settings: dict): 18 super().__init__(settings) 19 session = self.session 20 assert isinstance(session, bs.CoopSession)
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.
The bascenev1.Session this bascenev1.Activity belongs to.
Raises a babase.SessionNotFoundError if the Session no longer exists.
22 def on_transition_in(self) -> None: 23 from bascenev1lib.actor.controlsguide import ControlsGuide 24 from bascenev1lib.actor.text import Text 25 26 super().on_transition_in() 27 assert isinstance(self.session, bs.CoopSession) 28 assert self.session.campaign 29 Text( 30 self.session.campaign.getlevel( 31 self.session.campaign_level_name 32 ).displayname, 33 scale=1.3, 34 h_attach=Text.HAttach.CENTER, 35 h_align=Text.HAlign.CENTER, 36 v_attach=Text.VAttach.TOP, 37 transition=Text.Transition.FADE_IN, 38 transition_delay=4.0, 39 color=(1, 1, 1, 0.6), 40 position=(0, -95), 41 ).autoretain() 42 ControlsGuide(delay=1.0).autoretain() 43 44 bs.pushcall(self._show_remaining_achievements)
Called when the Activity is first becoming visible.
Upon this call, the Activity should fade in backgrounds, start playing music, etc. It does not yet have access to players or teams, however. They remain owned by the previous Activity up until bascenev1.Activity.on_begin() is called.
Inherited Members
- bascenev1._activitytypes.JoinActivity
- is_joining_activity
- allow_kick_idle_players
- use_fixed_vr_overlay
- bascenev1._activity.Activity
- settings_raw
- teams
- players
- announce_player_deaths
- allow_pausing
- slow_motion
- inherits_slow_motion
- inherits_music
- inherits_vr_camera_offset
- inherits_vr_overlay_center
- inherits_tint
- allow_mid_activity_joins
- transition_time
- can_show_ad_on_death
- paused_text
- preloads
- lobby
- context
- globalsnode
- stats
- on_expire
- customdata
- expired
- playertype
- teamtype
- retain_actor
- add_actor_weak_ref
- on_player_join
- on_player_leave
- on_team_join
- on_team_leave
- on_transition_out
- on_begin
- 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