mirror of
https://github.com/RYDE-WORK/ballistica.git
synced 2026-01-19 13:25:31 +08:00
langs and more ui wiring
This commit is contained in:
parent
327324a08a
commit
1aa3e39ec5
88
.efrocachemap
generated
88
.efrocachemap
generated
@ -421,9 +421,9 @@
|
||||
"build/assets/ba_data/audio/zoeOw.ogg": "b2d705c31c9dcc1efdc71394764c3beb",
|
||||
"build/assets/ba_data/audio/zoePickup01.ogg": "e9366dc2d2b8ab8b0c4e2c14c02d0789",
|
||||
"build/assets/ba_data/audio/zoeScream01.ogg": "903e0e45ee9b3373e9d9ce20c814374e",
|
||||
"build/assets/ba_data/data/langdata.json": "03810e5cca79c5fa092f47648060ca0f",
|
||||
"build/assets/ba_data/data/langdata.json": "7db4a04756081874702adcd3b295d9e8",
|
||||
"build/assets/ba_data/data/languages/arabic.json": "8f89f09ad168c251765efebde4c9069c",
|
||||
"build/assets/ba_data/data/languages/belarussian.json": "1004e5ea10b8deaef517fd37e9309521",
|
||||
"build/assets/ba_data/data/languages/belarussian.json": "0b60a9d4496d1213c2d0b647d346ce30",
|
||||
"build/assets/ba_data/data/languages/chinese.json": "3a8ad6b99e13152872962019b3eef49d",
|
||||
"build/assets/ba_data/data/languages/chinesetraditional.json": "904b35b656c53f9830e406565edd5120",
|
||||
"build/assets/ba_data/data/languages/croatian.json": "1e541070309ff6be95b0c39940aa7e99",
|
||||
@ -440,22 +440,22 @@
|
||||
"build/assets/ba_data/data/languages/hindi.json": "567e6976b3c72f891431ad7fcc62ab16",
|
||||
"build/assets/ba_data/data/languages/hungarian.json": "9d88004a98f0fbe2ea72edd5e0b3002e",
|
||||
"build/assets/ba_data/data/languages/indonesian.json": "2ccb3fe081ead7706dbebb1008a8bc4e",
|
||||
"build/assets/ba_data/data/languages/italian.json": "43735ea42d14c121bc14eace16f904a2",
|
||||
"build/assets/ba_data/data/languages/italian.json": "eabad2faba952c426876bc07e1490d09",
|
||||
"build/assets/ba_data/data/languages/korean.json": "4e3524327a0174250aff5e1ef4c0c597",
|
||||
"build/assets/ba_data/data/languages/malay.json": "f6ce0426d03a62612e3e436ed5d1be1f",
|
||||
"build/assets/ba_data/data/languages/persian.json": "2584895475fe62b3fe49a5ea5e69b4b1",
|
||||
"build/assets/ba_data/data/languages/piratespeak.json": "b9fe871e6331b7178cbacbf7eb3033aa",
|
||||
"build/assets/ba_data/data/languages/piratespeak.json": "7c7e3b72b87c1bcd5b04c9f64d912f0c",
|
||||
"build/assets/ba_data/data/languages/polish.json": "d0822d5d3bdd72ddb04dc3c43a0b1395",
|
||||
"build/assets/ba_data/data/languages/portuguese.json": "46649f4a8f3c5f69758e8b75ffacf439",
|
||||
"build/assets/ba_data/data/languages/portuguese.json": "b4463a05d65515f6812e1177c60ac666",
|
||||
"build/assets/ba_data/data/languages/romanian.json": "5ae206fe0b71c4015b02b86da8931c8f",
|
||||
"build/assets/ba_data/data/languages/russian.json": "72bdbb27ede61bbfeafbf81fa4a19e45",
|
||||
"build/assets/ba_data/data/languages/russian.json": "fc64ed6b6356ea11385ee5c20748425a",
|
||||
"build/assets/ba_data/data/languages/serbian.json": "623fa4129a1154c2f32ed7867e56ff6a",
|
||||
"build/assets/ba_data/data/languages/slovak.json": "3c08c748c96c71bd9e1d7291fb8817b6",
|
||||
"build/assets/ba_data/data/languages/spanish.json": "13f587058931acbb68a48981063ee5ff",
|
||||
"build/assets/ba_data/data/languages/spanish.json": "499b464318a8c9d1fb271cf480862b57",
|
||||
"build/assets/ba_data/data/languages/swedish.json": "3b179e7333183c70adb0811246b09959",
|
||||
"build/assets/ba_data/data/languages/tamil.json": "ead39b864228696a9b0d19344bc4b5ec",
|
||||
"build/assets/ba_data/data/languages/thai.json": "383540a1e9c7c131ac579f51afc87471",
|
||||
"build/assets/ba_data/data/languages/turkish.json": "440cb59e69ed689018c17d4be0fb4696",
|
||||
"build/assets/ba_data/data/languages/turkish.json": "ccec3224e41bee03f798d9c1a7d23342",
|
||||
"build/assets/ba_data/data/languages/ukrainian.json": "6063d27c9d6ed013b2b64ff452433621",
|
||||
"build/assets/ba_data/data/languages/venetian.json": "abebcc38ca2655578e65428cc0dd3c45",
|
||||
"build/assets/ba_data/data/languages/vietnamese.json": "59f6686890ceac2b0ac92597751a18ca",
|
||||
@ -4103,42 +4103,42 @@
|
||||
"build/assets/windows/Win32/ucrtbased.dll": "bfd1180c269d3950b76f35a63655e9e1",
|
||||
"build/assets/windows/Win32/vc_redist.x86.exe": "15a5f1f876503885adbdf5b3989b3718",
|
||||
"build/assets/windows/Win32/vcruntime140d.dll": "865b2af4d1e26a1a8073c89acb06e599",
|
||||
"build/prefab/full/linux_arm64_gui/debug/ballisticakit": "350b2bde93ebd0b898af75e7c537593e",
|
||||
"build/prefab/full/linux_arm64_gui/release/ballisticakit": "aa93eac2ca5e2b585bc58007a9a7374d",
|
||||
"build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "195d8e78d9598bd94d6912de4c7c08f1",
|
||||
"build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "e5f9cd858fb8b699fd79fe75a54acdcb",
|
||||
"build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "5455d6b73d70b60390f2455cd145f6fd",
|
||||
"build/prefab/full/linux_x86_64_gui/release/ballisticakit": "b2eda8f3cb29e99157e47852aad17930",
|
||||
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "eb3cc9dc20632ce84d1b2cd4d3072ea8",
|
||||
"build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "b3f2fce44e5552093825190b763826a8",
|
||||
"build/prefab/full/mac_arm64_gui/debug/ballisticakit": "20b8de1495c2d82e079e6ea1ea720888",
|
||||
"build/prefab/full/mac_arm64_gui/release/ballisticakit": "a624bd02b74589a097aa265e7c42fc10",
|
||||
"build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "25630bca72b77a6dc56013ee0e8367a3",
|
||||
"build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "030e2ee45f19c69770e079d48a474b7c",
|
||||
"build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "ee59e9bf36b46e574f33a3826430b5d2",
|
||||
"build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "70ce8264ec98aa3de411838c6aaa329b",
|
||||
"build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "68bd3725e087fac142979f9f5c1d0dc3",
|
||||
"build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "c69217389ecaf461af3b9a25a9ddb7c0",
|
||||
"build/prefab/lib/linux_arm64_gui/debug/libballisticaplus.a": "678f8cbc0a31cf59f86211804f3d18f3",
|
||||
"build/prefab/lib/linux_arm64_gui/release/libballisticaplus.a": "658a1267cf8454e74dd7a43d4921a862",
|
||||
"build/prefab/lib/linux_arm64_server/debug/libballisticaplus.a": "678f8cbc0a31cf59f86211804f3d18f3",
|
||||
"build/prefab/lib/linux_arm64_server/release/libballisticaplus.a": "658a1267cf8454e74dd7a43d4921a862",
|
||||
"build/prefab/lib/linux_x86_64_gui/debug/libballisticaplus.a": "5dfc9ffb40df78765dee25eed63b4d30",
|
||||
"build/prefab/lib/linux_x86_64_gui/release/libballisticaplus.a": "9c65f68f604202158a6c7486eeb985a9",
|
||||
"build/prefab/lib/linux_x86_64_server/debug/libballisticaplus.a": "5dfc9ffb40df78765dee25eed63b4d30",
|
||||
"build/prefab/lib/linux_x86_64_server/release/libballisticaplus.a": "9c65f68f604202158a6c7486eeb985a9",
|
||||
"build/prefab/lib/mac_arm64_gui/debug/libballisticaplus.a": "4e5e0cac71feae718dfcccdeaa03eba1",
|
||||
"build/prefab/lib/mac_arm64_gui/release/libballisticaplus.a": "c54e70ec873ecab76c655c20e13f595e",
|
||||
"build/prefab/lib/mac_arm64_server/debug/libballisticaplus.a": "4e5e0cac71feae718dfcccdeaa03eba1",
|
||||
"build/prefab/lib/mac_arm64_server/release/libballisticaplus.a": "c54e70ec873ecab76c655c20e13f595e",
|
||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "07b2fb0516fce4cce2bd1be0ec4a72ba",
|
||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "af473b4892a9e38c0e7a377534002639",
|
||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "0197ca506582361947be75ee7d3872cd",
|
||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "bf721fa759cc404b78b12467ece5158c",
|
||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "469d1e980701c71ff59e027ed3bf194e",
|
||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "616ac71908f70c7073007cc6be0097bf",
|
||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "587ce43506de3fb122481b9fba5a29e8",
|
||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "e733a9814771f96448c055071fefec20",
|
||||
"build/prefab/full/linux_arm64_gui/debug/ballisticakit": "6a6b5a81a0398637ab032501ebef45e0",
|
||||
"build/prefab/full/linux_arm64_gui/release/ballisticakit": "e25e7120708abad6a26c202e3f43f2a1",
|
||||
"build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "38c6cd9d1fda895d5438a127cc4025df",
|
||||
"build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "58391fd251fa3698fd60e49f8ffab8dd",
|
||||
"build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "de106a0d319b579487b3f49d9a839de0",
|
||||
"build/prefab/full/linux_x86_64_gui/release/ballisticakit": "e02ae01dc7922b1324a506805aade940",
|
||||
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "dfffbd298de9818511e85a92b9b896f2",
|
||||
"build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "b778c94e161a86c69c9d9279a33f99e2",
|
||||
"build/prefab/full/mac_arm64_gui/debug/ballisticakit": "e16970fb9f8cf72e74a957126feff8f2",
|
||||
"build/prefab/full/mac_arm64_gui/release/ballisticakit": "081674ba8c39a729d0ca0cdd4e18e7c5",
|
||||
"build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "05690b982897eab49ca81b44ccf128a9",
|
||||
"build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "66622ba04928e7c27a2fc56188fa199d",
|
||||
"build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "b4719f8a13595a66c706597c7f8d5af4",
|
||||
"build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "2c946e8429e6e30c31ff233ff12e40ba",
|
||||
"build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "05f5752ee8889cda4c084b5475872aea",
|
||||
"build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "81a6e9ea469430c4d3e960d998e80f93",
|
||||
"build/prefab/lib/linux_arm64_gui/debug/libballisticaplus.a": "70370c724e34f5e84c2af6ea3a5c70a4",
|
||||
"build/prefab/lib/linux_arm64_gui/release/libballisticaplus.a": "59bd83efb949ff66e8845ee1b6f04deb",
|
||||
"build/prefab/lib/linux_arm64_server/debug/libballisticaplus.a": "70370c724e34f5e84c2af6ea3a5c70a4",
|
||||
"build/prefab/lib/linux_arm64_server/release/libballisticaplus.a": "59bd83efb949ff66e8845ee1b6f04deb",
|
||||
"build/prefab/lib/linux_x86_64_gui/debug/libballisticaplus.a": "a102df2262d65b3e7368be2092c39032",
|
||||
"build/prefab/lib/linux_x86_64_gui/release/libballisticaplus.a": "bd88ede126790cb71c571817ba97a055",
|
||||
"build/prefab/lib/linux_x86_64_server/debug/libballisticaplus.a": "a102df2262d65b3e7368be2092c39032",
|
||||
"build/prefab/lib/linux_x86_64_server/release/libballisticaplus.a": "bd88ede126790cb71c571817ba97a055",
|
||||
"build/prefab/lib/mac_arm64_gui/debug/libballisticaplus.a": "82c4761b385f40fbb78c4538ce22356f",
|
||||
"build/prefab/lib/mac_arm64_gui/release/libballisticaplus.a": "48c26b5899970ceaeaa09d47de7537dc",
|
||||
"build/prefab/lib/mac_arm64_server/debug/libballisticaplus.a": "82c4761b385f40fbb78c4538ce22356f",
|
||||
"build/prefab/lib/mac_arm64_server/release/libballisticaplus.a": "48c26b5899970ceaeaa09d47de7537dc",
|
||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "f911b4274de1beffbd32edbcb66ebff8",
|
||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "0e4e1340b2dbe074546d3831af9d115a",
|
||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "7f67b5ed4ce5c72103f0eb920597e8c9",
|
||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "9c706ceda2432513ecb3bb14b57ccab8",
|
||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "e95a15ac3ed57d1177a2a877feb7de15",
|
||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "77453446385b7a35a7e9b16f42009616",
|
||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "e4d1fb62b0a0a67e92c7a20461acd18d",
|
||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "956281fe24cdd7c420440c47334f3bf9",
|
||||
"src/assets/ba_data/python/babase/_mgen/__init__.py": "f885fed7f2ed98ff2ba271f9dbe3391c",
|
||||
"src/assets/ba_data/python/babase/_mgen/enums.py": "794d258d59fd17a61752843a9a0551ad",
|
||||
"src/ballistica/base/mgen/pyembed/binding_base.inc": "06042d31df0ff9af96b99477162e2a91",
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
### 1.7.37 (build 22130, api 9, 2024-12-06)
|
||||
### 1.7.37 (build 22133, api 9, 2024-12-12)
|
||||
- Bumping api version to 9. As you'll see below, there's some UI changes that
|
||||
will require a bit of work for any UI mods to adapt to. If your mods don't
|
||||
touch UI stuff at all you can simply bump your api version and call it a day.
|
||||
|
||||
@ -5,7 +5,7 @@ furo==2024.8.6
|
||||
mypy==1.13.0
|
||||
pbxproj==4.2.1
|
||||
pdoc==15.0.0
|
||||
pur==7.3.2
|
||||
pur==7.3.3
|
||||
pylint==3.3.2
|
||||
pylsp-mypy==0.6.9
|
||||
pytest==8.3.4
|
||||
|
||||
@ -33,7 +33,7 @@ class NetworkSubsystem:
|
||||
# that a nearby server has been pinged.
|
||||
self.zone_pings: dict[str, float] = {}
|
||||
|
||||
# For debugging.
|
||||
# For debugging/progress.
|
||||
self.v1_test_log: str = ''
|
||||
self.v1_ctest_results: dict[int, str] = {}
|
||||
self.connectivity_state = 'uninited'
|
||||
|
||||
@ -202,8 +202,9 @@ class ClassicAppMode(babase.AppMode):
|
||||
print(f'GOT SUB TEST UPDATE: {val}')
|
||||
|
||||
def _on_classic_account_data_change(
|
||||
self, val: bacommon.cloud.ClassicAccountLiveData
|
||||
self, val: bacommon.cloud.BSClassicAccountLiveData
|
||||
) -> None:
|
||||
# print('ACCOUNT CHANGED', val)
|
||||
achp = round(val.achievements / max(val.achievements_total, 1) * 100.0)
|
||||
ibc = str(val.inbox_count)
|
||||
if val.inbox_count_is_max:
|
||||
|
||||
@ -53,7 +53,7 @@ if TYPE_CHECKING:
|
||||
|
||||
# Build number and version of the ballistica binary we expect to be
|
||||
# using.
|
||||
TARGET_BALLISTICA_BUILD = 22130
|
||||
TARGET_BALLISTICA_BUILD = 22133
|
||||
TARGET_BALLISTICA_VERSION = '1.7.37'
|
||||
|
||||
|
||||
|
||||
@ -202,7 +202,7 @@ class CloudSubsystem(babase.AppSubsystem):
|
||||
|
||||
def subscribe_classic_account_data(
|
||||
self,
|
||||
updatecall: Callable[[bacommon.cloud.ClassicAccountLiveData], None],
|
||||
updatecall: Callable[[bacommon.cloud.BSClassicAccountLiveData], None],
|
||||
) -> babase.CloudSubscription:
|
||||
"""Subscribe to classic account data."""
|
||||
raise NotImplementedError(
|
||||
|
||||
@ -369,7 +369,15 @@ class AccountSettingsWindow(bui.MainWindow):
|
||||
show_manage_account_button = primary_v2_account is not None
|
||||
manage_account_button_space = 70.0
|
||||
|
||||
show_delete_account_button = primary_v2_account is not None
|
||||
# Apple asks us to make a delete-account button directly
|
||||
# available in the UI. Currently disabling this elsewhere
|
||||
# however as I feel that poking 'Manage Account' and scrolling
|
||||
# down to 'Delete Account' is not hard to find.
|
||||
show_delete_account_button = primary_v2_account is not None and (
|
||||
bui.app.classic is not None
|
||||
and bui.app.classic.platform == 'mac'
|
||||
and bui.app.classic.subplatform == 'appstore'
|
||||
)
|
||||
delete_account_button_space = 70.0
|
||||
|
||||
show_link_accounts_button = self._v1_signed_in and (
|
||||
|
||||
@ -4,7 +4,6 @@
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import time
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
import bauiv1 as bui
|
||||
@ -49,12 +48,6 @@ class WaitForConnectivityWindow(bui.Window):
|
||||
self._on_cancel = on_cancel
|
||||
self._width = 650
|
||||
self._height = 300
|
||||
self._infos: list[str | bui.Lstr] = [
|
||||
'This can take a few moments, especially on first launch.',
|
||||
'Make sure your internet connection is working.',
|
||||
]
|
||||
self._last_info_switch_time = time.monotonic()
|
||||
self._info_index = 0
|
||||
super().__init__(
|
||||
root_widget=bui.containerwidget(
|
||||
size=(self._width, self._height),
|
||||
@ -69,21 +62,23 @@ class WaitForConnectivityWindow(bui.Window):
|
||||
scale=1.2,
|
||||
h_align='center',
|
||||
v_align='center',
|
||||
text='Locating nearest regional servers...',
|
||||
text=bui.Lstr(resource='internal.connectingToPartyText'),
|
||||
maxwidth=self._width * 0.9,
|
||||
)
|
||||
self._info_text = bui.textwidget(
|
||||
parent=self._root_widget,
|
||||
position=(self._width * 0.5, self._height * 0.45),
|
||||
size=(0, 0),
|
||||
color=(0.7, 0.6, 0.7),
|
||||
color=(0.6, 0.5, 0.6),
|
||||
flatness=1.0,
|
||||
scale=0.8,
|
||||
shadow=0.0,
|
||||
scale=0.75,
|
||||
h_align='center',
|
||||
v_align='center',
|
||||
text=self._infos[0],
|
||||
text='',
|
||||
maxwidth=self._width * 0.9,
|
||||
)
|
||||
self._info_text_str = ''
|
||||
cancel_button = bui.buttonwidget(
|
||||
parent=self._root_widget,
|
||||
autoselect=True,
|
||||
@ -98,7 +93,6 @@ class WaitForConnectivityWindow(bui.Window):
|
||||
)
|
||||
|
||||
def _update(self) -> None:
|
||||
now = time.monotonic()
|
||||
|
||||
plus = bui.app.plus
|
||||
assert plus is not None
|
||||
@ -107,12 +101,16 @@ class WaitForConnectivityWindow(bui.Window):
|
||||
self._connected()
|
||||
return
|
||||
|
||||
if now - self._last_info_switch_time > 5.0:
|
||||
self._info_index = (self._info_index + 1) % len(self._infos)
|
||||
bui.textwidget(
|
||||
edit=self._info_text, text=self._infos[self._info_index]
|
||||
)
|
||||
self._last_info_switch_time = now
|
||||
# Show what connectivity is up to if we don't have any published
|
||||
# zone-pings yet (or if we do but there's no transport state to
|
||||
# show yet).
|
||||
if not bui.app.net.zone_pings or not bui.app.net.transport_state:
|
||||
infotext = bui.app.net.connectivity_state
|
||||
else:
|
||||
infotext = bui.app.net.transport_state
|
||||
if infotext != self._info_text_str:
|
||||
self._info_text_str = infotext
|
||||
bui.textwidget(edit=self._info_text, text=infotext)
|
||||
|
||||
def _connected(self) -> None:
|
||||
if not self._root_widget or self._root_widget.transitioning_out:
|
||||
|
||||
@ -36,16 +36,12 @@ class _MessageEntry:
|
||||
class InboxWindow(bui.MainWindow):
|
||||
"""Popup window to show account messages."""
|
||||
|
||||
def __del__(self) -> None:
|
||||
print('~InboxWindow()')
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
transition: str | None = 'in_right',
|
||||
origin_widget: bui.Widget | None = None,
|
||||
):
|
||||
|
||||
print('InboxWindow()')
|
||||
assert bui.app.classic is not None
|
||||
uiscale = bui.app.ui_v1.uiscale
|
||||
|
||||
@ -63,9 +59,7 @@ class InboxWindow(bui.MainWindow):
|
||||
root_widget=bui.containerwidget(
|
||||
size=(self._width, self._height),
|
||||
toolbar_visibility=(
|
||||
'menu_minimal'
|
||||
if uiscale is bui.UIScale.SMALL
|
||||
else 'menu_full'
|
||||
'menu_full' if uiscale is bui.UIScale.SMALL else 'menu_full'
|
||||
),
|
||||
scale=(
|
||||
2.3
|
||||
@ -119,15 +113,29 @@ class InboxWindow(bui.MainWindow):
|
||||
color=bui.app.ui_v1.title_color,
|
||||
)
|
||||
|
||||
# Shows 'loading', 'no messages', etc.
|
||||
self._infotext = bui.textwidget(
|
||||
parent=self._root_widget,
|
||||
position=(self._width * 0.5, self._height * 0.5),
|
||||
maxwidth=self._width * 0.7,
|
||||
scale=0.5,
|
||||
flatness=1.0,
|
||||
color=(0.4, 0.4, 0.5),
|
||||
shadow=0.0,
|
||||
text=bui.Lstr(resource='loadingText'),
|
||||
size=(0, 0),
|
||||
h_align='center',
|
||||
v_align='center',
|
||||
)
|
||||
self._scrollwidget = bui.scrollwidget(
|
||||
parent=self._root_widget,
|
||||
size=(
|
||||
self._width - 60,
|
||||
self._height - (150 if uiscale is bui.UIScale.SMALL else 70),
|
||||
self._height - (170 if uiscale is bui.UIScale.SMALL else 70),
|
||||
),
|
||||
position=(
|
||||
30,
|
||||
(110 if uiscale is bui.UIScale.SMALL else 30) + yoffs,
|
||||
(133 if uiscale is bui.UIScale.SMALL else 30) + yoffs,
|
||||
),
|
||||
capture_arrows=True,
|
||||
simple_culling_v=200,
|
||||
@ -172,17 +180,9 @@ class InboxWindow(bui.MainWindow):
|
||||
def _error(self, errmsg: bui.Lstr | str) -> None:
|
||||
"""Put ourself in a permanent error state."""
|
||||
bui.textwidget(
|
||||
parent=self._root_widget,
|
||||
position=(self._width * 0.5, self._height * 0.5),
|
||||
maxwidth=self._width * 0.7,
|
||||
scale=1.0,
|
||||
flatness=1.0,
|
||||
edit=self._infotext,
|
||||
color=(1, 0, 0),
|
||||
shadow=0.0,
|
||||
text=errmsg,
|
||||
size=(0, 0),
|
||||
h_align='center',
|
||||
v_align='center',
|
||||
)
|
||||
|
||||
def _on_message_entry_press(
|
||||
@ -315,7 +315,21 @@ class InboxWindow(bui.MainWindow):
|
||||
|
||||
# Whee; no error. Mark as done.
|
||||
if button is not None:
|
||||
bui.buttonwidget(edit=button, label=bui.Lstr(resource='doneText'))
|
||||
# For positive claim buttons, say 'success'.
|
||||
# Otherwise default to 'done.'
|
||||
if (
|
||||
entry.type
|
||||
in {
|
||||
bacommon.cloud.BSInboxEntryType.CLAIM,
|
||||
bacommon.cloud.BSInboxEntryType.CLAIM_DISCARD,
|
||||
}
|
||||
and process_type
|
||||
is bacommon.cloud.BSInboxEntryProcessType.POSITIVE
|
||||
):
|
||||
label = bui.Lstr(resource='successText')
|
||||
else:
|
||||
label = bui.Lstr(resource='doneText')
|
||||
bui.buttonwidget(edit=button, label=label)
|
||||
|
||||
def _on_inbox_request_response(
|
||||
self, response: bacommon.cloud.BSInboxRequestResponse | Exception
|
||||
@ -350,20 +364,14 @@ class InboxWindow(bui.MainWindow):
|
||||
# keyboard control working in the empty case.
|
||||
if not response.entries:
|
||||
bui.textwidget(
|
||||
parent=self._root_widget,
|
||||
position=(self._width * 0.5, self._height * 0.5),
|
||||
maxwidth=self._width * 0.7,
|
||||
scale=1.0,
|
||||
flatness=1.0,
|
||||
color=(0.4, 0.4, 0.4),
|
||||
shadow=0.0,
|
||||
edit=self._infotext,
|
||||
color=(0.4, 0.4, 0.5),
|
||||
text=bui.Lstr(resource='noMessagesText'),
|
||||
size=(0, 0),
|
||||
h_align='center',
|
||||
v_align='center',
|
||||
)
|
||||
return
|
||||
|
||||
bui.textwidget(edit=self._infotext, text='')
|
||||
|
||||
sub_width = self._width - 90
|
||||
sub_height = 0.0
|
||||
|
||||
|
||||
@ -66,8 +66,8 @@ auto BasePlatform::GetPublicDeviceUUID() -> std::string {
|
||||
// We used to plug version in directly here, but that caused uuids to
|
||||
// shuffle too rapidly during periods of rapid development. This
|
||||
// keeps it more constant.
|
||||
// __last_rand_uuid_component_shuffle_date__ 2024 6 13
|
||||
auto rand_uuid_component{"1URRE62C7234VP9L1BUPJ1P7QT7Q8YW3"};
|
||||
// __last_rand_uuid_component_shuffle_date__ 2024 12 11
|
||||
auto rand_uuid_component{"ACIMGEQUN3F6CIUMFYO3X6GYLPTTSPOZ"};
|
||||
|
||||
inputs.emplace_back(rand_uuid_component);
|
||||
auto gil{Python::ScopedInterpreterLock()};
|
||||
|
||||
@ -39,7 +39,7 @@ auto main(int argc, char** argv) -> int {
|
||||
namespace ballistica {
|
||||
|
||||
// These are set automatically via script; don't modify them here.
|
||||
const int kEngineBuildNumber = 22130;
|
||||
const int kEngineBuildNumber = 22133;
|
||||
const char* kEngineVersion = "1.7.37";
|
||||
const int kEngineApiVersion = 9;
|
||||
|
||||
|
||||
@ -18,11 +18,12 @@
|
||||
|
||||
namespace ballistica::ui_v1 {
|
||||
|
||||
#define TOOLBAR_OPACITY_2 1.0f
|
||||
static const float kBotLeftColorR{0.6f};
|
||||
static const float kBotLeftColorG{0.6f};
|
||||
static const float kBotLeftColorB{0.8f};
|
||||
|
||||
#define BOT_LEFT_COLOR_R 0.6
|
||||
#define BOT_LEFT_COLOR_G 0.6
|
||||
#define BOT_LEFT_COLOR_B 0.8
|
||||
// Flip this to true when we're ready to use levels.
|
||||
static const bool kShowLevels{false};
|
||||
|
||||
// For defining toolbar buttons.
|
||||
struct RootWidget::ButtonDef {
|
||||
@ -166,24 +167,30 @@ void RootWidget::AddMeter_(MeterType type, float h_align, float r, float g,
|
||||
bd.color_b = 0.5f;
|
||||
|
||||
bd.depth_min = 0.3f;
|
||||
bd.visibility_mask =
|
||||
(static_cast<uint32_t>(Widget::ToolbarVisibility::kMenuFull)
|
||||
| static_cast<uint32_t>(Widget::ToolbarVisibility::kMenuFullNoBack)
|
||||
| static_cast<uint32_t>(Widget::ToolbarVisibility::kMenuFullRoot));
|
||||
|
||||
bd.allow_in_game = false;
|
||||
if (type == MeterType::kLevel && !kShowLevels) {
|
||||
// Keep levels hidden always.
|
||||
} else {
|
||||
bd.visibility_mask =
|
||||
(static_cast<uint32_t>(Widget::ToolbarVisibility::kMenuFull)
|
||||
| static_cast<uint32_t>(Widget::ToolbarVisibility::kMenuFullNoBack)
|
||||
| static_cast<uint32_t>(Widget::ToolbarVisibility::kMenuFullRoot));
|
||||
|
||||
// Show some in store mode.
|
||||
if (type == MeterType::kLevel || type == MeterType::kTickets) {
|
||||
bd.visibility_mask |=
|
||||
static_cast<uint32_t>(Widget::ToolbarVisibility::kMenuStore)
|
||||
| static_cast<uint32_t>(Widget::ToolbarVisibility::kMenuStoreNoBack);
|
||||
}
|
||||
// Show some in get-tokens/tokens mode
|
||||
if (type == MeterType::kTokens) {
|
||||
bd.visibility_mask |=
|
||||
static_cast<uint32_t>(Widget::ToolbarVisibility::kGetTokens)
|
||||
| static_cast<uint32_t>(Widget::ToolbarVisibility::kMenuTokens);
|
||||
bd.allow_in_game = false;
|
||||
|
||||
// Show some in store mode.
|
||||
if (type == MeterType::kLevel || type == MeterType::kTickets) {
|
||||
bd.visibility_mask |=
|
||||
static_cast<uint32_t>(Widget::ToolbarVisibility::kMenuStore)
|
||||
| static_cast<uint32_t>(
|
||||
Widget::ToolbarVisibility::kMenuStoreNoBack);
|
||||
}
|
||||
// Show some in get-tokens/tokens mode
|
||||
if (type == MeterType::kTokens) {
|
||||
bd.visibility_mask |=
|
||||
static_cast<uint32_t>(Widget::ToolbarVisibility::kGetTokens)
|
||||
| static_cast<uint32_t>(Widget::ToolbarVisibility::kMenuTokens);
|
||||
}
|
||||
}
|
||||
|
||||
// Adjust buffer between neighbors.
|
||||
@ -531,7 +538,7 @@ void RootWidget::Setup() {
|
||||
AddMeter_(MeterType::kLevel, 0.0f, 1.0f, 1.0f, 1.0f, false, "");
|
||||
AddMeter_(MeterType::kTrophy, 0.0f, 1.0f, 1.0f, 1.0f, false, "");
|
||||
|
||||
// Menu button (only shows up when we're not in a menu)
|
||||
// Menu button (only shows up when we're not in a menu).
|
||||
// FIXME - this should never be visible on TV or VR UI modes
|
||||
{
|
||||
ButtonDef b;
|
||||
@ -618,9 +625,9 @@ void RootWidget::Setup() {
|
||||
b.width = b.height = 60.0f;
|
||||
// b.x = bx;
|
||||
b.y = b.height * 0.5f + 2.0f;
|
||||
b.color_r = BOT_LEFT_COLOR_R;
|
||||
b.color_g = BOT_LEFT_COLOR_G;
|
||||
b.color_b = BOT_LEFT_COLOR_B;
|
||||
b.color_r = kBotLeftColorR;
|
||||
b.color_g = kBotLeftColorG;
|
||||
b.color_b = kBotLeftColorB;
|
||||
b.img = "logIcon";
|
||||
b.call = UIV1Python::ObjID::kRootUIInboxButtonPressCall;
|
||||
b.visibility_mask =
|
||||
@ -675,9 +682,9 @@ void RootWidget::Setup() {
|
||||
b.v_align = VAlign::kBottom;
|
||||
b.width = b.height = 60.0f;
|
||||
b.y = b.height * 0.5f + 2.0f;
|
||||
b.color_r = BOT_LEFT_COLOR_R;
|
||||
b.color_g = BOT_LEFT_COLOR_G;
|
||||
b.color_b = BOT_LEFT_COLOR_B;
|
||||
b.color_r = kBotLeftColorR;
|
||||
b.color_g = kBotLeftColorG;
|
||||
b.color_b = kBotLeftColorB;
|
||||
b.img = "achievementsIcon";
|
||||
b.call = UIV1Python::ObjID::kRootUIAchievementsButtonPressCall;
|
||||
b.visibility_mask =
|
||||
@ -717,9 +724,9 @@ void RootWidget::Setup() {
|
||||
b.width = b.height = 60.0f;
|
||||
// b.x = bx;
|
||||
b.y = b.height * 0.5f + 2.0f;
|
||||
b.color_r = BOT_LEFT_COLOR_R;
|
||||
b.color_g = BOT_LEFT_COLOR_G;
|
||||
b.color_b = BOT_LEFT_COLOR_B;
|
||||
b.color_r = kBotLeftColorR;
|
||||
b.color_g = kBotLeftColorG;
|
||||
b.color_b = kBotLeftColorB;
|
||||
b.img = "leaderboardsIcon";
|
||||
b.visibility_mask =
|
||||
(static_cast<uint32_t>(Widget::ToolbarVisibility::kMenuFull)
|
||||
@ -737,9 +744,9 @@ void RootWidget::Setup() {
|
||||
b.width = b.height = 60.0f;
|
||||
// b.x = bx;
|
||||
b.y = b.height * 0.58f - 2.0f;
|
||||
b.color_r = BOT_LEFT_COLOR_R;
|
||||
b.color_g = BOT_LEFT_COLOR_G;
|
||||
b.color_b = BOT_LEFT_COLOR_B;
|
||||
b.color_r = kBotLeftColorR;
|
||||
b.color_g = kBotLeftColorG;
|
||||
b.color_b = kBotLeftColorB;
|
||||
b.img = "settingsIcon";
|
||||
b.call = UIV1Python::ObjID::kRootUISettingsButtonPressCall;
|
||||
b.visibility_mask =
|
||||
@ -1023,9 +1030,9 @@ void RootWidget::UpdateForFocusedWindow_(Widget* widget) {
|
||||
}
|
||||
|
||||
void RootWidget::StepChildWidgets_(float dt) {
|
||||
// Hitches tend to break our math and cause buttons to overshoot on
|
||||
// their transitions in and then back up. So let's limit our max dt
|
||||
// to about what ~30fps would give us.
|
||||
// Hitches tend to break our math and cause buttons to overshoot on their
|
||||
// transitions in and then back up. So let's limit our max dt to about
|
||||
// what ~30fps would give us.
|
||||
dt = std::min(dt, 1000.0f / 30.0f);
|
||||
|
||||
if (!child_widgets_dirty_) {
|
||||
|
||||
@ -327,11 +327,29 @@ class BSPrivatePartyResponse(Response):
|
||||
datacode: Annotated[str | None, IOAttrs('d')]
|
||||
|
||||
|
||||
class BSClassicChestAppearance(Enum):
|
||||
"""Appearances bombsquad classic chests can have."""
|
||||
|
||||
UNKNOWN = 'u'
|
||||
DEFAULT = 'd'
|
||||
|
||||
|
||||
@ioprepped
|
||||
@dataclass
|
||||
class ClassicAccountLiveData:
|
||||
class BSClassicAccountLiveData:
|
||||
"""Account related data kept up to date live for classic app mode."""
|
||||
|
||||
@dataclass
|
||||
class Chest:
|
||||
"""A lovely chest."""
|
||||
|
||||
appearance: Annotated[
|
||||
BSClassicChestAppearance,
|
||||
IOAttrs('a', enum_fallback=BSClassicChestAppearance.UNKNOWN),
|
||||
]
|
||||
unlock_time: Annotated[datetime.datetime, IOAttrs('t')]
|
||||
ad_unlock_time: Annotated[datetime.datetime | None, IOAttrs('at')]
|
||||
|
||||
class LeagueType(Enum):
|
||||
"""Type of league we are in."""
|
||||
|
||||
@ -359,6 +377,8 @@ class ClassicAccountLiveData:
|
||||
inbox_count: Annotated[int, IOAttrs('ibc')]
|
||||
inbox_count_is_max: Annotated[bool, IOAttrs('ibcm')]
|
||||
|
||||
chests: Annotated[dict[str, Chest], IOAttrs('c')]
|
||||
|
||||
|
||||
class BSInboxEntryType(Enum):
|
||||
"""Types of entries that can be in an inbox."""
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user