Source code for bascenev1lib.activity.coopjoin

# Released under the MIT License. See LICENSE for details.
#
"""Functionality related to the co-op join screen."""

from __future__ import annotations

from typing import override

import bascenev1 as bs


[docs] class CoopJoinActivity(bs.JoinActivity): """Join-screen for co-op mode.""" # We can assume our session is a CoopSession. session: bs.CoopSession def __init__(self, settings: dict): super().__init__(settings) session = self.session assert isinstance(session, bs.CoopSession)
[docs] @override def on_transition_in(self) -> None: from bascenev1lib.actor.controlsguide import ControlsGuide from bascenev1lib.actor.text import Text super().on_transition_in() assert isinstance(self.session, bs.CoopSession) assert self.session.campaign Text( self.session.campaign.getlevel( self.session.campaign_level_name ).displayname, scale=1.3, 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() ControlsGuide(delay=1.0).autoretain() bs.pushcall(self._show_remaining_achievements)
def _show_remaining_achievements(self) -> None: # pylint: disable=too-many-locals from bascenev1lib.actor.text import Text app = bs.app env = app.env # We only show achievements and challenges for CoopGameActivities. session = self.session assert isinstance(session, bs.CoopSession) gameinstance = session.get_current_game_instance() if not isinstance(gameinstance, bs.CoopGameActivity): return delay = 1.0 vpos = -140.0 # Now list our remaining achievements for this level. assert self.session.campaign is not None assert isinstance(self.session, bs.CoopSession) levelname = ( self.session.campaign.name + ':' + self.session.campaign_level_name ) ts_h_offs = 60 variant = bs.app.env.variant vart = type(variant) arcade_or_demo = variant is vart.ARCADE or variant is vart.DEMO # Show remaining achievements in some cases. if app.classic is not None and not arcade_or_demo: achievements = [ a for a in app.classic.ach.achievements_for_coop_level(levelname) if not a.complete ] have_achievements = bool(achievements) achievements = [a for a in achievements if not a.complete] vrmode = env.vr if have_achievements: Text( bs.Lstr(resource='achievementsRemainingText'), host_only=True, position=(ts_h_offs - 10, vpos), transition=Text.Transition.FADE_IN, scale=1.1 * 0.76, 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, transition_delay=delay, ).autoretain() hval = ts_h_offs + 50 vpos -= 35 for ach in achievements: delay += 0.05 ach.create_display(hval, vpos, delay, style='in_game') vpos -= 55 if not achievements: Text( bs.Lstr(resource='noAchievementsRemainingText'), host_only=True, position=(ts_h_offs + 15, vpos + 10), transition=Text.Transition.FADE_IN, scale=0.7, h_attach=Text.HAttach.LEFT, v_attach=Text.VAttach.TOP, color=(1, 1, 1, 0.5), transition_delay=delay + 0.5, ).autoretain()
# Docs-generation hack; import some stuff that we likely only forward-declared # in our actual source code so that docs tools can find it. from typing import (Coroutine, Any, Literal, Callable, Generator, Awaitable, Sequence, Self) import asyncio from concurrent.futures import Future from pathlib import Path from enum import Enum