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

195 lines
6 KiB
Python

# Released under the MIT License. See LICENSE for details.
#
"""UI functionality for linking accounts."""
from __future__ import annotations
import copy
import time
from typing import TYPE_CHECKING
import ba
import ba.internal
if TYPE_CHECKING:
from typing import Any
class AccountLinkWindow(ba.Window):
"""Window for linking accounts."""
def __init__(self, origin_widget: ba.Widget | None = None):
scale_origin: tuple[float, float] | None
if origin_widget is not None:
self._transition_out = 'out_scale'
scale_origin = origin_widget.get_screen_space_center()
transition = 'in_scale'
else:
self._transition_out = 'out_right'
scale_origin = None
transition = 'in_right'
bg_color = (0.4, 0.4, 0.5)
self._width = 560
self._height = 420
uiscale = ba.app.ui.uiscale
base_scale = (
1.65
if uiscale is ba.UIScale.SMALL
else 1.5
if uiscale is ba.UIScale.MEDIUM
else 1.1
)
super().__init__(
root_widget=ba.containerwidget(
size=(self._width, self._height),
transition=transition,
scale=base_scale,
scale_origin_stack_offset=scale_origin,
stack_offset=(0, -10)
if uiscale is ba.UIScale.SMALL
else (0, 0),
)
)
self._cancel_button = ba.buttonwidget(
parent=self._root_widget,
position=(40, self._height - 45),
size=(50, 50),
scale=0.7,
label='',
color=bg_color,
on_activate_call=self._cancel,
autoselect=True,
icon=ba.gettexture('crossOut'),
iconscale=1.2,
)
maxlinks = ba.internal.get_v1_account_misc_read_val(
'maxLinkAccounts', 5
)
ba.textwidget(
parent=self._root_widget,
position=(self._width * 0.5, self._height * 0.56),
size=(0, 0),
text=ba.Lstr(
resource=(
'accountSettingsWindow.linkAccountsInstructionsNewText'
),
subs=[('${COUNT}', str(maxlinks))],
),
maxwidth=self._width * 0.9,
color=ba.app.ui.infotextcolor,
max_height=self._height * 0.6,
h_align='center',
v_align='center',
)
ba.containerwidget(
edit=self._root_widget, cancel_button=self._cancel_button
)
ba.buttonwidget(
parent=self._root_widget,
position=(40, 30),
size=(200, 60),
label=ba.Lstr(
resource='accountSettingsWindow.linkAccountsGenerateCodeText'
),
autoselect=True,
on_activate_call=self._generate_press,
)
self._enter_code_button = ba.buttonwidget(
parent=self._root_widget,
position=(self._width - 240, 30),
size=(200, 60),
label=ba.Lstr(
resource='accountSettingsWindow.linkAccountsEnterCodeText'
),
autoselect=True,
on_activate_call=self._enter_code_press,
)
def _generate_press(self) -> None:
from bastd.ui import account
if ba.internal.get_v1_account_state() != 'signed_in':
account.show_sign_in_prompt()
return
ba.screenmessage(
ba.Lstr(resource='gatherWindow.requestingAPromoCodeText'),
color=(0, 1, 0),
)
ba.internal.add_transaction(
{
'type': 'ACCOUNT_LINK_CODE_REQUEST',
'expire_time': time.time() + 5,
}
)
ba.internal.run_transactions()
def _enter_code_press(self) -> None:
from bastd.ui import promocode
promocode.PromoCodeWindow(
modal=True, origin_widget=self._enter_code_button
)
ba.containerwidget(
edit=self._root_widget, transition=self._transition_out
)
def _cancel(self) -> None:
ba.containerwidget(
edit=self._root_widget, transition=self._transition_out
)
class AccountLinkCodeWindow(ba.Window):
"""Window showing code for account-linking."""
def __init__(self, data: dict[str, Any]):
self._width = 350
self._height = 200
uiscale = ba.app.ui.uiscale
super().__init__(
root_widget=ba.containerwidget(
size=(self._width, self._height),
color=(0.45, 0.63, 0.15),
transition='in_scale',
scale=(
1.8
if uiscale is ba.UIScale.SMALL
else 1.35
if uiscale is ba.UIScale.MEDIUM
else 1.0
),
)
)
self._data = copy.deepcopy(data)
ba.playsound(ba.getsound('cashRegister'))
ba.playsound(ba.getsound('swish'))
self._cancel_button = ba.buttonwidget(
parent=self._root_widget,
scale=0.5,
position=(40, self._height - 40),
size=(50, 50),
label='',
on_activate_call=self.close,
autoselect=True,
color=(0.45, 0.63, 0.15),
icon=ba.gettexture('crossOut'),
iconscale=1.2,
)
ba.containerwidget(
edit=self._root_widget, cancel_button=self._cancel_button
)
ba.textwidget(
parent=self._root_widget,
position=(self._width * 0.5, self._height * 0.5),
size=(0, 0),
color=(1.0, 3.0, 1.0),
scale=2.0,
h_align='center',
v_align='center',
text=data['code'],
maxwidth=self._width * 0.85,
)
def close(self) -> None:
"""close the window"""
ba.containerwidget(edit=self._root_widget, transition='out_scale')