vh-bombsquad-modded-server-.../dist/ba_data/python/bastd/ui/gather/abouttab.py
2024-06-06 19:50:58 +05:30

138 lines
4.3 KiB
Python

# Released under the MIT License. See LICENSE for details.
#
"""Defines the about tab in the gather UI."""
from __future__ import annotations
from typing import TYPE_CHECKING
import ba
import ba.internal
from bastd.ui.gather import GatherTab
if TYPE_CHECKING:
from bastd.ui.gather import GatherWindow
class AboutGatherTab(GatherTab):
"""The about tab in the gather UI"""
def __init__(self, window: GatherWindow) -> None:
super().__init__(window)
self._container: ba.Widget | None = None
def on_activate(
self,
parent_widget: ba.Widget,
tab_button: ba.Widget,
region_width: float,
region_height: float,
region_left: float,
region_bottom: float,
) -> ba.Widget:
party_button_label = (
'X'
if ba.app.iircade_mode
else ba.charstr(ba.SpecialChar.TOP_BUTTON)
)
message = ba.Lstr(
resource='gatherWindow.aboutDescriptionText',
subs=[
('${PARTY}', ba.charstr(ba.SpecialChar.PARTY_ICON)),
('${BUTTON}', party_button_label),
],
)
# Let's not talk about sharing in vr-mode; its tricky to fit more
# than one head in a VR-headset ;-)
if not ba.app.vr_mode:
message = ba.Lstr(
value='${A}\n\n${B}',
subs=[
('${A}', message),
(
'${B}',
ba.Lstr(
resource='gatherWindow.'
'aboutDescriptionLocalMultiplayerExtraText'
),
),
],
)
string_height = 400
include_invite = True
msc_scale = 1.1
c_height_2 = min(region_height, string_height * msc_scale + 100)
try_tickets = ba.internal.get_v1_account_misc_read_val(
'friendTryTickets', None
)
if try_tickets is None:
include_invite = False
self._container = ba.containerwidget(
parent=parent_widget,
position=(
region_left,
region_bottom + (region_height - c_height_2) * 0.5,
),
size=(region_width, c_height_2),
background=False,
selectable=include_invite,
)
ba.widget(edit=self._container, up_widget=tab_button)
ba.textwidget(
parent=self._container,
position=(
region_width * 0.5,
c_height_2 * (0.58 if include_invite else 0.5),
),
color=(0.6, 1.0, 0.6),
scale=msc_scale,
size=(0, 0),
maxwidth=region_width * 0.9,
max_height=c_height_2 * (0.7 if include_invite else 0.9),
h_align='center',
v_align='center',
text=message,
)
if include_invite:
ba.textwidget(
parent=self._container,
position=(region_width * 0.57, 35),
color=(0, 1, 0),
scale=0.6,
size=(0, 0),
maxwidth=region_width * 0.5,
h_align='right',
v_align='center',
flatness=1.0,
text=ba.Lstr(
resource='gatherWindow.inviteAFriendText',
subs=[('${COUNT}', str(try_tickets))],
),
)
ba.buttonwidget(
parent=self._container,
position=(region_width * 0.59, 10),
size=(230, 50),
color=(0.54, 0.42, 0.56),
textcolor=(0, 1, 0),
label=ba.Lstr(
resource='gatherWindow.inviteFriendsText',
fallback_resource='gatherWindow.getFriendInviteCodeText',
),
autoselect=True,
on_activate_call=ba.WeakCall(self._invite_to_try_press),
up_widget=tab_button,
)
return self._container
def _invite_to_try_press(self) -> None:
from bastd.ui.account import show_sign_in_prompt
from bastd.ui.appinvite import handle_app_invites_press
if ba.internal.get_v1_account_state() != 'signed_in':
show_sign_in_prompt()
return
handle_app_invites_press()