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()
class CoopJoinActivity(bascenev1._activity.Activity[bascenev1._player.EmptyPlayer, bascenev1._team.EmptyTeam]):
 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.

CoopJoinActivity(settings: dict)
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.

session: bascenev1._session.Session

The bascenev1.Session this bascenev1.Activity belongs to.

Raises a babase.SessionNotFoundError if the Session no longer exists.

def on_transition_in(self) -> None:
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