# Released under the MIT License. See LICENSE for details.
#
"""Functionality related to the join screen for multi-team sessions."""
from __future__ import annotations
from typing import override
import bascenev1 as bs
from bascenev1lib.actor.text import Text
[docs]
class MultiTeamJoinActivity(bs.JoinActivity):
"""Join screen for teams sessions."""
def __init__(self, settings: dict):
super().__init__(settings)
self._next_up_text: Text | None = None
[docs]
@override
def on_transition_in(self) -> None:
from bascenev1lib.actor.controlsguide import ControlsGuide
super().on_transition_in()
ControlsGuide(delay=1.0).autoretain()
session = self.session
assert isinstance(session, bs.MultiTeamSession)
# Show info about the next up game.
self._next_up_text = Text(
bs.Lstr(
value='${1} ${2}',
subs=[
('${1}', bs.Lstr(resource='upFirstText')),
('${2}', session.get_next_game_description()),
],
),
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.
if isinstance(bs.getsession(), bs.DualTeamSession):
team_names = [team.name for team in bs.getsession().sessionteams]
team_colors = [
tuple(team.color) + (0.5,)
for team in bs.getsession().sessionteams
]
if len(team_names) == 2:
for i in range(2):
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()
Text(
bs.Lstr(
resource='mustInviteFriendsText',
subs=[
(
'${GATHER}',
bs.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()
# 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