Merge branch 'efroemling:main' into master

This commit is contained in:
Vishal 2024-07-25 23:46:40 +05:30 committed by GitHub
commit a1007b10fb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
46 changed files with 494 additions and 433 deletions

72
.efrocachemap generated
View File

@ -421,8 +421,8 @@
"build/assets/ba_data/audio/zoeOw.ogg": "74befe45a8417e95b6a2233c51992a26", "build/assets/ba_data/audio/zoeOw.ogg": "74befe45a8417e95b6a2233c51992a26",
"build/assets/ba_data/audio/zoePickup01.ogg": "48ab8cddfcde36a750856f3f81dd20c8", "build/assets/ba_data/audio/zoePickup01.ogg": "48ab8cddfcde36a750856f3f81dd20c8",
"build/assets/ba_data/audio/zoeScream01.ogg": "2b468aedfa8741090247f04eb9e6df55", "build/assets/ba_data/audio/zoeScream01.ogg": "2b468aedfa8741090247f04eb9e6df55",
"build/assets/ba_data/data/langdata.json": "e9c687b8c06c4b1df34a933a365ed9e7", "build/assets/ba_data/data/langdata.json": "7ff61ef00a1d673e0a303d09bd1d2bd6",
"build/assets/ba_data/data/languages/arabic.json": "c62b3037ef3364b84d4f8dd6610854f8", "build/assets/ba_data/data/languages/arabic.json": "c20d539d98b728bb7913c5dff68a5713",
"build/assets/ba_data/data/languages/belarussian.json": "3d5523d0004293aa2df02f3f6f3b84f8", "build/assets/ba_data/data/languages/belarussian.json": "3d5523d0004293aa2df02f3f6f3b84f8",
"build/assets/ba_data/data/languages/chinese.json": "2f67c6b127ae85492ac552af1a91e95a", "build/assets/ba_data/data/languages/chinese.json": "2f67c6b127ae85492ac552af1a91e95a",
"build/assets/ba_data/data/languages/chinesetraditional.json": "319565f8a15667488f48dbce59278e39", "build/assets/ba_data/data/languages/chinesetraditional.json": "319565f8a15667488f48dbce59278e39",
@ -430,12 +430,12 @@
"build/assets/ba_data/data/languages/czech.json": "74219f9b06ff098387b40f85a5b0124e", "build/assets/ba_data/data/languages/czech.json": "74219f9b06ff098387b40f85a5b0124e",
"build/assets/ba_data/data/languages/danish.json": "8e57db30c5250df2abff14a822f83ea7", "build/assets/ba_data/data/languages/danish.json": "8e57db30c5250df2abff14a822f83ea7",
"build/assets/ba_data/data/languages/dutch.json": "b0900d572c9141897d53d6574c471343", "build/assets/ba_data/data/languages/dutch.json": "b0900d572c9141897d53d6574c471343",
"build/assets/ba_data/data/languages/english.json": "ef2b554d37c256132ee9dcb4f6478c4e", "build/assets/ba_data/data/languages/english.json": "b88cb9e8035e238ccf327d62bde1d190",
"build/assets/ba_data/data/languages/esperanto.json": "0e397cfa5f3fb8cef5f4a64f21cda880", "build/assets/ba_data/data/languages/esperanto.json": "0e397cfa5f3fb8cef5f4a64f21cda880",
"build/assets/ba_data/data/languages/filipino.json": "b53910af2d3946d5ff81386e8c1d35a7", "build/assets/ba_data/data/languages/filipino.json": "f8d101b436fcf8f92f20a9983fb9fdee",
"build/assets/ba_data/data/languages/french.json": "b7d11199756f0eb4f1a745ceee652b2a", "build/assets/ba_data/data/languages/french.json": "b7d11199756f0eb4f1a745ceee652b2a",
"build/assets/ba_data/data/languages/german.json": "198b9860c5b9df7b8e3e30b03d8755cb", "build/assets/ba_data/data/languages/german.json": "198b9860c5b9df7b8e3e30b03d8755cb",
"build/assets/ba_data/data/languages/gibberish.json": "fd68975cb527ddd7b2b97e84a7ba22d7", "build/assets/ba_data/data/languages/gibberish.json": "becbb2e96a0d85661c1af9ebbf6bb2fb",
"build/assets/ba_data/data/languages/greek.json": "ad3c0d38f34d809824892d6f22808dbf", "build/assets/ba_data/data/languages/greek.json": "ad3c0d38f34d809824892d6f22808dbf",
"build/assets/ba_data/data/languages/hindi.json": "e56f0ffb57321660aa415e97c2dacfc2", "build/assets/ba_data/data/languages/hindi.json": "e56f0ffb57321660aa415e97c2dacfc2",
"build/assets/ba_data/data/languages/hungarian.json": "6b08fea24b72cc805ed0dc59e11c4cd6", "build/assets/ba_data/data/languages/hungarian.json": "6b08fea24b72cc805ed0dc59e11c4cd6",
@ -443,14 +443,14 @@
"build/assets/ba_data/data/languages/italian.json": "e1d69eb1eec31442bf981121c7cfaf17", "build/assets/ba_data/data/languages/italian.json": "e1d69eb1eec31442bf981121c7cfaf17",
"build/assets/ba_data/data/languages/korean.json": "4e3524327a0174250aff5e1ef4c0c597", "build/assets/ba_data/data/languages/korean.json": "4e3524327a0174250aff5e1ef4c0c597",
"build/assets/ba_data/data/languages/malay.json": "f6ce0426d03a62612e3e436ed5d1be1f", "build/assets/ba_data/data/languages/malay.json": "f6ce0426d03a62612e3e436ed5d1be1f",
"build/assets/ba_data/data/languages/persian.json": "64f162aed6f711d816c844e3fa1d2dcb", "build/assets/ba_data/data/languages/persian.json": "8e3a88cbb729570ffc8e0b06b3337a8f",
"build/assets/ba_data/data/languages/polish.json": "6585f57b1a389b8331b06f610bd8cc6f", "build/assets/ba_data/data/languages/polish.json": "6585f57b1a389b8331b06f610bd8cc6f",
"build/assets/ba_data/data/languages/portuguese.json": "615a59bd03f84659158d9f2608a4ab21", "build/assets/ba_data/data/languages/portuguese.json": "615a59bd03f84659158d9f2608a4ab21",
"build/assets/ba_data/data/languages/romanian.json": "ef68520f749cf3641d4e4225a6166349", "build/assets/ba_data/data/languages/romanian.json": "ef68520f749cf3641d4e4225a6166349",
"build/assets/ba_data/data/languages/russian.json": "4cb481af9d4e2611e0033235a045aa33", "build/assets/ba_data/data/languages/russian.json": "64f0b7347af86f8c4bec8ba8e781378d",
"build/assets/ba_data/data/languages/serbian.json": "d7452dd72ac0e51680cb39b5ebaa1c69", "build/assets/ba_data/data/languages/serbian.json": "d7452dd72ac0e51680cb39b5ebaa1c69",
"build/assets/ba_data/data/languages/slovak.json": "3c08c748c96c71bd9e1d7291fb8817b6", "build/assets/ba_data/data/languages/slovak.json": "3c08c748c96c71bd9e1d7291fb8817b6",
"build/assets/ba_data/data/languages/spanish.json": "485356283e4375a6b8b7cd06614319db", "build/assets/ba_data/data/languages/spanish.json": "ebb1552a3baabc9ce2588914a8e8563b",
"build/assets/ba_data/data/languages/swedish.json": "5142a96597d17d8344be96a603da64ac", "build/assets/ba_data/data/languages/swedish.json": "5142a96597d17d8344be96a603da64ac",
"build/assets/ba_data/data/languages/tamil.json": "b9fcc523639f55e05c7f4e7914f3321a", "build/assets/ba_data/data/languages/tamil.json": "b9fcc523639f55e05c7f4e7914f3321a",
"build/assets/ba_data/data/languages/thai.json": "1d665629361f302693dead39de8fa945", "build/assets/ba_data/data/languages/thai.json": "1d665629361f302693dead39de8fa945",
@ -4062,26 +4062,26 @@
"build/assets/windows/Win32/ucrtbased.dll": "2def5335207d41b21b9823f6805997f1", "build/assets/windows/Win32/ucrtbased.dll": "2def5335207d41b21b9823f6805997f1",
"build/assets/windows/Win32/vc_redist.x86.exe": "b08a55e2e77623fe657bea24f223a3ae", "build/assets/windows/Win32/vc_redist.x86.exe": "b08a55e2e77623fe657bea24f223a3ae",
"build/assets/windows/Win32/vcruntime140d.dll": "865b2af4d1e26a1a8073c89acb06e599", "build/assets/windows/Win32/vcruntime140d.dll": "865b2af4d1e26a1a8073c89acb06e599",
"build/prefab/full/linux_arm64_gui/debug/ballisticakit": "123ecb04f354552c15aa04d3d5047074", "build/prefab/full/linux_arm64_gui/debug/ballisticakit": "85d4c2662e2abce652fde0d3b11f5f31",
"build/prefab/full/linux_arm64_gui/release/ballisticakit": "b992b3d97a1b066a1a2b74911ed4a44d", "build/prefab/full/linux_arm64_gui/release/ballisticakit": "abdedd2ff24f241cb693c3f734f35679",
"build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "2ea1e068455ae6d7c0afd3ac5c1453bf", "build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "8ec0707c0a05ca3d012363633ff96365",
"build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "7b087cf909f3a71f97abd431c9dbce60", "build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "5d74f146e115277f321a95ff0d193d2f",
"build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "26a69101cb282d96d48d38032fe2ae73", "build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "91e60840bb7a51b5ea7f1c9336c10d6c",
"build/prefab/full/linux_x86_64_gui/release/ballisticakit": "2fca0da9ff9eaa5af16fb6801c4e7b81", "build/prefab/full/linux_x86_64_gui/release/ballisticakit": "563235f95a31f507cc4db271235b5e1b",
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "657ee4258b874631acf4e37028e512ec", "build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "f111c46d242d2370896a45b15028382b",
"build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "942499d3619e551deb7f5795e62e9022", "build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "08dcacd0cb57cd06745729891d188396",
"build/prefab/full/mac_arm64_gui/debug/ballisticakit": "5ea6ae7ac701fd0b51f3db6b0e554268", "build/prefab/full/mac_arm64_gui/debug/ballisticakit": "f67b1cea43f395056b9b6129db15e53e",
"build/prefab/full/mac_arm64_gui/release/ballisticakit": "be20cf570211f03f8b54c94e95caf579", "build/prefab/full/mac_arm64_gui/release/ballisticakit": "0d95c3f63599a7ddee8c5d7169854fb7",
"build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "c73fabf8be863554d5b899c7ea4a960e", "build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "370654005e3d1cfb39f5313f5793170f",
"build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "bf29cf0164a08a4aa139e39f20f50423", "build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "7a3ffc7cb1f32e0bfd8b2dc06fa7a8e7",
"build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "e2272883f9c7405402cb967f8e3b2b28", "build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "04dbc93723bd680b9f6985830d8511a7",
"build/prefab/full/mac_x86_64_gui/release/ballisticakit": "15f5b471a04313a13bac43c86f37eb72", "build/prefab/full/mac_x86_64_gui/release/ballisticakit": "658d41499889fd722d12ed73c4555c8a",
"build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "a7672fb4c4b14a1d88c3435cf2af9675", "build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "055ee3d6fdba5df2fff2fdf2e02fa935",
"build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "2f733fe4dc422b7d0db04a5ea017ab68", "build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "50e350ef3a319da5b7bcfc56c3cf8ab4",
"build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "d34cf623c2cca17fac7fdc0918de1202", "build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "94597d8d7110d688f2d080c600434938",
"build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "45dbf5edad5a9a71608ac1d6d1954923", "build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "7f837b03773e50bec77aff7f75d24ad4",
"build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "3002abd737297bf395eab0bd60c535d8", "build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "503686dca19cff9ed53561f6d7925978",
"build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "e9bf6aaa7e18bcf482223a29a609932e", "build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "932ea4fc1a2933d0185fd3317a19f8ad",
"build/prefab/lib/linux_arm64_gui/debug/libballisticaplus.a": "ffe8631c0ccc03751b4346fcf52d70ca", "build/prefab/lib/linux_arm64_gui/debug/libballisticaplus.a": "ffe8631c0ccc03751b4346fcf52d70ca",
"build/prefab/lib/linux_arm64_gui/release/libballisticaplus.a": "4241e93e1ea18414ee900046d1a62517", "build/prefab/lib/linux_arm64_gui/release/libballisticaplus.a": "4241e93e1ea18414ee900046d1a62517",
"build/prefab/lib/linux_arm64_server/debug/libballisticaplus.a": "ffe8631c0ccc03751b4346fcf52d70ca", "build/prefab/lib/linux_arm64_server/debug/libballisticaplus.a": "ffe8631c0ccc03751b4346fcf52d70ca",
@ -4098,14 +4098,14 @@
"build/prefab/lib/mac_x86_64_gui/release/libballisticaplus.a": "0f34f852bf368c787f41533230767b3a", "build/prefab/lib/mac_x86_64_gui/release/libballisticaplus.a": "0f34f852bf368c787f41533230767b3a",
"build/prefab/lib/mac_x86_64_server/debug/libballisticaplus.a": "1dcd03f0cfc75a53c3e682a3a46c96a0", "build/prefab/lib/mac_x86_64_server/debug/libballisticaplus.a": "1dcd03f0cfc75a53c3e682a3a46c96a0",
"build/prefab/lib/mac_x86_64_server/release/libballisticaplus.a": "0f34f852bf368c787f41533230767b3a", "build/prefab/lib/mac_x86_64_server/release/libballisticaplus.a": "0f34f852bf368c787f41533230767b3a",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "4a8ae45bb9474a0d8faccd195dded56f", "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "7771687267175d527366d72a3d26cc78",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "8eb224db25a69e2faed1c6897f73c8b6", "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "ee41412d34747620bad2a9d7e9d7d771",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "25740d352aec852365430d305655f0fe", "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "460b8f8f31ccce4ebd8b913c2322344c",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "3e19f73203116e9db0943e0c4485f459", "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "0b3fa6e71105821c81622dd3fadbcb89",
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "517d6fc942828b4c3de3972d6165238e", "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "40961c8d37205c6736f956d3880d0dba",
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "c681050518fde161af81ae356ec80027", "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "b952e8a67e93ba9ef0fadf93911ec3b7",
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "6689ba552f0a3761b6acc5375343dbe5", "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "6957f8ed5b15854711ba9a4f552f40dd",
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "3a6f2f59a965348b5e9b54562954da89", "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "31a0a4e90b8855dbbfcb6642ee2cb091",
"src/assets/ba_data/python/babase/_mgen/__init__.py": "f885fed7f2ed98ff2ba271f9dbe3391c", "src/assets/ba_data/python/babase/_mgen/__init__.py": "f885fed7f2ed98ff2ba271f9dbe3391c",
"src/assets/ba_data/python/babase/_mgen/enums.py": "cb299985623bbcc86015cb103a424ae6", "src/assets/ba_data/python/babase/_mgen/enums.py": "cb299985623bbcc86015cb103a424ae6",
"src/ballistica/base/mgen/pyembed/binding_base.inc": "efa61468cf098f77cc6a234461d8b86d", "src/ballistica/base/mgen/pyembed/binding_base.inc": "efa61468cf098f77cc6a234461d8b86d",

View File

@ -1,4 +1,4 @@
### 1.7.36 (build 21939, api 8, 2024-07-24) ### 1.7.36 (build 21942, api 8, 2024-07-25)
- Wired up Tokens, BombSquad's new purchasable currency. The first thing these - Wired up Tokens, BombSquad's new purchasable currency. The first thing these
can be used for is storage packs on ballistica.net, but this will expand to can be used for is storage packs on ballistica.net, but this will expand to
other places in the game soon. For a full explanation on why these were added, other places in the game soon. For a full explanation on why these were added,
@ -33,7 +33,16 @@
`functools.partial` so there's no benefit to maintaining our own special `functools.partial` so there's no benefit to maintaining our own special
version anymore. This also applies to `ba*.Call` which is redundant in the version anymore. This also applies to `ba*.Call` which is redundant in the
same way. Both `efro.call.tpartial` and `ba*.Call` will probably be marked same way. Both `efro.call.tpartial` and `ba*.Call` will probably be marked
deprecated and go away at some point. deprecated and go away at some point (or more likely simply not included in
newer apis such as bauiv2).
- Added a `Delete Account` button directly to the account section in-game.
- The app now includes build number when looking for custom sys scripts in the
mods dir. Previously it would have looked for something like `sys/1.7.36` but
now it will look for something like `sys/1.7.36_21940`. I was seeing a lot of
crash reports from people creating sys scripts using early builds of some
version and then upgrading to later builds of the same version containing
incompatibilities with the older sys scripts. This should help with that
problem.
### 1.7.35 (build 21889, api 8, 2024-06-20) ### 1.7.35 (build 21889, api 8, 2024-06-20)
- Fixed an issue where the engine would block at exit on some version of Linux - Fixed an issue where the engine would block at exit on some version of Linux

View File

@ -133,7 +133,10 @@ def create_user_system_scripts() -> None:
if env.python_directory_app is None: if env.python_directory_app is None:
raise RuntimeError('app python dir unset') raise RuntimeError('app python dir unset')
path = f'{env.python_directory_user}/sys/{env.engine_version}' path = (
f'{env.python_directory_user}/sys/'
f'{env.engine_version}_{env.engine_build_number}'
)
pathtmp = path + '_tmp' pathtmp = path + '_tmp'
if os.path.exists(path): if os.path.exists(path):
print('Delete Existing User Scripts first!') print('Delete Existing User Scripts first!')
@ -181,7 +184,10 @@ def delete_user_system_scripts() -> None:
if env.python_directory_user is None: if env.python_directory_user is None:
raise RuntimeError('user python dir unset') raise RuntimeError('user python dir unset')
path = f'{env.python_directory_user}/sys/{env.engine_version}' path = (
f'{env.python_directory_user}/sys/'
f'{env.engine_version}_{env.engine_build_number}'
)
if os.path.exists(path): if os.path.exists(path):
shutil.rmtree(path) shutil.rmtree(path)
print('User system scripts deleted.') print('User system scripts deleted.')

View File

@ -52,7 +52,7 @@ if TYPE_CHECKING:
# Build number and version of the ballistica binary we expect to be # Build number and version of the ballistica binary we expect to be
# using. # using.
TARGET_BALLISTICA_BUILD = 21939 TARGET_BALLISTICA_BUILD = 21942
TARGET_BALLISTICA_VERSION = '1.7.36' TARGET_BALLISTICA_VERSION = '1.7.36'
@ -348,12 +348,16 @@ def _setup_paths(
if user_python_dir is None: if user_python_dir is None:
user_python_dir = str(Path(config_dir, 'mods')) user_python_dir = str(Path(config_dir, 'mods'))
# Wherever our user_python_dir is, if we find a sys/FOO dir # Wherever our user_python_dir is, if we find a sys/FOO_BAR dir
# under it where FOO matches our version, use that as our # under it where FOO matches our version and BAR matches our
# app_python_dir. This allows modding built-in stuff on # build number, use that as our app_python_dir. This allows
# platforms where there is no write access to said built-in # modding built-in stuff on platforms where there is no write
# stuff. # access to said built-in stuff.
check_dir = Path(user_python_dir, 'sys', TARGET_BALLISTICA_VERSION) check_dir = Path(
user_python_dir,
'sys',
f'{TARGET_BALLISTICA_VERSION}_{TARGET_BALLISTICA_BUILD}',
)
try: try:
if check_dir.is_dir(): if check_dir.is_dir():
app_python_dir = str(check_dir) app_python_dir = str(check_dir)

View File

@ -274,9 +274,9 @@ class TutorialActivity(bs.Activity[Player, Team]):
# Need different versions of this: taps/buttons/keys. # Need different versions of this: taps/buttons/keys.
txt = ( txt = (
bs.Lstr(resource=self._r + '.cpuBenchmarkText') bs.Lstr(resource=f'{self._r}.cpuBenchmarkText')
if self._benchmark_type == 'cpu' if self._benchmark_type == 'cpu'
else bs.Lstr(resource=self._r + '.toSkipPressAnythingText') else bs.Lstr(resource=f'{self._r}.toSkipPressAnythingText')
) )
t = self._skip_text = bs.newnode( t = self._skip_text = bs.newnode(
'text', 'text',
@ -852,13 +852,13 @@ class TutorialActivity(bs.Activity[Player, Team]):
DelayOld(1000), DelayOld(1000),
AnalyticsScreen('Tutorial Section 1'), AnalyticsScreen('Tutorial Section 1'),
Text( Text(
bs.Lstr(resource=self._r + '.phrase01Text') bs.Lstr(resource=f'{self._r}.phrase01Text')
), # hi there ), # hi there
Celebrate('left'), Celebrate('left'),
DelayOld(2000), DelayOld(2000),
Text( Text(
bs.Lstr( bs.Lstr(
resource=self._r + '.phrase02Text', resource=f'{self._r}.phrase02Text',
subs=[ subs=[
('${APP_NAME}', bs.Lstr(resource='titleText')) ('${APP_NAME}', bs.Lstr(resource='titleText'))
], ],
@ -888,7 +888,7 @@ class TutorialActivity(bs.Activity[Player, Team]):
MoveUD(0), MoveUD(0),
DelayOld(1500), DelayOld(1500),
Text( Text(
bs.Lstr(resource=self._r + '.phrase03Text') bs.Lstr(resource=f'{self._r}.phrase03Text')
), # here's a few tips ), # here's a few tips
DelayOld(1000), DelayOld(1000),
ShowControls(), ShowControls(),
@ -900,7 +900,7 @@ class TutorialActivity(bs.Activity[Player, Team]):
AnalyticsScreen('Tutorial Section 2'), AnalyticsScreen('Tutorial Section 2'),
Text( Text(
bs.Lstr( bs.Lstr(
resource=self._r + '.phrase04Text', resource=f'{self._r}.phrase04Text',
subs=[ subs=[
('${APP_NAME}', bs.Lstr(resource='titleText')) ('${APP_NAME}', bs.Lstr(resource='titleText'))
], ],
@ -1261,7 +1261,7 @@ class TutorialActivity(bs.Activity[Player, Team]):
Move(0, 0), Move(0, 0),
DelayOld(1000), DelayOld(1000),
Text( Text(
bs.Lstr(resource=self._r + '.phrase05Text') bs.Lstr(resource=f'{self._r}.phrase05Text')
), # for example when you punch.. ), # for example when you punch..
DelayOld(510), DelayOld(510),
Move(0, -0.01), Move(0, -0.01),
@ -1279,7 +1279,7 @@ class TutorialActivity(bs.Activity[Player, Team]):
(-3.1, 4.3, -2.0), (-3.1, 4.3, -2.0),
make_current=False, make_current=False,
color=(1, 1, 0.4), color=(1, 1, 0.4),
name=bs.Lstr(resource=self._r + '.randomName1Text'), name=bs.Lstr(resource=f'{self._r}.randomName1Text'),
), ),
Move(-1.0, 0), Move(-1.0, 0),
DelayOld(1050), DelayOld(1050),
@ -1288,7 +1288,7 @@ class TutorialActivity(bs.Activity[Player, Team]):
Move(0, 0), Move(0, 0),
DelayOld(1000), DelayOld(1000),
Text( Text(
bs.Lstr(resource=self._r + '.phrase06Text') bs.Lstr(resource=f'{self._r}.phrase06Text')
), # your damage is based ), # your damage is based
DelayOld(1200), DelayOld(1200),
Move(-0.05, 0), Move(-0.05, 0),
@ -1304,12 +1304,12 @@ class TutorialActivity(bs.Activity[Player, Team]):
Move(0, 0), Move(0, 0),
Text( Text(
bs.Lstr( bs.Lstr(
resource=self._r + '.phrase07Text', resource=f'{self._r}.phrase07Text',
subs=[ subs=[
( (
'${NAME}', '${NAME}',
bs.Lstr( bs.Lstr(
resource=self._r + '.randomName1Text' resource=f'{self._r}.randomName1Text'
), ),
) )
], ],
@ -1319,7 +1319,7 @@ class TutorialActivity(bs.Activity[Player, Team]):
Celebrate('right', spaz_num=1), Celebrate('right', spaz_num=1),
DelayOld(1400), DelayOld(1400),
Text( Text(
bs.Lstr(resource=self._r + '.phrase08Text') bs.Lstr(resource=f'{self._r}.phrase08Text')
), # lets jump and spin to get more speed ), # lets jump and spin to get more speed
DelayOld(30), DelayOld(30),
MoveLR(0), MoveLR(0),
@ -1520,12 +1520,12 @@ class TutorialActivity(bs.Activity[Player, Team]):
Move(0, 0), Move(0, 0),
DelayOld(1000), DelayOld(1000),
Text( Text(
bs.Lstr(resource=self._r + '.phrase09Text') bs.Lstr(resource=f'{self._r}.phrase09Text')
), # ah that's better ), # ah that's better
DelayOld(1900), DelayOld(1900),
AnalyticsScreen('Tutorial Section 3'), AnalyticsScreen('Tutorial Section 3'),
Text( Text(
bs.Lstr(resource=self._r + '.phrase10Text') bs.Lstr(resource=f'{self._r}.phrase10Text')
), # running also helps ), # running also helps
DelayOld(100), DelayOld(100),
SpawnSpaz( SpawnSpaz(
@ -1536,11 +1536,11 @@ class TutorialActivity(bs.Activity[Player, Team]):
(3.3, 4.2, -5.8), (3.3, 4.2, -5.8),
make_current=False, make_current=False,
color=(0.9, 0.5, 1.0), color=(0.9, 0.5, 1.0),
name=bs.Lstr(resource=self._r + '.randomName2Text'), name=bs.Lstr(resource=f'{self._r}.randomName2Text'),
), ),
DelayOld(1800), DelayOld(1800),
Text( Text(
bs.Lstr(resource=self._r + '.phrase11Text') bs.Lstr(resource=f'{self._r}.phrase11Text')
), # hold ANY button to run ), # hold ANY button to run
DelayOld(300), DelayOld(300),
MoveUD(0), MoveUD(0),
@ -1797,7 +1797,7 @@ class TutorialActivity(bs.Activity[Player, Team]):
MoveUD(0), MoveUD(0),
AnalyticsScreen('Tutorial Section 4'), AnalyticsScreen('Tutorial Section 4'),
Text( Text(
bs.Lstr(resource=self._r + '.phrase12Text') bs.Lstr(resource=f'{self._r}.phrase12Text')
), # for extra-awesome punches,... ), # for extra-awesome punches,...
DelayOld(200), DelayOld(200),
SpawnSpaz( SpawnSpaz(
@ -1816,7 +1816,7 @@ class TutorialActivity(bs.Activity[Player, Team]):
make_current=False, make_current=False,
color=(1.0, 0.7, 0.3), color=(1.0, 0.7, 0.3),
# name=R.randomName3Text), # name=R.randomName3Text),
name=bs.Lstr(resource=self._r + '.randomName3Text'), name=bs.Lstr(resource=f'{self._r}.randomName3Text'),
), ),
DelayOld(100), DelayOld(100),
Powerup(1, (2.5, 0.0, 0), relative_to=0), Powerup(1, (2.5, 0.0, 0), relative_to=0),
@ -2015,12 +2015,12 @@ class TutorialActivity(bs.Activity[Player, Team]):
MoveLR(0), MoveLR(0),
Text( Text(
bs.Lstr( bs.Lstr(
resource=self._r + '.phrase13Text', resource=f'{self._r}.phrase13Text',
subs=[ subs=[
( (
'${NAME}', '${NAME}',
bs.Lstr( bs.Lstr(
resource=self._r + '.randomName3Text' resource=f'{self._r}.randomName3Text'
), ),
) )
], ],
@ -2031,12 +2031,12 @@ class TutorialActivity(bs.Activity[Player, Team]):
AnalyticsScreen('Tutorial Section 5'), AnalyticsScreen('Tutorial Section 5'),
Text( Text(
bs.Lstr( bs.Lstr(
resource=self._r + '.phrase14Text', resource=f'{self._r}.phrase14Text',
subs=[ subs=[
( (
'${NAME}', '${NAME}',
bs.Lstr( bs.Lstr(
resource=self._r + '.randomName4Text' resource=f'{self._r}.randomName4Text'
), ),
) )
], ],
@ -2055,7 +2055,7 @@ class TutorialActivity(bs.Activity[Player, Team]):
relative_to=0, relative_to=0,
make_current=False, make_current=False,
color=(0.4, 1.0, 0.7), color=(0.4, 1.0, 0.7),
name=bs.Lstr(resource=self._r + '.randomName4Text'), name=bs.Lstr(resource=f'{self._r}.randomName4Text'),
), ),
DelayOld(1000), DelayOld(1000),
Celebrate('left', 1, duration=1000), Celebrate('left', 1, duration=1000),
@ -2083,11 +2083,11 @@ class TutorialActivity(bs.Activity[Player, Team]):
), ),
AnalyticsScreen('Tutorial Section 6'), AnalyticsScreen('Tutorial Section 6'),
Text( Text(
bs.Lstr(resource=self._r + '.phrase15Text') bs.Lstr(resource=f'{self._r}.phrase15Text')
), # lastly there's bombs ), # lastly there's bombs
DelayOld(1900), DelayOld(1900),
Text( Text(
bs.Lstr(resource=self._r + '.phrase16Text') bs.Lstr(resource=f'{self._r}.phrase16Text')
), # throwing bombs takes practice ), # throwing bombs takes practice
DelayOld(2000), DelayOld(2000),
Bomb(), Bomb(),
@ -2099,11 +2099,11 @@ class TutorialActivity(bs.Activity[Player, Team]):
Bomb(), Bomb(),
DelayOld(2000), DelayOld(2000),
Text( Text(
bs.Lstr(resource=self._r + '.phrase17Text') bs.Lstr(resource=f'{self._r}.phrase17Text')
), # not a very good throw ), # not a very good throw
DelayOld(3000), DelayOld(3000),
Text( Text(
bs.Lstr(resource=self._r + '.phrase18Text') bs.Lstr(resource=f'{self._r}.phrase18Text')
), # moving helps you get distance ), # moving helps you get distance
DelayOld(1000), DelayOld(1000),
Bomb(), Bomb(),
@ -2121,7 +2121,7 @@ class TutorialActivity(bs.Activity[Player, Team]):
Move(0, 0), Move(0, 0),
DelayOld(2500), DelayOld(2500),
Text( Text(
bs.Lstr(resource=self._r + '.phrase19Text') bs.Lstr(resource=f'{self._r}.phrase19Text')
), # jumping helps you get height ), # jumping helps you get height
DelayOld(2000), DelayOld(2000),
Bomb(), Bomb(),
@ -2141,7 +2141,7 @@ class TutorialActivity(bs.Activity[Player, Team]):
Move(0, 0), Move(0, 0),
DelayOld(2000), DelayOld(2000),
Text( Text(
bs.Lstr(resource=self._r + '.phrase20Text') bs.Lstr(resource=f'{self._r}.phrase20Text')
), # whiplash your bombs ), # whiplash your bombs
DelayOld(1000), DelayOld(1000),
Bomb(release=False), Bomb(release=False),
@ -2303,7 +2303,7 @@ class TutorialActivity(bs.Activity[Player, Team]):
DelayOld(2000), DelayOld(2000),
AnalyticsScreen('Tutorial Section 7'), AnalyticsScreen('Tutorial Section 7'),
Text( Text(
bs.Lstr(resource=self._r + '.phrase21Text') bs.Lstr(resource=f'{self._r}.phrase21Text')
), # timing your bombs can be tricky ), # timing your bombs can be tricky
Move(-1, 0), Move(-1, 0),
DelayOld(1000), DelayOld(1000),
@ -2323,7 +2323,7 @@ class TutorialActivity(bs.Activity[Player, Team]):
relative_to=0, relative_to=0,
make_current=False, make_current=False,
color=(0.3, 0.8, 1.0), color=(0.3, 0.8, 1.0),
name=bs.Lstr(resource=self._r + '.randomName5Text'), name=bs.Lstr(resource=f'{self._r}.randomName5Text'),
), ),
DelayOld2(1000), DelayOld2(1000),
Move(-1, 0), Move(-1, 0),
@ -2341,12 +2341,12 @@ class TutorialActivity(bs.Activity[Player, Team]):
DelayOld2(1000), DelayOld2(1000),
Move(0, 0), Move(0, 0),
DelayOld2(1500), DelayOld2(1500),
Text(bs.Lstr(resource=self._r + '.phrase22Text')), # dang Text(bs.Lstr(resource=f'{self._r}.phrase22Text')), # dang
Delay(1500), Delay(1500),
Text(''), Text(''),
Delay(200), Delay(200),
Text( Text(
bs.Lstr(resource=self._r + '.phrase23Text') bs.Lstr(resource=f'{self._r}.phrase23Text')
), # try cooking off ), # try cooking off
Delay(1500), Delay(1500),
Bomb(), Bomb(),
@ -2362,7 +2362,7 @@ class TutorialActivity(bs.Activity[Player, Team]):
Move(0, 0), Move(0, 0),
Delay(2000), Delay(2000),
Text( Text(
bs.Lstr(resource=self._r + '.phrase24Text') bs.Lstr(resource=f'{self._r}.phrase24Text')
), # hooray nicely cooked ), # hooray nicely cooked
Celebrate(), Celebrate(),
DelayOld(2000), DelayOld(2000),
@ -2376,23 +2376,23 @@ class TutorialActivity(bs.Activity[Player, Team]):
DelayOld(1000), DelayOld(1000),
AnalyticsScreen('Tutorial Section 8'), AnalyticsScreen('Tutorial Section 8'),
Text( Text(
bs.Lstr(resource=self._r + '.phrase25Text') bs.Lstr(resource=f'{self._r}.phrase25Text')
), # well that's just about it ), # well that's just about it
DelayOld(2000), DelayOld(2000),
Text( Text(
bs.Lstr(resource=self._r + '.phrase26Text') bs.Lstr(resource=f'{self._r}.phrase26Text')
), # go get em tiger ), # go get em tiger
DelayOld(2000), DelayOld(2000),
Text( Text(
bs.Lstr(resource=self._r + '.phrase27Text') bs.Lstr(resource=f'{self._r}.phrase27Text')
), # remember you training ), # remember you training
DelayOld(3000), DelayOld(3000),
Text( Text(
bs.Lstr(resource=self._r + '.phrase28Text') bs.Lstr(resource=f'{self._r}.phrase28Text')
), # well maybe ), # well maybe
DelayOld(1600), DelayOld(1600),
Text( Text(
bs.Lstr(resource=self._r + '.phrase29Text') bs.Lstr(resource=f'{self._r}.phrase29Text')
), # good luck ), # good luck
Celebrate('right', duration=10000), Celebrate('right', duration=10000),
DelayOld(1000), DelayOld(1000),
@ -2440,7 +2440,7 @@ class TutorialActivity(bs.Activity[Player, Team]):
assert self._skip_count_text assert self._skip_count_text
self._skip_count_text.text = ( self._skip_count_text.text = (
bs.Lstr( bs.Lstr(
resource=self._r + '.skipVoteCountText', resource=f'{self._r}.skipVoteCountText',
subs=[ subs=[
('${COUNT}', str(count)), ('${COUNT}', str(count)),
('${TOTAL}', str(len(self.players))), ('${TOTAL}', str(len(self.players))),
@ -2460,7 +2460,7 @@ class TutorialActivity(bs.Activity[Player, Team]):
bs.getsound('swish').play() bs.getsound('swish').play()
# self._skip_count_text.text = self._r.skippingText # self._skip_count_text.text = self._r.skippingText
self._skip_count_text.text = bs.Lstr( self._skip_count_text.text = bs.Lstr(
resource=self._r + '.skippingText' resource=f'{self._r}.skippingText'
) )
assert self._skip_text assert self._skip_text
self._skip_text.text = '' self._skip_text.text = ''
@ -2474,7 +2474,7 @@ class TutorialActivity(bs.Activity[Player, Team]):
self._issued_warning = True self._issued_warning = True
assert self._skip_text assert self._skip_text
self._skip_text.text = bs.Lstr( self._skip_text.text = bs.Lstr(
resource=self._r + '.skipConfirmText' resource=f'{self._r}.skipConfirmText'
) )
self._skip_text.color = (1, 1, 1) self._skip_text.color = (1, 1, 1)
self._skip_text.scale = 1.3 self._skip_text.scale = 1.3
@ -2510,7 +2510,7 @@ class TutorialActivity(bs.Activity[Player, Team]):
def _revert_confirm(self) -> None: def _revert_confirm(self) -> None:
assert self._skip_text assert self._skip_text
self._skip_text.text = bs.Lstr( self._skip_text.text = bs.Lstr(
resource=self._r + '.toSkipPressAnythingText' resource=f'{self._r}.toSkipPressAnythingText'
) )
self._skip_text.color = (1, 1, 1) self._skip_text.color = (1, 1, 1)
self._issued_warning = False self._issued_warning = False

View File

@ -8,10 +8,12 @@ from __future__ import annotations
import time import time
import logging import logging
from bacommon.cloud import WebLocation
from bacommon.login import LoginType from bacommon.login import LoginType
import bacommon.cloud import bacommon.cloud
import bauiv1 as bui import bauiv1 as bui
# These days we're directing people to the web based account settings # These days we're directing people to the web based account settings
# for V2 account linking and trying to get them to disconnect remaining # for V2 account linking and trying to get them to disconnect remaining
# V1 links, but leaving this escape hatch here in case needed. # V1 links, but leaving this escape hatch here in case needed.
@ -150,7 +152,7 @@ class AccountSettingsWindow(bui.Window):
parent=self._root_widget, parent=self._root_widget,
position=(self._width * 0.5, self._height - 41), position=(self._width * 0.5, self._height - 41),
size=(0, 0), size=(0, 0),
text=bui.Lstr(resource=self._r + '.titleText'), text=bui.Lstr(resource=f'{self._r}.titleText'),
color=app.ui_v1.title_color, color=app.ui_v1.title_color,
maxwidth=self._width - 340, maxwidth=self._width - 340,
h_align='center', h_align='center',
@ -346,11 +348,12 @@ class AccountSettingsWindow(bui.Window):
show_reset_progress_button = False show_reset_progress_button = False
reset_progress_button_space = 70.0 reset_progress_button_space = 70.0
show_manage_v2_account_button = ( show_manage_v2_account_button = primary_v2_account is not None
self._v1_signed_in and v1_account_type == 'V2'
)
manage_v2_account_button_space = 100.0 manage_v2_account_button_space = 100.0
show_delete_account_button = primary_v2_account is not None
delete_account_button_space = 80.0
show_player_profiles_button = self._v1_signed_in show_player_profiles_button = self._v1_signed_in
player_profiles_button_space = ( player_profiles_button_space = (
70.0 if show_manage_v2_account_button else 100.0 70.0 if show_manage_v2_account_button else 100.0
@ -365,22 +368,19 @@ class AccountSettingsWindow(bui.Window):
unlink_accounts_button_space = 90.0 unlink_accounts_button_space = 90.0
# Phasing this out. # Phasing this out.
# show_v2_link_info = self._v1_signed_in
# and not show_link_accounts_button
show_v2_link_info = False show_v2_link_info = False
v2_link_info_space = 70.0 v2_link_info_space = 70.0
legacy_unlink_button_space = 120.0 legacy_unlink_button_space = 120.0
show_sign_out_button = self._v1_signed_in and v1_account_type in [ show_sign_out_button = primary_v2_account is not None or (
'Local', self._v1_signed_in and v1_account_type == 'Local'
'V2', )
]
sign_out_button_space = 80.0 sign_out_button_space = 80.0
# We can show cancel if we're either waiting on an adapter to # We can show cancel if we're either waiting on an adapter to
# provide us with v2 credentials or waiting for those credentials # provide us with v2 credentials or waiting for those
# to be verified. # credentials to be verified.
show_cancel_sign_in_button = self._signing_in_adapter is not None or ( show_cancel_sign_in_button = self._signing_in_adapter is not None or (
plus.accounts.have_primary_credentials() plus.accounts.have_primary_credentials()
and primary_v2_account is None and primary_v2_account is None
@ -435,6 +435,8 @@ class AccountSettingsWindow(bui.Window):
self._sub_height += legacy_unlink_button_space self._sub_height += legacy_unlink_button_space
if show_sign_out_button: if show_sign_out_button:
self._sub_height += sign_out_button_space self._sub_height += sign_out_button_space
if show_delete_account_button:
self._sub_height += delete_account_button_space
if show_cancel_sign_in_button: if show_cancel_sign_in_button:
self._sub_height += cancel_sign_in_button_space self._sub_height += cancel_sign_in_button_space
self._subcontainer = bui.containerwidget( self._subcontainer = bui.containerwidget(
@ -579,7 +581,7 @@ class AccountSettingsWindow(bui.Window):
v + sign_in_benefits_space * 0.4, v + sign_in_benefits_space * 0.4,
), ),
size=(0, 0), size=(0, 0),
text=bui.Lstr(resource=self._r + '.signInInfoText'), text=bui.Lstr(resource=f'{self._r}.signInInfoText'),
max_height=sign_in_benefits_space * 0.9, max_height=sign_in_benefits_space * 0.9,
scale=0.9, scale=0.9,
color=(0.75, 0.7, 0.8), color=(0.75, 0.7, 0.8),
@ -624,7 +626,7 @@ class AccountSettingsWindow(bui.Window):
( (
'${B}', '${B}',
bui.Lstr( bui.Lstr(
resource=self._r + '.signInWithText', resource=f'{self._r}.signInWithText',
subs=[ subs=[
( (
'${SERVICE}', '${SERVICE}',
@ -669,7 +671,7 @@ class AccountSettingsWindow(bui.Window):
( (
'${B}', '${B}',
bui.Lstr( bui.Lstr(
resource=self._r + '.signInWithText', resource=f'{self._r}.signInWithText',
subs=[('${SERVICE}', 'Game Center')], subs=[('${SERVICE}', 'Game Center')],
), ),
), ),
@ -703,11 +705,11 @@ class AccountSettingsWindow(bui.Window):
) )
v2labeltext: bui.Lstr | str = ( v2labeltext: bui.Lstr | str = (
bui.Lstr(resource=self._r + '.signInWithAnEmailAddressText') bui.Lstr(resource=f'{self._r}.signInWithAnEmailAddressText')
if show_game_center_sign_in_button if show_game_center_sign_in_button
or show_google_play_sign_in_button or show_google_play_sign_in_button
or show_device_sign_in_button or show_device_sign_in_button
else bui.Lstr(resource=self._r + '.signInText') else bui.Lstr(resource=f'{self._r}.signInText')
) )
v2infotext: bui.Lstr | str | None = None v2infotext: bui.Lstr | str | None = None
@ -796,7 +798,7 @@ class AccountSettingsWindow(bui.Window):
( (
'${B}', '${B}',
bui.Lstr( bui.Lstr(
resource=self._r + '.signInWithDeviceText' resource=f'{self._r}.signInWithDeviceText'
), ),
), ),
], ],
@ -811,7 +813,7 @@ class AccountSettingsWindow(bui.Window):
v_align='center', v_align='center',
size=(0, 0), size=(0, 0),
position=(self._sub_width * 0.5, v - 4), position=(self._sub_width * 0.5, v - 4),
text=bui.Lstr(resource=self._r + '.signInWithDeviceInfoText'), text=bui.Lstr(resource=f'{self._r}.signInWithDeviceInfoText'),
flatness=1.0, flatness=1.0,
scale=0.57, scale=0.57,
maxwidth=button_width * 0.9, maxwidth=button_width * 0.9,
@ -1042,10 +1044,10 @@ class AccountSettingsWindow(bui.Window):
button_width = 250 button_width = 250
if show_reset_progress_button: if show_reset_progress_button:
confirm_text = ( confirm_text = (
bui.Lstr(resource=self._r + '.resetProgressConfirmText') bui.Lstr(resource=f'{self._r}.resetProgressConfirmText')
if self._can_reset_achievements if self._can_reset_achievements
else bui.Lstr( else bui.Lstr(
resource=self._r + '.resetProgressConfirmNoAchievementsText' resource=f'{self._r}.resetProgressConfirmNoAchievementsText'
) )
) )
v -= reset_progress_button_space v -= reset_progress_button_space
@ -1056,7 +1058,7 @@ class AccountSettingsWindow(bui.Window):
textcolor=(0.75, 0.7, 0.8), textcolor=(0.75, 0.7, 0.8),
autoselect=True, autoselect=True,
size=(button_width, 60), size=(button_width, 60),
label=bui.Lstr(resource=self._r + '.resetProgressText'), label=bui.Lstr(resource=f'{self._r}.resetProgressText'),
on_activate_call=lambda: confirm.ConfirmWindow( on_activate_call=lambda: confirm.ConfirmWindow(
text=confirm_text, text=confirm_text,
width=500, width=500,
@ -1083,7 +1085,7 @@ class AccountSettingsWindow(bui.Window):
scale=0.9, scale=0.9,
color=(0.75, 0.7, 0.8), color=(0.75, 0.7, 0.8),
maxwidth=self._sub_width * 0.95, maxwidth=self._sub_width * 0.95,
text=bui.Lstr(resource=self._r + '.linkedAccountsText'), text=bui.Lstr(resource=f'{self._r}.linkedAccountsText'),
h_align='center', h_align='center',
v_align='center', v_align='center',
) )
@ -1112,7 +1114,7 @@ class AccountSettingsWindow(bui.Window):
v_align='center', v_align='center',
size=(0, 0), size=(0, 0),
position=(self._sub_width * 0.5, v + 17 + 20), position=(self._sub_width * 0.5, v + 17 + 20),
text=bui.Lstr(resource=self._r + '.linkAccountsText'), text=bui.Lstr(resource=f'{self._r}.linkAccountsText'),
maxwidth=button_width * 0.8, maxwidth=button_width * 0.8,
color=(0.75, 0.7, 0.8), color=(0.75, 0.7, 0.8),
) )
@ -1123,7 +1125,7 @@ class AccountSettingsWindow(bui.Window):
v_align='center', v_align='center',
size=(0, 0), size=(0, 0),
position=(self._sub_width * 0.5, v - 4 + 20), position=(self._sub_width * 0.5, v - 4 + 20),
text=bui.Lstr(resource=self._r + '.linkAccountsInfoText'), text=bui.Lstr(resource=f'{self._r}.linkAccountsInfoText'),
flatness=1.0, flatness=1.0,
scale=0.5, scale=0.5,
maxwidth=button_width * 0.8, maxwidth=button_width * 0.8,
@ -1157,7 +1159,7 @@ class AccountSettingsWindow(bui.Window):
v_align='center', v_align='center',
size=(0, 0), size=(0, 0),
position=(self._sub_width * 0.5, v + 55), position=(self._sub_width * 0.5, v + 55),
text=bui.Lstr(resource=self._r + '.unlinkAccountsText'), text=bui.Lstr(resource=f'{self._r}.unlinkAccountsText'),
maxwidth=button_width * 0.8, maxwidth=button_width * 0.8,
color=(0.75, 0.7, 0.8), color=(0.75, 0.7, 0.8),
) )
@ -1212,7 +1214,7 @@ class AccountSettingsWindow(bui.Window):
autoselect=True, autoselect=True,
size=(button_width_w, 60), size=(button_width_w, 60),
label=bui.Lstr( label=bui.Lstr(
resource=self._r + '.unlinkLegacyV1AccountsText' resource=f'{self._r}.unlinkLegacyV1AccountsText'
), ),
textcolor=(0.8, 0.4, 0), textcolor=(0.8, 0.4, 0),
color=(0.55, 0.5, 0.6), color=(0.55, 0.5, 0.6),
@ -1225,7 +1227,7 @@ class AccountSettingsWindow(bui.Window):
parent=self._subcontainer, parent=self._subcontainer,
position=((self._sub_width - button_width) * 0.5, v), position=((self._sub_width - button_width) * 0.5, v),
size=(button_width, 60), size=(button_width, 60),
label=bui.Lstr(resource=self._r + '.signOutText'), label=bui.Lstr(resource=f'{self._r}.signOutText'),
color=(0.55, 0.5, 0.6), color=(0.55, 0.5, 0.6),
textcolor=(0.75, 0.7, 0.8), textcolor=(0.75, 0.7, 0.8),
autoselect=True, autoselect=True,
@ -1261,6 +1263,27 @@ class AccountSettingsWindow(bui.Window):
) )
bui.widget(edit=btn, left_widget=bbtn, show_buffer_bottom=15) bui.widget(edit=btn, left_widget=bbtn, show_buffer_bottom=15)
if show_delete_account_button:
v -= delete_account_button_space
self._delete_account_button = btn = bui.buttonwidget(
parent=self._subcontainer,
position=((self._sub_width - button_width) * 0.5, v),
size=(button_width, 60),
label=bui.Lstr(resource=f'{self._r}.deleteAccountText'),
color=(0.85, 0.5, 0.6),
textcolor=(0.9, 0.7, 0.8),
autoselect=True,
on_activate_call=self._on_delete_account_press,
)
if first_selectable is None:
first_selectable = btn
if bui.app.ui_v1.use_toolbars:
bui.widget(
edit=btn,
right_widget=bui.get_special_widget('party_button'),
)
bui.widget(edit=btn, left_widget=bbtn, show_buffer_bottom=15)
# Whatever the topmost selectable thing is, we want it to scroll all # Whatever the topmost selectable thing is, we want it to scroll all
# the way up when we select it. # the way up when we select it.
if first_selectable is not None: if first_selectable is not None:
@ -1303,6 +1326,12 @@ class AccountSettingsWindow(bui.Window):
show_what_is_v2_page() show_what_is_v2_page()
def _on_manage_account_press(self) -> None: def _on_manage_account_press(self) -> None:
self._do_manage_account_press(WebLocation.ACCOUNT_EDITOR)
def _on_delete_account_press(self) -> None:
self._do_manage_account_press(WebLocation.ACCOUNT_DELETE_SECTION)
def _do_manage_account_press(self, weblocation: WebLocation) -> None:
plus = bui.app.plus plus = bui.app.plus
assert plus is not None assert plus is not None
@ -1327,7 +1356,7 @@ class AccountSettingsWindow(bui.Window):
with plus.accounts.primary: with plus.accounts.primary:
plus.cloud.send_message_cb( plus.cloud.send_message_cb(
bacommon.cloud.ManageAccountMessage(), bacommon.cloud.ManageAccountMessage(weblocation=weblocation),
on_response=bui.WeakCall(self._on_manage_account_response), on_response=bui.WeakCall(self._on_manage_account_response),
) )
@ -1414,7 +1443,7 @@ class AccountSettingsWindow(bui.Window):
subs=[ subs=[
( (
'${L}', '${L}',
bui.Lstr(resource=self._r + '.linkedAccountsText'), bui.Lstr(resource=f'{self._r}.linkedAccountsText'),
), ),
('${A}', accounts_str), ('${A}', accounts_str),
], ],
@ -1434,7 +1463,7 @@ class AccountSettingsWindow(bui.Window):
# Last level cant be completed; hence the -1; # Last level cant be completed; hence the -1;
progress = min(1.0, float(levels_complete) / (len(levels) - 1)) progress = min(1.0, float(levels_complete) / (len(levels) - 1))
p_str = bui.Lstr( p_str = bui.Lstr(
resource=self._r + '.campaignProgressText', resource=f'{self._r}.campaignProgressText',
subs=[('${PROGRESS}', str(int(progress * 100.0)) + '%')], subs=[('${PROGRESS}', str(int(progress * 100.0)) + '%')],
) )
except Exception: except Exception:
@ -1456,7 +1485,7 @@ class AccountSettingsWindow(bui.Window):
bui.textwidget( bui.textwidget(
edit=self._tickets_text, edit=self._tickets_text,
text=bui.Lstr( text=bui.Lstr(
resource=self._r + '.ticketsText', subs=[('${COUNT}', tc_str)] resource=f'{self._r}.ticketsText', subs=[('${COUNT}', tc_str)]
), ),
) )
@ -1496,7 +1525,7 @@ class AccountSettingsWindow(bui.Window):
) )
total = len(bui.app.classic.ach.achievements) total = len(bui.app.classic.ach.achievements)
txt_final = bui.Lstr( txt_final = bui.Lstr(
resource=self._r + '.achievementProgressText', resource=f'{self._r}.achievementProgressText',
subs=[('${COUNT}', str(complete)), ('${TOTAL}', str(total))], subs=[('${COUNT}', str(complete)), ('${TOTAL}', str(total))],
) )
@ -1575,7 +1604,7 @@ class AccountSettingsWindow(bui.Window):
cfg.commit() cfg.commit()
bui.buttonwidget( bui.buttonwidget(
edit=self._sign_out_button, edit=self._sign_out_button,
label=bui.Lstr(resource=self._r + '.signingOutText'), label=bui.Lstr(resource=f'{self._r}.signingOutText'),
) )
# Speed UI updates along. # Speed UI updates along.

View File

@ -18,7 +18,7 @@ class ConfirmWindow:
def __init__( def __init__(
self, self,
text: str | bui.Lstr = 'Are you sure?', text: str | bui.Lstr | None = None,
action: Callable[[], Any] | None = None, action: Callable[[], Any] | None = None,
width: float = 360.0, width: float = 360.0,
height: float = 100.0, height: float = 100.0,
@ -31,6 +31,8 @@ class ConfirmWindow:
origin_widget: bui.Widget | None = None, origin_widget: bui.Widget | None = None,
): ):
# pylint: disable=too-many-locals # pylint: disable=too-many-locals
if text is None:
text = bui.Lstr(resource='areYouSureText')
if ok_text is None: if ok_text is None:
ok_text = bui.Lstr(resource='okText') ok_text = bui.Lstr(resource='okText')
if cancel_text is None: if cancel_text is None:

View File

@ -684,7 +684,7 @@ class CoopBrowserWindow(bui.Window):
text=bui.Lstr( text=bui.Lstr(
value='${C} (${P})', value='${C} (${P})',
subs=[ subs=[
('${C}', bui.Lstr(resource=self._r + '.campaignText')), ('${C}', bui.Lstr(resource=f'{self._r}.campaignText')),
('${P}', p_str), ('${P}', p_str),
], ],
), ),
@ -694,7 +694,7 @@ class CoopBrowserWindow(bui.Window):
# pylint: disable=cyclic-import # pylint: disable=cyclic-import
from bauiv1lib.confirm import ConfirmWindow from bauiv1lib.confirm import ConfirmWindow
txt = bui.Lstr(resource=self._r + '.tournamentInfoText') txt = bui.Lstr(resource=f'{self._r}.tournamentInfoText')
ConfirmWindow( ConfirmWindow(
txt, txt,
cancel_button=False, cancel_button=False,

View File

@ -102,7 +102,7 @@ class TournamentButton:
position=(x + 360, y + scly - 20), position=(x + 360, y + scly - 20),
size=(0, 0), size=(0, 0),
h_align='center', h_align='center',
text=bui.Lstr(resource=self._r + '.entryFeeText'), text=bui.Lstr(resource=f'{self._r}.entryFeeText'),
v_align='center', v_align='center',
maxwidth=100, maxwidth=100,
scale=0.9, scale=0.9,
@ -167,7 +167,7 @@ class TournamentButton:
position=(x + 447 + x_offs, y + scly - 20), position=(x + 447 + x_offs, y + scly - 20),
size=(0, 0), size=(0, 0),
h_align='center', h_align='center',
text=bui.Lstr(resource=self._r + '.prizesText'), text=bui.Lstr(resource=f'{self._r}.prizesText'),
v_align='center', v_align='center',
maxwidth=130, maxwidth=130,
scale=0.9, scale=0.9,
@ -267,7 +267,7 @@ class TournamentButton:
position=(x + 620 + x_offs, y + scly - 20), position=(x + 620 + x_offs, y + scly - 20),
size=(0, 0), size=(0, 0),
h_align='center', h_align='center',
text=bui.Lstr(resource=self._r + '.currentBestText'), text=bui.Lstr(resource=f'{self._r}.currentBestText'),
v_align='center', v_align='center',
maxwidth=180, maxwidth=180,
scale=0.9, scale=0.9,
@ -332,7 +332,7 @@ class TournamentButton:
position=(x + 820 + x_offs, y + scly - 20), position=(x + 820 + x_offs, y + scly - 20),
size=(0, 0), size=(0, 0),
h_align='center', h_align='center',
text=bui.Lstr(resource=self._r + '.timeRemainingText'), text=bui.Lstr(resource=f'{self._r}.timeRemainingText'),
v_align='center', v_align='center',
maxwidth=180, maxwidth=180,
scale=0.9, scale=0.9,
@ -533,13 +533,13 @@ class TournamentButton:
bui.textwidget(edit=self.current_leader_score_text, text=leader_score) bui.textwidget(edit=self.current_leader_score_text, text=leader_score)
bui.buttonwidget( bui.buttonwidget(
edit=self.more_scores_button, edit=self.more_scores_button,
label=bui.Lstr(resource=self._r + '.seeMoreText'), label=bui.Lstr(resource=f'{self._r}.seeMoreText'),
) )
out_of_time_text: str | bui.Lstr = ( out_of_time_text: str | bui.Lstr = (
'-' '-'
if 'totalTime' not in entry if 'totalTime' not in entry
else bui.Lstr( else bui.Lstr(
resource=self._r + '.ofTotalTimeText', resource=f'{self._r}.ofTotalTimeText',
subs=[ subs=[
( (
'${TOTAL}', '${TOTAL}',

View File

@ -95,7 +95,7 @@ class CreditsListWindow(bui.Window):
position=(0, height - (59 if uiscale is bui.UIScale.SMALL else 54)), position=(0, height - (59 if uiscale is bui.UIScale.SMALL else 54)),
size=(width, 30), size=(width, 30),
text=bui.Lstr( text=bui.Lstr(
resource=self._r + '.titleText', resource=f'{self._r}.titleText',
subs=[('${APP_NAME}', bui.Lstr(resource='titleText'))], subs=[('${APP_NAME}', bui.Lstr(resource='titleText'))],
), ),
h_align='center', h_align='center',
@ -156,7 +156,7 @@ class CreditsListWindow(bui.Window):
return sval return sval
sound_and_music = bui.Lstr( sound_and_music = bui.Lstr(
resource=self._r + '.songCreditText' resource=f'{self._r}.songCreditText'
).evaluate() ).evaluate()
sound_and_music = sound_and_music.replace( sound_and_music = sound_and_music.replace(
'${TITLE}', "'William Tell (Trumpet Entry)'" '${TITLE}', "'William Tell (Trumpet Entry)'"
@ -232,41 +232,41 @@ class CreditsListWindow(bui.Window):
# (or add mesh splitting under the hood) # (or add mesh splitting under the hood)
credits_text = ( credits_text = (
' ' ' '
+ bui.Lstr(resource=self._r + '.codingGraphicsAudioText') + bui.Lstr(resource=f'{self._r}.codingGraphicsAudioText')
.evaluate() .evaluate()
.replace('${NAME}', 'Eric Froemling') .replace('${NAME}', 'Eric Froemling')
+ '\n' + '\n'
'\n' '\n'
' ' ' '
+ bui.Lstr(resource=self._r + '.additionalAudioArtIdeasText') + bui.Lstr(resource=f'{self._r}.additionalAudioArtIdeasText')
.evaluate() .evaluate()
.replace('${NAME}', 'Raphael Suter') .replace('${NAME}', 'Raphael Suter')
+ '\n' + '\n'
'\n' '\n'
' ' ' '
+ bui.Lstr(resource=self._r + '.soundAndMusicText').evaluate() + bui.Lstr(resource=f'{self._r}.soundAndMusicText').evaluate()
+ '\n' + '\n'
'\n' + sound_and_music + '\n' '\n' + sound_and_music + '\n'
'\n' '\n'
' ' ' '
+ bui.Lstr(resource=self._r + '.publicDomainMusicViaText') + bui.Lstr(resource=f'{self._r}.publicDomainMusicViaText')
.evaluate() .evaluate()
.replace('${NAME}', 'Musopen.com') .replace('${NAME}', 'Musopen.com')
+ '\n' + '\n'
' ' ' '
+ bui.Lstr(resource=self._r + '.thanksEspeciallyToText') + bui.Lstr(resource=f'{self._r}.thanksEspeciallyToText')
.evaluate() .evaluate()
.replace('${NAME}', 'the US Army, Navy, and Marine Bands') .replace('${NAME}', 'the US Army, Navy, and Marine Bands')
+ '\n' + '\n'
'\n' '\n'
' ' ' '
+ bui.Lstr(resource=self._r + '.additionalMusicFromText') + bui.Lstr(resource=f'{self._r}.additionalMusicFromText')
.evaluate() .evaluate()
.replace('${NAME}', 'The YouTube Audio Library') .replace('${NAME}', 'The YouTube Audio Library')
+ '\n' + '\n'
'\n' '\n'
' ' ' '
+ bui.Lstr(resource=self._r + '.soundsText') + bui.Lstr(resource=f'{self._r}.soundsText')
.evaluate() .evaluate()
.replace('${SOURCE}', 'Freesound.org') .replace('${SOURCE}', 'Freesound.org')
+ '\n' + '\n'
@ -274,7 +274,7 @@ class CreditsListWindow(bui.Window):
'\n' '\n'
' ' ' '
+ bui.Lstr( + bui.Lstr(
resource=self._r + '.languageTranslationsText' resource=f'{self._r}.languageTranslationsText'
).evaluate() ).evaluate()
+ '\n' + '\n'
'\n' '\n'
@ -295,25 +295,25 @@ class CreditsListWindow(bui.Window):
' Holiday theme vector art designed by Freepik\n' ' Holiday theme vector art designed by Freepik\n'
'\n' '\n'
' ' ' '
+ bui.Lstr(resource=self._r + '.specialThanksText').evaluate() + bui.Lstr(resource=f'{self._r}.specialThanksText').evaluate()
+ '\n' + '\n'
'\n' '\n'
' Todd, Laura, and Robert Froemling\n' ' Todd, Laura, and Robert Froemling\n'
' ' ' '
+ bui.Lstr(resource=self._r + '.allMyFamilyText') + bui.Lstr(resource=f'{self._r}.allMyFamilyText')
.evaluate() .evaluate()
.replace('\n', '\n ') .replace('\n', '\n ')
+ '\n' + '\n'
' ' ' '
+ bui.Lstr( + bui.Lstr(
resource=self._r + '.whoeverInventedCoffeeText' resource=f'{self._r}.whoeverInventedCoffeeText'
).evaluate() ).evaluate()
+ '\n' + '\n'
'\n' '\n'
' ' + bui.Lstr(resource=self._r + '.legalText').evaluate() + '\n' ' ' + bui.Lstr(resource=f'{self._r}.legalText').evaluate() + '\n'
'\n' '\n'
' ' ' '
+ bui.Lstr(resource=self._r + '.softwareBasedOnText') + bui.Lstr(resource=f'{self._r}.softwareBasedOnText')
.evaluate() .evaluate()
.replace('${NAME}', 'the Khronos Group') .replace('${NAME}', 'the Khronos Group')
+ '\n' + '\n'

View File

@ -70,7 +70,7 @@ class DebugWindow(bui.Window):
parent=self._root_widget, parent=self._root_widget,
position=(0, height - 60), position=(0, height - 60),
size=(width, 30), size=(width, 30),
text=bui.Lstr(resource=self._r + '.titleText'), text=bui.Lstr(resource=f'{self._r}.titleText'),
h_align='center', h_align='center',
color=bui.app.ui_v1.title_color, color=bui.app.ui_v1.title_color,
v_align='center', v_align='center',
@ -98,7 +98,7 @@ class DebugWindow(bui.Window):
position=((self._sub_width - button_width) * 0.5, v), position=((self._sub_width - button_width) * 0.5, v),
size=(button_width, 60), size=(button_width, 60),
autoselect=True, autoselect=True,
label=bui.Lstr(resource=self._r + '.runCPUBenchmarkText'), label=bui.Lstr(resource=f'{self._r}.runCPUBenchmarkText'),
on_activate_call=self._run_cpu_benchmark_pressed, on_activate_call=self._run_cpu_benchmark_pressed,
) )
bui.widget( bui.widget(
@ -111,7 +111,7 @@ class DebugWindow(bui.Window):
position=((self._sub_width - button_width) * 0.5, v), position=((self._sub_width - button_width) * 0.5, v),
size=(button_width, 60), size=(button_width, 60),
autoselect=True, autoselect=True,
label=bui.Lstr(resource=self._r + '.runGPUBenchmarkText'), label=bui.Lstr(resource=f'{self._r}.runGPUBenchmarkText'),
on_activate_call=self._run_gpu_benchmark_pressed, on_activate_call=self._run_gpu_benchmark_pressed,
) )
v -= 60 v -= 60
@ -121,7 +121,7 @@ class DebugWindow(bui.Window):
position=((self._sub_width - button_width) * 0.5, v), position=((self._sub_width - button_width) * 0.5, v),
size=(button_width, 60), size=(button_width, 60),
autoselect=True, autoselect=True,
label=bui.Lstr(resource=self._r + '.runMediaReloadBenchmarkText'), label=bui.Lstr(resource=f'{self._r}.runMediaReloadBenchmarkText'),
on_activate_call=self._run_media_reload_benchmark_pressed, on_activate_call=self._run_media_reload_benchmark_pressed,
) )
v -= 60 v -= 60
@ -130,7 +130,7 @@ class DebugWindow(bui.Window):
parent=self._subcontainer, parent=self._subcontainer,
position=(self._sub_width * 0.5, v + 22), position=(self._sub_width * 0.5, v + 22),
size=(0, 0), size=(0, 0),
text=bui.Lstr(resource=self._r + '.stressTestTitleText'), text=bui.Lstr(resource=f'{self._r}.stressTestTitleText'),
maxwidth=200, maxwidth=200,
color=bui.app.ui_v1.heading_color, color=bui.app.ui_v1.heading_color,
scale=0.85, scale=0.85,
@ -144,7 +144,7 @@ class DebugWindow(bui.Window):
parent=self._subcontainer, parent=self._subcontainer,
position=(x_offs - 10, v + 22), position=(x_offs - 10, v + 22),
size=(0, 0), size=(0, 0),
text=bui.Lstr(resource=self._r + '.stressTestPlaylistTypeText'), text=bui.Lstr(resource=f'{self._r}.stressTestPlaylistTypeText'),
maxwidth=130, maxwidth=130,
color=bui.app.ui_v1.heading_color, color=bui.app.ui_v1.heading_color,
scale=0.65, scale=0.65,
@ -174,7 +174,7 @@ class DebugWindow(bui.Window):
parent=self._subcontainer, parent=self._subcontainer,
position=(x_offs - 10, v + 22), position=(x_offs - 10, v + 22),
size=(0, 0), size=(0, 0),
text=bui.Lstr(resource=self._r + '.stressTestPlaylistNameText'), text=bui.Lstr(resource=f'{self._r}.stressTestPlaylistNameText'),
maxwidth=130, maxwidth=130,
color=bui.app.ui_v1.heading_color, color=bui.app.ui_v1.heading_color,
scale=0.65, scale=0.65,
@ -192,7 +192,7 @@ class DebugWindow(bui.Window):
autoselect=True, autoselect=True,
color=(0.9, 0.9, 0.9, 1.0), color=(0.9, 0.9, 0.9, 1.0),
description=bui.Lstr( description=bui.Lstr(
resource=self._r + '.stressTestPlaylistDescriptionText' resource=f'{self._r}.stressTestPlaylistDescriptionText'
), ),
editable=True, editable=True,
padding=4, padding=4,
@ -205,7 +205,7 @@ class DebugWindow(bui.Window):
parent=self._subcontainer, parent=self._subcontainer,
position=(x_offs - 10, v), position=(x_offs - 10, v),
size=(0, 0), size=(0, 0),
text=bui.Lstr(resource=self._r + '.stressTestPlayerCountText'), text=bui.Lstr(resource=f'{self._r}.stressTestPlayerCountText'),
color=(0.8, 0.8, 0.8, 1.0), color=(0.8, 0.8, 0.8, 1.0),
h_align='right', h_align='right',
v_align='center', v_align='center',
@ -250,7 +250,7 @@ class DebugWindow(bui.Window):
parent=self._subcontainer, parent=self._subcontainer,
position=(x_offs - 10, v), position=(x_offs - 10, v),
size=(0, 0), size=(0, 0),
text=bui.Lstr(resource=self._r + '.stressTestRoundDurationText'), text=bui.Lstr(resource=f'{self._r}.stressTestRoundDurationText'),
color=(0.8, 0.8, 0.8, 1.0), color=(0.8, 0.8, 0.8, 1.0),
h_align='right', h_align='right',
v_align='center', v_align='center',
@ -298,7 +298,7 @@ class DebugWindow(bui.Window):
position=((self._sub_width - button_width) * 0.5, v), position=((self._sub_width - button_width) * 0.5, v),
size=(button_width, 60), size=(button_width, 60),
autoselect=True, autoselect=True,
label=bui.Lstr(resource=self._r + '.runStressTestText'), label=bui.Lstr(resource=f'{self._r}.runStressTestText'),
on_activate_call=self._stress_test_pressed, on_activate_call=self._stress_test_pressed,
) )
bui.widget(btn, show_buffer_bottom=50) bui.widget(btn, show_buffer_bottom=50)

View File

@ -70,12 +70,12 @@ class FileSelectorWindow(bui.Window):
h_align='center', h_align='center',
v_align='center', v_align='center',
text=( text=(
bui.Lstr(resource=self._r + '.titleFolderText') bui.Lstr(resource=f'{self._r}.titleFolderText')
if (allow_folders and not valid_file_extensions) if (allow_folders and not valid_file_extensions)
else ( else (
bui.Lstr(resource=self._r + '.titleFileText') bui.Lstr(resource=f'{self._r}.titleFileText')
if not allow_folders if not allow_folders
else bui.Lstr(resource=self._r + '.titleFileFolderText') else bui.Lstr(resource=f'{self._r}.titleFileFolderText')
) )
), ),
maxwidth=210, maxwidth=210,
@ -382,7 +382,7 @@ class FileSelectorWindow(bui.Window):
), ),
size=(self._button_width, 50), size=(self._button_width, 50),
label=bui.Lstr( label=bui.Lstr(
resource=self._r + '.useThisFolderButtonText' resource=f'{self._r}.useThisFolderButtonText'
), ),
on_activate_call=self._on_folder_entry_activated, on_activate_call=self._on_folder_entry_activated,
) )

View File

@ -165,7 +165,7 @@ class GatherWindow(bui.Window):
), ),
h_align='center', h_align='center',
v_align='center', v_align='center',
text=bui.Lstr(resource=self._r + '.titleText'), text=bui.Lstr(resource=f'{self._r}.titleText'),
maxwidth=550, maxwidth=550,
) )
@ -174,23 +174,23 @@ class GatherWindow(bui.Window):
# Build up the set of tabs we want. # Build up the set of tabs we want.
tabdefs: list[tuple[GatherWindow.TabID, bui.Lstr]] = [ tabdefs: list[tuple[GatherWindow.TabID, bui.Lstr]] = [
(self.TabID.ABOUT, bui.Lstr(resource=self._r + '.aboutText')) (self.TabID.ABOUT, bui.Lstr(resource=f'{self._r}.aboutText'))
] ]
if plus.get_v1_account_misc_read_val('enablePublicParties', True): if plus.get_v1_account_misc_read_val('enablePublicParties', True):
tabdefs.append( tabdefs.append(
( (
self.TabID.INTERNET, self.TabID.INTERNET,
bui.Lstr(resource=self._r + '.publicText'), bui.Lstr(resource=f'{self._r}.publicText'),
) )
) )
tabdefs.append( tabdefs.append(
(self.TabID.PRIVATE, bui.Lstr(resource=self._r + '.privateText')) (self.TabID.PRIVATE, bui.Lstr(resource=f'{self._r}.privateText'))
) )
tabdefs.append( tabdefs.append(
(self.TabID.NEARBY, bui.Lstr(resource=self._r + '.nearbyText')) (self.TabID.NEARBY, bui.Lstr(resource=f'{self._r}.nearbyText'))
) )
tabdefs.append( tabdefs.append(
(self.TabID.MANUAL, bui.Lstr(resource=self._r + '.manualText')) (self.TabID.MANUAL, bui.Lstr(resource=f'{self._r}.manualText'))
) )
# On small UI, push our tabs up closer to the top of the screen to # On small UI, push our tabs up closer to the top of the screen to

View File

@ -103,7 +103,7 @@ class GetTicketsWindow(bui.Window):
scale=1.2, scale=1.2,
h_align='right', h_align='right',
v_align='center', v_align='center',
text=bui.Lstr(resource=self._r + '.titleText'), text=bui.Lstr(resource=f'{self._r}.titleText'),
# text='Testing really long text here blah blah', # text='Testing really long text here blah blah',
maxwidth=260, maxwidth=260,
) )
@ -242,7 +242,7 @@ class GetTicketsWindow(bui.Window):
) )
return btn2 return btn2
rsrc = self._r + '.ticketsText' rsrc = f'{self._r}.ticketsText'
c2txt = bui.Lstr( c2txt = bui.Lstr(
resource=rsrc, resource=rsrc,
@ -374,7 +374,7 @@ class GetTicketsWindow(bui.Window):
position=(h + h_offs, v), position=(h + h_offs, v),
size=b_size_3, size=b_size_3,
label=bui.Lstr( label=bui.Lstr(
resource=self._r + '.ticketsFromASponsorText', resource=f'{self._r}.ticketsFromASponsorText',
subs=[ subs=[
( (
'${COUNT}', '${COUNT}',
@ -396,7 +396,7 @@ class GetTicketsWindow(bui.Window):
self._ad_free_text = bui.textwidget( self._ad_free_text = bui.textwidget(
parent=self._root_widget, parent=self._root_widget,
text=bui.Lstr(resource=self._r + '.freeText'), text=bui.Lstr(resource=f'{self._r}.freeText'),
position=( position=(
h + h_offs + b_size_3[0] * 0.5, h + h_offs + b_size_3[0] * 0.5,
v + b_size_3[1] * 0.5 + 25, v + b_size_3[1] * 0.5 + 25,
@ -445,7 +445,7 @@ class GetTicketsWindow(bui.Window):
bui.textwidget( bui.textwidget(
parent=self._root_widget, parent=self._root_widget,
text=bui.Lstr(resource=self._r + '.freeText'), text=bui.Lstr(resource=f'{self._r}.freeText'),
position=( position=(
h + h_offs + b_size_3[0] * 0.5, h + h_offs + b_size_3[0] * 0.5,
v + b_size_3[1] * 0.5 + 25, v + b_size_3[1] * 0.5 + 25,
@ -468,13 +468,13 @@ class GetTicketsWindow(bui.Window):
v = self._height - 105 + tc_y_offs v = self._height - 105 + tc_y_offs
txt1 = ( txt1 = (
bui.Lstr(resource=self._r + '.youHaveText') bui.Lstr(resource=f'{self._r}.youHaveText')
.evaluate() .evaluate()
.partition('${COUNT}')[0] .partition('${COUNT}')[0]
.strip() .strip()
) )
txt2 = ( txt2 = (
bui.Lstr(resource=self._r + '.youHaveText') bui.Lstr(resource=f'{self._r}.youHaveText')
.evaluate() .evaluate()
.rpartition('${COUNT}')[-1] .rpartition('${COUNT}')[-1]
.strip() .strip()
@ -658,12 +658,12 @@ class GetTicketsWindow(bui.Window):
) )
) and plus.get_v1_account_misc_read_val('allowAccountLinking2', False): ) and plus.get_v1_account_misc_read_val('allowAccountLinking2', False):
bui.screenmessage( bui.screenmessage(
bui.Lstr(resource=self._r + '.unavailableLinkAccountText'), bui.Lstr(resource=f'{self._r}.unavailableLinkAccountText'),
color=(1, 0.5, 0), color=(1, 0.5, 0),
) )
else: else:
bui.screenmessage( bui.screenmessage(
bui.Lstr(resource=self._r + '.unavailableText'), bui.Lstr(resource=f'{self._r}.unavailableText'),
color=(1, 0.5, 0), color=(1, 0.5, 0),
) )
bui.getsound('error').play() bui.getsound('error').play()

View File

@ -68,7 +68,7 @@ class HelpWindow(bui.Window):
position=(0, height - (50 if uiscale is bui.UIScale.SMALL else 45)), position=(0, height - (50 if uiscale is bui.UIScale.SMALL else 45)),
size=(width, 25), size=(width, 25),
text=bui.Lstr( text=bui.Lstr(
resource=self._r + '.titleText', resource=f'{self._r}.titleText',
subs=[('${APP_NAME}', bui.Lstr(resource='titleText'))], subs=[('${APP_NAME}', bui.Lstr(resource='titleText'))],
), ),
color=bui.app.ui_v1.title_color, color=bui.app.ui_v1.title_color,
@ -138,9 +138,9 @@ class HelpWindow(bui.Window):
self._sub_width = 660 self._sub_width = 660
self._sub_height = ( self._sub_height = (
1590 1590
+ bui.app.lang.get_resource(self._r + '.someDaysExtraSpace') + bui.app.lang.get_resource(f'{self._r}.someDaysExtraSpace')
+ bui.app.lang.get_resource( + bui.app.lang.get_resource(
self._r + '.orPunchingSomethingExtraSpace' f'{self._r}.orPunchingSomethingExtraSpace'
) )
) )
@ -162,7 +162,7 @@ class HelpWindow(bui.Window):
paragraph = (0.8, 0.8, 1.0, 1.0) paragraph = (0.8, 0.8, 1.0, 1.0)
txt = bui.Lstr( txt = bui.Lstr(
resource=self._r + '.welcomeText', resource=f'{self._r}.welcomeText',
subs=[('${APP_NAME}', bui.Lstr(resource='titleText'))], subs=[('${APP_NAME}', bui.Lstr(resource='titleText'))],
).evaluate() ).evaluate()
txt_scale = 1.4 txt_scale = 1.4
@ -198,7 +198,7 @@ class HelpWindow(bui.Window):
assert app.classic is not None assert app.classic is not None
v -= spacing * 50.0 v -= spacing * 50.0
txt = bui.Lstr(resource=self._r + '.someDaysText').evaluate() txt = bui.Lstr(resource=f'{self._r}.someDaysText').evaluate()
bui.textwidget( bui.textwidget(
parent=self._subcontainer, parent=self._subcontainer,
position=(h, v), position=(h, v),
@ -211,9 +211,9 @@ class HelpWindow(bui.Window):
v_align='center', v_align='center',
flatness=1.0, flatness=1.0,
) )
v -= spacing * 25.0 + getres(self._r + '.someDaysExtraSpace') v -= spacing * 25.0 + getres(f'{self._r}.someDaysExtraSpace')
txt_scale = 0.66 txt_scale = 0.66
txt = bui.Lstr(resource=self._r + '.orPunchingSomethingText').evaluate() txt = bui.Lstr(resource=f'{self._r}.orPunchingSomethingText').evaluate()
bui.textwidget( bui.textwidget(
parent=self._subcontainer, parent=self._subcontainer,
position=(h, v), position=(h, v),
@ -226,10 +226,10 @@ class HelpWindow(bui.Window):
v_align='center', v_align='center',
flatness=1.0, flatness=1.0,
) )
v -= spacing * 27.0 + getres(self._r + '.orPunchingSomethingExtraSpace') v -= spacing * 27.0 + getres(f'{self._r}.orPunchingSomethingExtraSpace')
txt_scale = 1.0 txt_scale = 1.0
txt = bui.Lstr( txt = bui.Lstr(
resource=self._r + '.canHelpText', resource=f'{self._r}.canHelpText',
subs=[('${APP_NAME}', bui.Lstr(resource='titleText'))], subs=[('${APP_NAME}', bui.Lstr(resource='titleText'))],
).evaluate() ).evaluate()
bui.textwidget( bui.textwidget(
@ -246,7 +246,7 @@ class HelpWindow(bui.Window):
v -= spacing * 70.0 v -= spacing * 70.0
txt_scale = 1.0 txt_scale = 1.0
txt = bui.Lstr(resource=self._r + '.toGetTheMostText').evaluate() txt = bui.Lstr(resource=f'{self._r}.toGetTheMostText').evaluate()
bui.textwidget( bui.textwidget(
parent=self._subcontainer, parent=self._subcontainer,
position=(h, v), position=(h, v),
@ -262,7 +262,7 @@ class HelpWindow(bui.Window):
v -= spacing * 40.0 v -= spacing * 40.0
txt_scale = 0.74 txt_scale = 0.74
txt = bui.Lstr(resource=self._r + '.friendsText').evaluate() txt = bui.Lstr(resource=f'{self._r}.friendsText').evaluate()
hval2 = h - 220 hval2 = h - 220
bui.textwidget( bui.textwidget(
parent=self._subcontainer, parent=self._subcontainer,
@ -278,7 +278,7 @@ class HelpWindow(bui.Window):
) )
txt = bui.Lstr( txt = bui.Lstr(
resource=self._r + '.friendsGoodText', resource=f'{self._r}.friendsGoodText',
subs=[('${APP_NAME}', bui.Lstr(resource='titleText'))], subs=[('${APP_NAME}', bui.Lstr(resource='titleText'))],
).evaluate() ).evaluate()
txt_scale = 0.7 txt_scale = 0.7
@ -298,9 +298,9 @@ class HelpWindow(bui.Window):
v -= spacing * 45.0 v -= spacing * 45.0
txt = ( txt = (
bui.Lstr(resource=self._r + '.devicesText').evaluate() bui.Lstr(resource=f'{self._r}.devicesText').evaluate()
if app.env.vr if app.env.vr
else bui.Lstr(resource=self._r + '.controllersText').evaluate() else bui.Lstr(resource=f'{self._r}.controllersText').evaluate()
) )
txt_scale = 0.74 txt_scale = 0.74
hval2 = h - 220 hval2 = h - 220
@ -322,7 +322,7 @@ class HelpWindow(bui.Window):
infotxt = '.controllersInfoText' infotxt = '.controllersInfoText'
txt = bui.Lstr( txt = bui.Lstr(
resource=self._r + infotxt, resource=self._r + infotxt,
fallback_resource=self._r + '.controllersInfoText', fallback_resource=f'{self._r}.controllersInfoText',
subs=[ subs=[
('${APP_NAME}', bui.Lstr(resource='titleText')), ('${APP_NAME}', bui.Lstr(resource='titleText')),
('${REMOTE_APP_NAME}', bui.get_remote_app_name()), ('${REMOTE_APP_NAME}', bui.get_remote_app_name()),
@ -330,7 +330,7 @@ class HelpWindow(bui.Window):
).evaluate() ).evaluate()
else: else:
txt = bui.Lstr( txt = bui.Lstr(
resource=self._r + '.devicesInfoText', resource=f'{self._r}.devicesInfoText',
subs=[('${APP_NAME}', bui.Lstr(resource='titleText'))], subs=[('${APP_NAME}', bui.Lstr(resource='titleText'))],
).evaluate() ).evaluate()
@ -349,7 +349,7 @@ class HelpWindow(bui.Window):
v -= spacing * 150.0 v -= spacing * 150.0
txt = bui.Lstr(resource=self._r + '.controlsText').evaluate() txt = bui.Lstr(resource=f'{self._r}.controlsText').evaluate()
txt_scale = 1.4 txt_scale = 1.4
txt_maxwidth = 480 txt_maxwidth = 480
bui.textwidget( bui.textwidget(
@ -383,7 +383,7 @@ class HelpWindow(bui.Window):
txt_scale = 0.7 txt_scale = 0.7
txt = bui.Lstr( txt = bui.Lstr(
resource=self._r + '.controlsSubtitleText', resource=f'{self._r}.controlsSubtitleText',
subs=[('${APP_NAME}', bui.Lstr(resource='titleText'))], subs=[('${APP_NAME}', bui.Lstr(resource='titleText'))],
).evaluate() ).evaluate()
bui.textwidget( bui.textwidget(
@ -413,8 +413,8 @@ class HelpWindow(bui.Window):
color=(1, 0.7, 0.3), color=(1, 0.7, 0.3),
) )
txt_scale = getres(self._r + '.punchInfoTextScale') txt_scale = getres(f'{self._r}.punchInfoTextScale')
txt = bui.Lstr(resource=self._r + '.punchInfoText').evaluate() txt = bui.Lstr(resource=f'{self._r}.punchInfoText').evaluate()
bui.textwidget( bui.textwidget(
parent=self._subcontainer, parent=self._subcontainer,
position=(h - sep - 185 + 70, v + 120), position=(h - sep - 185 + 70, v + 120),
@ -437,8 +437,8 @@ class HelpWindow(bui.Window):
color=(1, 0.3, 0.3), color=(1, 0.3, 0.3),
) )
txt = bui.Lstr(resource=self._r + '.bombInfoText').evaluate() txt = bui.Lstr(resource=f'{self._r}.bombInfoText').evaluate()
txt_scale = getres(self._r + '.bombInfoTextScale') txt_scale = getres(f'{self._r}.bombInfoTextScale')
bui.textwidget( bui.textwidget(
parent=self._subcontainer, parent=self._subcontainer,
position=(h + sep + 50 + 60, v - 35), position=(h + sep + 50 + 60, v - 35),
@ -462,8 +462,8 @@ class HelpWindow(bui.Window):
color=(0.5, 0.5, 1), color=(0.5, 0.5, 1),
) )
txtl = bui.Lstr(resource=self._r + '.pickUpInfoText') txtl = bui.Lstr(resource=f'{self._r}.pickUpInfoText')
txt_scale = getres(self._r + '.pickUpInfoTextScale') txt_scale = getres(f'{self._r}.pickUpInfoTextScale')
bui.textwidget( bui.textwidget(
parent=self._subcontainer, parent=self._subcontainer,
position=(h + 60 + 120, v + sep + 50), position=(h + 60 + 120, v + sep + 50),
@ -486,8 +486,8 @@ class HelpWindow(bui.Window):
color=(0.4, 1, 0.4), color=(0.4, 1, 0.4),
) )
txt = bui.Lstr(resource=self._r + '.jumpInfoText').evaluate() txt = bui.Lstr(resource=f'{self._r}.jumpInfoText').evaluate()
txt_scale = getres(self._r + '.jumpInfoTextScale') txt_scale = getres(f'{self._r}.jumpInfoTextScale')
bui.textwidget( bui.textwidget(
parent=self._subcontainer, parent=self._subcontainer,
position=(h - 250 + 75, v - sep - 15 + 30), position=(h - 250 + 75, v - sep - 15 + 30),
@ -500,8 +500,8 @@ class HelpWindow(bui.Window):
v_align='top', v_align='top',
) )
txt = bui.Lstr(resource=self._r + '.runInfoText').evaluate() txt = bui.Lstr(resource=f'{self._r}.runInfoText').evaluate()
txt_scale = getres(self._r + '.runInfoTextScale') txt_scale = getres(f'{self._r}.runInfoTextScale')
bui.textwidget( bui.textwidget(
parent=self._subcontainer, parent=self._subcontainer,
position=(h, v - sep - 100), position=(h, v - sep - 100),
@ -517,7 +517,7 @@ class HelpWindow(bui.Window):
v -= spacing * 280.0 v -= spacing * 280.0
txt = bui.Lstr(resource=self._r + '.powerupsText').evaluate() txt = bui.Lstr(resource=f'{self._r}.powerupsText').evaluate()
txt_scale = 1.4 txt_scale = 1.4
txt_maxwidth = 480 txt_maxwidth = 480
bui.textwidget( bui.textwidget(
@ -546,8 +546,8 @@ class HelpWindow(bui.Window):
) )
v -= spacing * 50.0 v -= spacing * 50.0
txt_scale = getres(self._r + '.powerupsSubtitleTextScale') txt_scale = getres(f'{self._r}.powerupsSubtitleTextScale')
txt = bui.Lstr(resource=self._r + '.powerupsSubtitleText').evaluate() txt = bui.Lstr(resource=f'{self._r}.powerupsSubtitleText').evaluate()
bui.textwidget( bui.textwidget(
parent=self._subcontainer, parent=self._subcontainer,
position=(h, v), position=(h, v),
@ -586,8 +586,8 @@ class HelpWindow(bui.Window):
'powerupLandMines', 'powerupLandMines',
'powerupCurse', 'powerupCurse',
]: ]:
name = bui.Lstr(resource=self._r + '.' + tex + 'NameText') name = bui.Lstr(resource=f'{self._r}.' + tex + 'NameText')
desc = bui.Lstr(resource=self._r + '.' + tex + 'DescriptionText') desc = bui.Lstr(resource=f'{self._r}.' + tex + 'DescriptionText')
v -= spacing * 60.0 v -= spacing * 60.0

View File

@ -69,7 +69,7 @@ class KioskWindow(bui.Window):
size=(0, 0), size=(0, 0),
position=(self._width * 0.5, self._height + y_extra - 44), position=(self._width * 0.5, self._height + y_extra - 44),
transition_delay=tdelay, transition_delay=tdelay,
text=bui.Lstr(resource=self._r + '.singlePlayerExamplesText'), text=bui.Lstr(resource=f'{self._r}.singlePlayerExamplesText'),
flatness=1.0, flatness=1.0,
scale=1.2, scale=1.2,
h_align='center', h_align='center',
@ -116,7 +116,7 @@ class KioskWindow(bui.Window):
size=(0, 0), size=(0, 0),
position=(h, label_height), position=(h, label_height),
maxwidth=b_width * 0.7, maxwidth=b_width * 0.7,
text=bui.Lstr(resource=self._r + '.easyText'), text=bui.Lstr(resource=f'{self._r}.easyText'),
scale=1.3, scale=1.3,
h_align='center', h_align='center',
v_align='center', v_align='center',
@ -151,7 +151,7 @@ class KioskWindow(bui.Window):
size=(0, 0), size=(0, 0),
position=(h, label_height), position=(h, label_height),
maxwidth=b_width * 0.7, maxwidth=b_width * 0.7,
text=bui.Lstr(resource=self._r + '.mediumText'), text=bui.Lstr(resource=f'{self._r}.mediumText'),
scale=1.3, scale=1.3,
h_align='center', h_align='center',
v_align='center', v_align='center',
@ -215,7 +215,7 @@ class KioskWindow(bui.Window):
size=(0, 0), size=(0, 0),
position=(self._width * 0.5, self._height + y_extra - 44), position=(self._width * 0.5, self._height + y_extra - 44),
transition_delay=tdelay, transition_delay=tdelay,
text=bui.Lstr(resource=self._r + '.versusExamplesText'), text=bui.Lstr(resource=f'{self._r}.versusExamplesText'),
flatness=1.0, flatness=1.0,
scale=1.2, scale=1.2,
h_align='center', h_align='center',
@ -312,7 +312,7 @@ class KioskWindow(bui.Window):
size=(0, 0), size=(0, 0),
position=(h, label_height), position=(h, label_height),
maxwidth=b_width * 0.7, maxwidth=b_width * 0.7,
text=bui.Lstr(resource=self._r + '.epicModeText'), text=bui.Lstr(resource=f'{self._r}.epicModeText'),
scale=1.3, scale=1.3,
h_align='center', h_align='center',
v_align='center', v_align='center',
@ -342,7 +342,7 @@ class KioskWindow(bui.Window):
scale=0.5, scale=0.5,
position=(self._width * 0.5 - 60.0, b_v - 70.0), position=(self._width * 0.5 - 60.0, b_v - 70.0),
transition_delay=tdelay, transition_delay=tdelay,
label=bui.Lstr(resource=self._r + '.fullMenuText'), label=bui.Lstr(resource=f'{self._r}.fullMenuText'),
on_activate_call=self._do_full_menu, on_activate_call=self._do_full_menu,
) )
else: else:

View File

@ -255,7 +255,7 @@ class MainMenuWindow(bui.Window):
size=(self._button_width, self._button_height), size=(self._button_width, self._button_height),
scale=scale, scale=scale,
autoselect=self._use_autoselect, autoselect=self._use_autoselect,
label=bui.Lstr(resource=self._r + '.settingsText'), label=bui.Lstr(resource=f'{self._r}.settingsText'),
transition_delay=self._tdelay, transition_delay=self._tdelay,
on_activate_call=self._settings, on_activate_call=self._settings,
) )
@ -324,7 +324,7 @@ class MainMenuWindow(bui.Window):
scale=scale, scale=scale,
size=(self._button_width, self._button_height), size=(self._button_width, self._button_height),
autoselect=self._use_autoselect, autoselect=self._use_autoselect,
label=bui.Lstr(resource=self._r + '.leavePartyText'), label=bui.Lstr(resource=f'{self._r}.leavePartyText'),
on_activate_call=self._confirm_leave_party, on_activate_call=self._confirm_leave_party,
) )
@ -881,7 +881,7 @@ class MainMenuWindow(bui.Window):
scale=scale, scale=scale,
autoselect=self._use_autoselect, autoselect=self._use_autoselect,
size=(self._button_width, self._button_height), size=(self._button_width, self._button_height),
label=bui.Lstr(resource=self._r + '.howToPlayText'), label=bui.Lstr(resource=f'{self._r}.howToPlayText'),
transition_delay=self._tdelay, transition_delay=self._tdelay,
on_activate_call=self._howtoplay, on_activate_call=self._howtoplay,
) )
@ -913,7 +913,7 @@ class MainMenuWindow(bui.Window):
position=(h - self._button_width * 0.5 * scale, v), position=(h - self._button_width * 0.5 * scale, v),
size=(self._button_width, self._button_height), size=(self._button_width, self._button_height),
autoselect=self._use_autoselect, autoselect=self._use_autoselect,
label=bui.Lstr(resource=self._r + '.creditsText'), label=bui.Lstr(resource=f'{self._r}.creditsText'),
scale=scale, scale=scale,
transition_delay=self._tdelay, transition_delay=self._tdelay,
on_activate_call=self._credits, on_activate_call=self._credits,
@ -1006,7 +1006,7 @@ class MainMenuWindow(bui.Window):
position=(h - self._button_width / 2, v), position=(h - self._button_width / 2, v),
size=(self._button_width, self._button_height), size=(self._button_width, self._button_height),
scale=scale, scale=scale,
label=bui.Lstr(resource=self._r + '.resumeText'), label=bui.Lstr(resource=f'{self._r}.resumeText'),
autoselect=self._use_autoselect, autoselect=self._use_autoselect,
on_activate_call=self._resume, on_activate_call=self._resume,
) )
@ -1057,7 +1057,7 @@ class MainMenuWindow(bui.Window):
and player_name[-1] != '>' and player_name[-1] != '>'
): ):
txt = bui.Lstr( txt = bui.Lstr(
resource=self._r + '.justPlayerText', resource=f'{self._r}.justPlayerText',
subs=[('${NAME}', player_name)], subs=[('${NAME}', player_name)],
) )
else: else:
@ -1071,7 +1071,7 @@ class MainMenuWindow(bui.Window):
* (0.64 if player_name != '' else 0.5), * (0.64 if player_name != '' else 0.5),
), ),
size=(0, 0), size=(0, 0),
text=bui.Lstr(resource=self._r + '.leaveGameText'), text=bui.Lstr(resource=f'{self._r}.leaveGameText'),
scale=(0.83 if player_name != '' else 1.0), scale=(0.83 if player_name != '' else 1.0),
color=(0.75, 1.0, 0.7), color=(0.75, 1.0, 0.7),
h_align='center', h_align='center',
@ -1210,7 +1210,7 @@ class MainMenuWindow(bui.Window):
# Select cancel by default; this occasionally gets called by accident # Select cancel by default; this occasionally gets called by accident
# in a fit of button mashing and this will help reduce damage. # in a fit of button mashing and this will help reduce damage.
ConfirmWindow( ConfirmWindow(
bui.Lstr(resource=self._r + '.exitToMenuText'), bui.Lstr(resource=f'{self._r}.exitToMenuText'),
self._end_game, self._end_game,
cancel_is_selected=True, cancel_is_selected=True,
) )
@ -1222,7 +1222,7 @@ class MainMenuWindow(bui.Window):
# Select cancel by default; this occasionally gets called by accident # Select cancel by default; this occasionally gets called by accident
# in a fit of button mashing and this will help reduce damage. # in a fit of button mashing and this will help reduce damage.
ConfirmWindow( ConfirmWindow(
bui.Lstr(resource=self._r + '.exitToMenuText'), bui.Lstr(resource=f'{self._r}.exitToMenuText'),
self._end_game, self._end_game,
cancel_is_selected=True, cancel_is_selected=True,
) )
@ -1234,7 +1234,7 @@ class MainMenuWindow(bui.Window):
# Select cancel by default; this occasionally gets called by accident # Select cancel by default; this occasionally gets called by accident
# in a fit of button mashing and this will help reduce damage. # in a fit of button mashing and this will help reduce damage.
ConfirmWindow( ConfirmWindow(
bui.Lstr(resource=self._r + '.exitToMenuText'), bui.Lstr(resource=f'{self._r}.exitToMenuText'),
self._end_game, self._end_game,
cancel_is_selected=True, cancel_is_selected=True,
) )
@ -1246,7 +1246,7 @@ class MainMenuWindow(bui.Window):
# Select cancel by default; this occasionally gets called by accident # Select cancel by default; this occasionally gets called by accident
# in a fit of button mashing and this will help reduce damage. # in a fit of button mashing and this will help reduce damage.
ConfirmWindow( ConfirmWindow(
bui.Lstr(resource=self._r + '.leavePartyConfirmText'), bui.Lstr(resource=f'{self._r}.leavePartyConfirmText'),
self._leave_party, self._leave_party,
cancel_is_selected=True, cancel_is_selected=True,
) )

View File

@ -96,7 +96,7 @@ class PartyWindow(bui.Window):
if info is not None and info.name != '': if info is not None and info.name != '':
title = bui.Lstr(value=info.name) title = bui.Lstr(value=info.name)
else: else:
title = bui.Lstr(resource=self._r + '.titleText') title = bui.Lstr(resource=f'{self._r}.titleText')
self._title_text = bui.textwidget( self._title_text = bui.textwidget(
parent=self._root_widget, parent=self._root_widget,
@ -151,7 +151,7 @@ class PartyWindow(bui.Window):
maxwidth=494, maxwidth=494,
shadow=0.3, shadow=0.3,
flatness=1.0, flatness=1.0,
description=bui.Lstr(resource=self._r + '.chatMessageText'), description=bui.Lstr(resource=f'{self._r}.chatMessageText'),
autoselect=True, autoselect=True,
v_align='center', v_align='center',
corner_scale=0.7, corner_scale=0.7,
@ -175,7 +175,7 @@ class PartyWindow(bui.Window):
btn = bui.buttonwidget( btn = bui.buttonwidget(
parent=self._root_widget, parent=self._root_widget,
size=(50, 35), size=(50, 35),
label=bui.Lstr(resource=self._r + '.sendText'), label=bui.Lstr(resource=f'{self._r}.sendText'),
button_type='square', button_type='square',
autoselect=True, autoselect=True,
position=(self._width - 70, 35), position=(self._width - 70, 35),
@ -294,7 +294,7 @@ class PartyWindow(bui.Window):
top_section_height = 60 top_section_height = 60
bui.textwidget( bui.textwidget(
edit=self._empty_str, edit=self._empty_str,
text=bui.Lstr(resource=self._r + '.emptyText'), text=bui.Lstr(resource=f'{self._r}.emptyText'),
) )
bui.scrollwidget( bui.scrollwidget(
edit=self._scrollwidget, edit=self._scrollwidget,
@ -428,7 +428,7 @@ class PartyWindow(bui.Window):
maxwidth=c_width * 0.96 - twd, maxwidth=c_width * 0.96 - twd,
color=(0.1, 1, 0.1, 0.5), color=(0.1, 1, 0.1, 0.5),
text=bui.Lstr( text=bui.Lstr(
resource=self._r + '.hostText' resource=f'{self._r}.hostText'
), ),
scale=0.4, scale=0.4,
shadow=0.1, shadow=0.1,

View File

@ -82,7 +82,7 @@ class PlayWindow(bui.Window):
size=(0, 0), size=(0, 0),
text=bui.Lstr( text=bui.Lstr(
resource=( resource=(
(self._r + '.titleText') (f'{self._r}.titleText')
if self._is_main_menu if self._is_main_menu
else 'playlistsText' else 'playlistsText'
) )
@ -228,7 +228,7 @@ class PlayWindow(bui.Window):
draw_controller=btn, draw_controller=btn,
position=(hoffs + scl * (-10), v + (scl * 54)), position=(hoffs + scl * (-10), v + (scl * 54)),
size=(scl * button_width, scl * 30), size=(scl * button_width, scl * 30),
text=bui.Lstr(resource=self._r + '.oneToFourPlayersText'), text=bui.Lstr(resource=f'{self._r}.oneToFourPlayersText'),
h_align='center', h_align='center',
v_align='center', v_align='center',
scale=0.83 * scl, scale=0.83 * scl,
@ -359,7 +359,7 @@ class PlayWindow(bui.Window):
draw_controller=btn, draw_controller=btn,
position=(hoffs + scl * (-10), v + (scl * 54)), position=(hoffs + scl * (-10), v + (scl * 54)),
size=(scl * button_width, scl * 30), size=(scl * button_width, scl * 30),
text=bui.Lstr(resource=self._r + '.twoToEightPlayersText'), text=bui.Lstr(resource=f'{self._r}.twoToEightPlayersText'),
h_align='center', h_align='center',
v_align='center', v_align='center',
res_scale=1.5, res_scale=1.5,
@ -480,7 +480,7 @@ class PlayWindow(bui.Window):
draw_controller=btn, draw_controller=btn,
position=(hoffs + scl * (-10), v + (scl * 54)), position=(hoffs + scl * (-10), v + (scl * 54)),
size=(scl * button_width, scl * 30), size=(scl * button_width, scl * 30),
text=bui.Lstr(resource=self._r + '.twoToEightPlayersText'), text=bui.Lstr(resource=f'{self._r}.twoToEightPlayersText'),
h_align='center', h_align='center',
v_align='center', v_align='center',
scale=0.9 * scl, scale=0.9 * scl,

View File

@ -81,7 +81,7 @@ class PlaylistAddGameWindow(bui.Window):
position=(self._width * 0.5, self._height - 28), position=(self._width * 0.5, self._height - 28),
size=(0, 0), size=(0, 0),
scale=1.0, scale=1.0,
text=bui.Lstr(resource=self._r + '.titleText'), text=bui.Lstr(resource=f'{self._r}.titleText'),
h_align='center', h_align='center',
color=bui.app.ui_v1.title_color, color=bui.app.ui_v1.title_color,
maxwidth=250, maxwidth=250,
@ -211,7 +211,7 @@ class PlaylistAddGameWindow(bui.Window):
self._get_more_games_button = bui.buttonwidget( self._get_more_games_button = bui.buttonwidget(
parent=self._column, parent=self._column,
autoselect=True, autoselect=True,
label=bui.Lstr(resource=self._r + '.getMoreGamesText'), label=bui.Lstr(resource=f'{self._r}.getMoreGamesText'),
color=(0.54, 0.52, 0.67), color=(0.54, 0.52, 0.67),
textcolor=(0.7, 0.65, 0.7), textcolor=(0.7, 0.65, 0.7),
on_activate_call=self._on_get_more_games_press, on_activate_call=self._on_get_more_games_press,

View File

@ -88,7 +88,7 @@ class PlaylistCustomizeBrowserWindow(bui.Window):
position=(0, self._height - 47), position=(0, self._height - 47),
size=(self._width, 25), size=(self._width, 25),
text=bui.Lstr( text=bui.Lstr(
resource=self._r + '.titleText', resource=f'{self._r}.titleText',
subs=[('${TYPE}', self._pvars.window_title_name)], subs=[('${TYPE}', self._pvars.window_title_name)],
), ),
color=bui.app.ui_v1.heading_color, color=bui.app.ui_v1.heading_color,
@ -129,7 +129,7 @@ class PlaylistCustomizeBrowserWindow(bui.Window):
textcolor=b_textcolor, textcolor=b_textcolor,
text_scale=0.7, text_scale=0.7,
label=bui.Lstr( label=bui.Lstr(
resource='newText', fallback_resource=self._r + '.newText' resource='newText', fallback_resource=f'{self._r}.newText'
), ),
) )
self._lock_images.append( self._lock_images.append(
@ -154,7 +154,7 @@ class PlaylistCustomizeBrowserWindow(bui.Window):
button_type='square', button_type='square',
text_scale=0.7, text_scale=0.7,
label=bui.Lstr( label=bui.Lstr(
resource='editText', fallback_resource=self._r + '.editText' resource='editText', fallback_resource=f'{self._r}.editText'
), ),
) )
self._lock_images.append( self._lock_images.append(
@ -180,7 +180,7 @@ class PlaylistCustomizeBrowserWindow(bui.Window):
text_scale=0.7, text_scale=0.7,
label=bui.Lstr( label=bui.Lstr(
resource='duplicateText', resource='duplicateText',
fallback_resource=self._r + '.duplicateText', fallback_resource=f'{self._r}.duplicateText',
), ),
) )
self._lock_images.append( self._lock_images.append(
@ -205,7 +205,7 @@ class PlaylistCustomizeBrowserWindow(bui.Window):
button_type='square', button_type='square',
text_scale=0.7, text_scale=0.7,
label=bui.Lstr( label=bui.Lstr(
resource='deleteText', fallback_resource=self._r + '.deleteText' resource='deleteText', fallback_resource=f'{self._r}.deleteText'
), ),
) )
self._lock_images.append( self._lock_images.append(
@ -509,7 +509,7 @@ class PlaylistCustomizeBrowserWindow(bui.Window):
if self._selected_playlist_name == '__default__': if self._selected_playlist_name == '__default__':
bui.getsound('error').play() bui.getsound('error').play()
bui.screenmessage( bui.screenmessage(
bui.Lstr(resource=self._r + '.cantEditDefaultText') bui.Lstr(resource=f'{self._r}.cantEditDefaultText')
) )
return return
self._save_playlist_selection() self._save_playlist_selection()
@ -598,7 +598,7 @@ class PlaylistCustomizeBrowserWindow(bui.Window):
if self._selected_playlist_name == '__default__': if self._selected_playlist_name == '__default__':
bui.getsound('error').play() bui.getsound('error').play()
bui.screenmessage( bui.screenmessage(
bui.Lstr(resource=self._r + '.cantShareDefaultText'), bui.Lstr(resource=f'{self._r}.cantShareDefaultText'),
color=(1, 0, 0), color=(1, 0, 0),
) )
return return
@ -635,12 +635,12 @@ class PlaylistCustomizeBrowserWindow(bui.Window):
if self._selected_playlist_name == '__default__': if self._selected_playlist_name == '__default__':
bui.getsound('error').play() bui.getsound('error').play()
bui.screenmessage( bui.screenmessage(
bui.Lstr(resource=self._r + '.cantDeleteDefaultText') bui.Lstr(resource=f'{self._r}.cantDeleteDefaultText')
) )
else: else:
ConfirmWindow( ConfirmWindow(
bui.Lstr( bui.Lstr(
resource=self._r + '.deleteConfirmText', resource=f'{self._r}.deleteConfirmText',
subs=[('${LIST}', self._selected_playlist_name)], subs=[('${LIST}', self._selected_playlist_name)],
), ),
self._do_delete_playlist, self._do_delete_playlist,

View File

@ -90,7 +90,7 @@ class PlaylistEditWindow(bui.Window):
parent=self._root_widget, parent=self._root_widget,
position=(-10, self._height - 50), position=(-10, self._height - 50),
size=(self._width, 25), size=(self._width, 25),
text=bui.Lstr(resource=self._r + '.titleText'), text=bui.Lstr(resource=f'{self._r}.titleText'),
color=bui.app.ui_v1.title_color, color=bui.app.ui_v1.title_color,
scale=1.05, scale=1.05,
h_align='center', h_align='center',
@ -104,7 +104,7 @@ class PlaylistEditWindow(bui.Window):
bui.textwidget( bui.textwidget(
parent=self._root_widget, parent=self._root_widget,
text=bui.Lstr(resource=self._r + '.listNameText'), text=bui.Lstr(resource=f'{self._r}.listNameText'),
position=(196 + x_inset, v + 31), position=(196 + x_inset, v + 31),
maxwidth=150, maxwidth=150,
color=(0.8, 0.8, 0.8, 0.5), color=(0.8, 0.8, 0.8, 0.5),
@ -124,7 +124,7 @@ class PlaylistEditWindow(bui.Window):
max_chars=40, max_chars=40,
autoselect=True, autoselect=True,
color=(0.9, 0.9, 0.9, 1.0), color=(0.9, 0.9, 0.9, 1.0),
description=bui.Lstr(resource=self._r + '.listNameText'), description=bui.Lstr(resource=f'{self._r}.listNameText'),
editable=True, editable=True,
padding=4, padding=4,
on_return_press_call=self._save_press_with_sound, on_return_press_call=self._save_press_with_sound,
@ -160,7 +160,7 @@ class PlaylistEditWindow(bui.Window):
color=b_color, color=b_color,
textcolor=b_textcolor, textcolor=b_textcolor,
text_scale=0.8, text_scale=0.8,
label=bui.Lstr(resource=self._r + '.addGameText'), label=bui.Lstr(resource=f'{self._r}.addGameText'),
) )
bui.widget(edit=add_game_button, up_widget=self._text_field) bui.widget(edit=add_game_button, up_widget=self._text_field)
v -= 63.0 * scl v -= 63.0 * scl
@ -176,7 +176,7 @@ class PlaylistEditWindow(bui.Window):
color=b_color, color=b_color,
textcolor=b_textcolor, textcolor=b_textcolor,
text_scale=0.8, text_scale=0.8,
label=bui.Lstr(resource=self._r + '.editGameText'), label=bui.Lstr(resource=f'{self._r}.editGameText'),
) )
v -= 63.0 * scl v -= 63.0 * scl
@ -190,7 +190,7 @@ class PlaylistEditWindow(bui.Window):
button_type='square', button_type='square',
color=b_color, color=b_color,
textcolor=b_textcolor, textcolor=b_textcolor,
label=bui.Lstr(resource=self._r + '.removeGameText'), label=bui.Lstr(resource=f'{self._r}.removeGameText'),
) )
v -= 40 v -= 40
h += 9 h += 9
@ -330,7 +330,7 @@ class PlaylistEditWindow(bui.Window):
] ]
): ):
bui.screenmessage( bui.screenmessage(
bui.Lstr(resource=self._r + '.cantSaveAlreadyExistsText') bui.Lstr(resource=f'{self._r}.cantSaveAlreadyExistsText')
) )
bui.getsound('error').play() bui.getsound('error').play()
return return
@ -339,7 +339,7 @@ class PlaylistEditWindow(bui.Window):
return return
if not self._editcontroller.get_playlist(): if not self._editcontroller.get_playlist():
bui.screenmessage( bui.screenmessage(
bui.Lstr(resource=self._r + '.cantSaveEmptyListText') bui.Lstr(resource=f'{self._r}.cantSaveEmptyListText')
) )
bui.getsound('error').play() bui.getsound('error').play()
return return
@ -348,7 +348,7 @@ class PlaylistEditWindow(bui.Window):
# using its exact name to avoid confusion. # using its exact name to avoid confusion.
if new_name == self._editcontroller.get_default_list_name().evaluate(): if new_name == self._editcontroller.get_default_list_name().evaluate():
bui.screenmessage( bui.screenmessage(
bui.Lstr(resource=self._r + '.cantOverwriteDefaultText') bui.Lstr(resource=f'{self._r}.cantOverwriteDefaultText')
) )
bui.getsound('error').play() bui.getsound('error').play()
return return

View File

@ -159,7 +159,7 @@ class PlaylistEditGameWindow(bui.Window):
scale=0.75, scale=0.75,
text_scale=1.3, text_scale=1.3,
label=( label=(
bui.Lstr(resource=self._r + '.addGameText') bui.Lstr(resource=f'{self._r}.addGameText')
if is_add if is_add
else bui.Lstr(resource='doneText') else bui.Lstr(resource='doneText')
), ),

View File

@ -341,7 +341,7 @@ class PlayOptionsWindow(PopupWindow):
scale=1.0, scale=1.0,
size=(250, 30), size=(250, 30),
autoselect=True, autoselect=True,
text=bui.Lstr(resource=self._r + '.shuffleGameOrderText'), text=bui.Lstr(resource=f'{self._r}.shuffleGameOrderText'),
maxwidth=300, maxwidth=300,
textcolor=(0.8, 0.8, 0.8), textcolor=(0.8, 0.8, 0.8),
value=self._do_randomize_val, value=self._do_randomize_val,
@ -362,7 +362,7 @@ class PlayOptionsWindow(PopupWindow):
scale=1.0, scale=1.0,
size=(250, 30), size=(250, 30),
autoselect=True, autoselect=True,
text=bui.Lstr(resource=self._r + '.showTutorialText'), text=bui.Lstr(resource=f'{self._r}.showTutorialText'),
maxwidth=300, maxwidth=300,
textcolor=(0.8, 0.8, 0.8), textcolor=(0.8, 0.8, 0.8),
value=show_tutorial, value=show_tutorial,

View File

@ -96,7 +96,7 @@ class ProfileBrowserWindow(bui.Window):
parent=self._root_widget, parent=self._root_widget,
position=(self._width * 0.5, self._height - 36), position=(self._width * 0.5, self._height - 36),
size=(0, 0), size=(0, 0),
text=bui.Lstr(resource=self._r + '.titleText'), text=bui.Lstr(resource=f'{self._r}.titleText'),
maxwidth=300, maxwidth=300,
color=bui.app.ui_v1.title_color, color=bui.app.ui_v1.title_color,
scale=0.9, scale=0.9,
@ -134,7 +134,7 @@ class ProfileBrowserWindow(bui.Window):
autoselect=True, autoselect=True,
textcolor=(0.75, 0.7, 0.8), textcolor=(0.75, 0.7, 0.8),
text_scale=0.7, text_scale=0.7,
label=bui.Lstr(resource=self._r + '.newButtonText'), label=bui.Lstr(resource=f'{self._r}.newButtonText'),
) )
v -= 70.0 * scl v -= 70.0 * scl
self._edit_button = bui.buttonwidget( self._edit_button = bui.buttonwidget(
@ -147,7 +147,7 @@ class ProfileBrowserWindow(bui.Window):
autoselect=True, autoselect=True,
textcolor=(0.75, 0.7, 0.8), textcolor=(0.75, 0.7, 0.8),
text_scale=0.7, text_scale=0.7,
label=bui.Lstr(resource=self._r + '.editButtonText'), label=bui.Lstr(resource=f'{self._r}.editButtonText'),
) )
v -= 70.0 * scl v -= 70.0 * scl
self._delete_button = bui.buttonwidget( self._delete_button = bui.buttonwidget(
@ -160,7 +160,7 @@ class ProfileBrowserWindow(bui.Window):
autoselect=True, autoselect=True,
textcolor=(0.75, 0.7, 0.8), textcolor=(0.75, 0.7, 0.8),
text_scale=0.7, text_scale=0.7,
label=bui.Lstr(resource=self._r + '.deleteButtonText'), label=bui.Lstr(resource=f'{self._r}.deleteButtonText'),
) )
v = self._height - 87 v = self._height - 87
@ -169,7 +169,7 @@ class ProfileBrowserWindow(bui.Window):
parent=self._root_widget, parent=self._root_widget,
position=(self._width * 0.5, self._height - 71), position=(self._width * 0.5, self._height - 71),
size=(0, 0), size=(0, 0),
text=bui.Lstr(resource=self._r + '.explanationText'), text=bui.Lstr(resource=f'{self._r}.explanationText'),
color=bui.app.ui_v1.infotextcolor, color=bui.app.ui_v1.infotextcolor,
maxwidth=self._width * 0.83, maxwidth=self._width * 0.83,
scale=0.6, scale=0.6,
@ -269,13 +269,13 @@ class ProfileBrowserWindow(bui.Window):
if self._selected_profile == '__account__': if self._selected_profile == '__account__':
bui.getsound('error').play() bui.getsound('error').play()
bui.screenmessage( bui.screenmessage(
bui.Lstr(resource=self._r + '.cantDeleteAccountProfileText'), bui.Lstr(resource=f'{self._r}.cantDeleteAccountProfileText'),
color=(1, 0, 0), color=(1, 0, 0),
) )
return return
confirm.ConfirmWindow( confirm.ConfirmWindow(
bui.Lstr( bui.Lstr(
resource=self._r + '.deleteConfirmText', resource=f'{self._r}.deleteConfirmText',
subs=[('${PROFILE}', self._selected_profile)], subs=[('${PROFILE}', self._selected_profile)],
), ),
self._do_delete_profile, self._do_delete_profile,

View File

@ -110,9 +110,9 @@ class EditProfileWindow(bui.Window):
position=(self._width * 0.5, height - 38), position=(self._width * 0.5, height - 38),
size=(0, 0), size=(0, 0),
text=( text=(
bui.Lstr(resource=self._r + '.titleNewText') bui.Lstr(resource=f'{self._r}.titleNewText')
if existing_profile is None if existing_profile is None
else bui.Lstr(resource=self._r + '.titleEditText') else bui.Lstr(resource=f'{self._r}.titleEditText')
), ),
color=bui.app.ui_v1.title_color, color=bui.app.ui_v1.title_color,
maxwidth=290, maxwidth=290,
@ -200,7 +200,7 @@ class EditProfileWindow(bui.Window):
if not self._is_account_profile and not self._global: if not self._is_account_profile and not self._global:
bui.textwidget( bui.textwidget(
parent=self._root_widget, parent=self._root_widget,
text=bui.Lstr(resource=self._r + '.nameText'), text=bui.Lstr(resource=f'{self._r}.nameText'),
position=(200 + x_inset, v - 6), position=(200 + x_inset, v - 6),
size=(0, 0), size=(0, 0),
h_align='right', h_align='right',
@ -286,7 +286,7 @@ class EditProfileWindow(bui.Window):
position=(self._width * 0.5 - 160, v - 55 - 15), position=(self._width * 0.5 - 160, v - 55 - 15),
size=(0, 0), size=(0, 0),
draw_controller=btn, draw_controller=btn,
text=bui.Lstr(resource=self._r + '.iconText'), text=bui.Lstr(resource=f'{self._r}.iconText'),
scale=0.7, scale=0.7,
color=bui.app.ui_v1.title_color, color=bui.app.ui_v1.title_color,
maxwidth=120, maxwidth=120,
@ -343,7 +343,7 @@ class EditProfileWindow(bui.Window):
h_align='left', h_align='left',
v_align='center', v_align='center',
max_chars=16, max_chars=16,
description=bui.Lstr(resource=self._r + '.nameDescriptionText'), description=bui.Lstr(resource=f'{self._r}.nameDescriptionText'),
autoselect=True, autoselect=True,
editable=True, editable=True,
padding=4, padding=4,
@ -433,7 +433,7 @@ class EditProfileWindow(bui.Window):
position=(self._width * 0.5 - b_offs, v - 65), position=(self._width * 0.5 - b_offs, v - 65),
size=(0, 0), size=(0, 0),
draw_controller=btn, draw_controller=btn,
text=bui.Lstr(resource=self._r + '.colorText'), text=bui.Lstr(resource=f'{self._r}.colorText'),
scale=0.7, scale=0.7,
color=bui.app.ui_v1.title_color, color=bui.app.ui_v1.title_color,
maxwidth=120, maxwidth=120,
@ -461,7 +461,7 @@ class EditProfileWindow(bui.Window):
position=(self._width * 0.5, v - 80), position=(self._width * 0.5, v - 80),
size=(0, 0), size=(0, 0),
draw_controller=btn, draw_controller=btn,
text=bui.Lstr(resource=self._r + '.characterText'), text=bui.Lstr(resource=f'{self._r}.characterText'),
scale=0.7, scale=0.7,
color=bui.app.ui_v1.title_color, color=bui.app.ui_v1.title_color,
maxwidth=130, maxwidth=130,
@ -505,7 +505,7 @@ class EditProfileWindow(bui.Window):
position=(self._width * 0.5 + b_offs, v - 65), position=(self._width * 0.5 + b_offs, v - 65),
size=(0, 0), size=(0, 0),
draw_controller=btn, draw_controller=btn,
text=bui.Lstr(resource=self._r + '.highlightText'), text=bui.Lstr(resource=f'{self._r}.highlightText'),
scale=0.7, scale=0.7,
color=bui.app.ui_v1.title_color, color=bui.app.ui_v1.title_color,
maxwidth=120, maxwidth=120,

View File

@ -87,7 +87,7 @@ class ProfileUpgradeWindow(bui.Window):
parent=self._root_widget, parent=self._root_widget,
position=(self._width * 0.5, self._height - 38), position=(self._width * 0.5, self._height - 38),
size=(0, 0), size=(0, 0),
text=bui.Lstr(resource=self._r + '.upgradeToGlobalProfileText'), text=bui.Lstr(resource=f'{self._r}.upgradeToGlobalProfileText'),
color=bui.app.ui_v1.title_color, color=bui.app.ui_v1.title_color,
maxwidth=self._width * 0.45, maxwidth=self._width * 0.45,
scale=1.0, scale=1.0,
@ -100,7 +100,7 @@ class ProfileUpgradeWindow(bui.Window):
parent=self._root_widget, parent=self._root_widget,
position=(self._width * 0.5, self._height - 100), position=(self._width * 0.5, self._height - 100),
size=(0, 0), size=(0, 0),
text=bui.Lstr(resource=self._r + '.upgradeProfileInfoText'), text=bui.Lstr(resource=f'{self._r}.upgradeProfileInfoText'),
color=bui.app.ui_v1.infotextcolor, color=bui.app.ui_v1.infotextcolor,
maxwidth=self._width * 0.8, maxwidth=self._width * 0.8,
scale=0.7, scale=0.7,
@ -113,7 +113,7 @@ class ProfileUpgradeWindow(bui.Window):
position=(self._width * 0.5, self._height - 160), position=(self._width * 0.5, self._height - 160),
size=(0, 0), size=(0, 0),
text=bui.Lstr( text=bui.Lstr(
resource=self._r + '.checkingAvailabilityText', resource=f'{self._r}.checkingAvailabilityText',
subs=[('${NAME}', self._name)], subs=[('${NAME}', self._name)],
), ),
color=(0.8, 0.4, 0.0), color=(0.8, 0.4, 0.0),
@ -183,7 +183,7 @@ class ProfileUpgradeWindow(bui.Window):
bui.textwidget( bui.textwidget(
edit=self._status_text, edit=self._status_text,
text=bui.Lstr( text=bui.Lstr(
resource=self._r + '.availableText', resource=f'{self._r}.availableText',
subs=[('${NAME}', self._name)], subs=[('${NAME}', self._name)],
), ),
color=(0, 1, 0), color=(0, 1, 0),
@ -197,7 +197,7 @@ class ProfileUpgradeWindow(bui.Window):
bui.textwidget( bui.textwidget(
edit=self._status_text, edit=self._status_text,
text=bui.Lstr( text=bui.Lstr(
resource=self._r + '.unavailableText', resource=f'{self._r}.unavailableText',
subs=[('${NAME}', self._name)], subs=[('${NAME}', self._name)],
), ),
color=(1, 0, 0), color=(1, 0, 0),

View File

@ -109,7 +109,7 @@ class SendInfoWindow(bui.Window):
parent=self._root_widget, parent=self._root_widget,
text=bui.Lstr( text=bui.Lstr(
resource=( resource=(
self._r + '.codeText' f'{self._r}.codeText'
if legacy_code_mode if legacy_code_mode
else 'descriptionText' else 'descriptionText'
) )
@ -133,7 +133,7 @@ class SendInfoWindow(bui.Window):
color=(0.9, 0.9, 0.9, 1.0), color=(0.9, 0.9, 0.9, 1.0),
description=bui.Lstr( description=bui.Lstr(
resource=( resource=(
self._r + '.codeText' f'{self._r}.codeText'
if legacy_code_mode if legacy_code_mode
else 'descriptionText' else 'descriptionText'
) )
@ -152,7 +152,7 @@ class SendInfoWindow(bui.Window):
size=(b_width, 60), size=(b_width, 60),
scale=1.0, scale=1.0,
label=bui.Lstr( label=bui.Lstr(
resource='submitText', fallback_resource=self._r + '.enterText' resource='submitText', fallback_resource=f'{self._r}.enterText'
), ),
on_activate_call=self._do_enter, on_activate_call=self._do_enter,
) )

View File

@ -87,7 +87,7 @@ class AllSettingsWindow(bui.Window):
parent=self._root_widget, parent=self._root_widget,
position=(0, height - 44), position=(0, height - 44),
size=(width, 25), size=(width, 25),
text=bui.Lstr(resource=self._r + '.titleText'), text=bui.Lstr(resource=f'{self._r}.titleText'),
color=bui.app.ui_v1.title_color, color=bui.app.ui_v1.title_color,
h_align='center', h_align='center',
v_align='center', v_align='center',
@ -143,7 +143,7 @@ class AllSettingsWindow(bui.Window):
bbtn = bui.get_special_widget('back_button') bbtn = bui.get_special_widget('back_button')
bui.widget(edit=ctb, left_widget=bbtn) bui.widget(edit=ctb, left_widget=bbtn)
_b_title( _b_title(
x_offs2, v, ctb, bui.Lstr(resource=self._r + '.controllersText') x_offs2, v, ctb, bui.Lstr(resource=f'{self._r}.controllersText')
) )
imgw = imgh = 130 imgw = imgh = 130
bui.imagewidget( bui.imagewidget(
@ -166,7 +166,7 @@ class AllSettingsWindow(bui.Window):
if bui.app.ui_v1.use_toolbars: if bui.app.ui_v1.use_toolbars:
pbtn = bui.get_special_widget('party_button') pbtn = bui.get_special_widget('party_button')
bui.widget(edit=gfxb, up_widget=pbtn, right_widget=pbtn) bui.widget(edit=gfxb, up_widget=pbtn, right_widget=pbtn)
_b_title(x_offs3, v, gfxb, bui.Lstr(resource=self._r + '.graphicsText')) _b_title(x_offs3, v, gfxb, bui.Lstr(resource=f'{self._r}.graphicsText'))
imgw = imgh = 110 imgw = imgh = 110
bui.imagewidget( bui.imagewidget(
parent=self._root_widget, parent=self._root_widget,
@ -187,7 +187,7 @@ class AllSettingsWindow(bui.Window):
label='', label='',
on_activate_call=self._do_audio, on_activate_call=self._do_audio,
) )
_b_title(x_offs4, v, abtn, bui.Lstr(resource=self._r + '.audioText')) _b_title(x_offs4, v, abtn, bui.Lstr(resource=f'{self._r}.audioText'))
imgw = imgh = 120 imgw = imgh = 120
bui.imagewidget( bui.imagewidget(
parent=self._root_widget, parent=self._root_widget,
@ -207,7 +207,7 @@ class AllSettingsWindow(bui.Window):
label='', label='',
on_activate_call=self._do_advanced, on_activate_call=self._do_advanced,
) )
_b_title(x_offs5, v, avb, bui.Lstr(resource=self._r + '.advancedText')) _b_title(x_offs5, v, avb, bui.Lstr(resource=f'{self._r}.advancedText'))
imgw = imgh = 120 imgw = imgh = 120
bui.imagewidget( bui.imagewidget(
parent=self._root_widget, parent=self._root_widget,

View File

@ -97,7 +97,7 @@ class AudioSettingsWindow(bui.Window):
parent=self._root_widget, parent=self._root_widget,
position=(width * 0.5, height - 32), position=(width * 0.5, height - 32),
size=(0, 0), size=(0, 0),
text=bui.Lstr(resource=self._r + '.titleText'), text=bui.Lstr(resource=f'{self._r}.titleText'),
color=bui.app.ui_v1.title_color, color=bui.app.ui_v1.title_color,
maxwidth=180, maxwidth=180,
h_align='center', h_align='center',
@ -116,7 +116,7 @@ class AudioSettingsWindow(bui.Window):
position=(40, v), position=(40, v),
xoffset=10, xoffset=10,
configkey='Sound Volume', configkey='Sound Volume',
displayname=bui.Lstr(resource=self._r + '.soundVolumeText'), displayname=bui.Lstr(resource=f'{self._r}.soundVolumeText'),
minval=0.0, minval=0.0,
maxval=1.0, maxval=1.0,
increment=0.05, increment=0.05,
@ -133,7 +133,7 @@ class AudioSettingsWindow(bui.Window):
position=(40, v), position=(40, v),
xoffset=10, xoffset=10,
configkey='Music Volume', configkey='Music Volume',
displayname=bui.Lstr(resource=self._r + '.musicVolumeText'), displayname=bui.Lstr(resource=f'{self._r}.musicVolumeText'),
minval=0.0, minval=0.0,
maxval=1.0, maxval=1.0,
increment=0.05, increment=0.05,
@ -151,7 +151,7 @@ class AudioSettingsWindow(bui.Window):
parent=self._root_widget, parent=self._root_widget,
position=(40, v + 24), position=(40, v + 24),
size=(0, 0), size=(0, 0),
text=bui.Lstr(resource=self._r + '.headRelativeVRAudioText'), text=bui.Lstr(resource=f'{self._r}.headRelativeVRAudioText'),
color=(0.8, 0.8, 0.8), color=(0.8, 0.8, 0.8),
maxwidth=230, maxwidth=230,
h_align='left', h_align='left',
@ -179,7 +179,7 @@ class AudioSettingsWindow(bui.Window):
position=(width * 0.5, v - 11), position=(width * 0.5, v - 11),
size=(0, 0), size=(0, 0),
text=bui.Lstr( text=bui.Lstr(
resource=self._r + '.headRelativeVRAudioInfoText' resource=f'{self._r}.headRelativeVRAudioInfoText'
), ),
scale=0.5, scale=0.5,
color=(0.7, 0.8, 0.7), color=(0.7, 0.8, 0.7),
@ -200,7 +200,7 @@ class AudioSettingsWindow(bui.Window):
position=((width - 310) / 2, v), position=((width - 310) / 2, v),
size=(310, 50), size=(310, 50),
autoselect=True, autoselect=True,
label=bui.Lstr(resource=self._r + '.soundtrackButtonText'), label=bui.Lstr(resource=f'{self._r}.soundtrackButtonText'),
on_activate_call=self._do_soundtracks, on_activate_call=self._do_soundtracks,
) )
v -= spacing * 0.5 v -= spacing * 0.5
@ -208,7 +208,7 @@ class AudioSettingsWindow(bui.Window):
parent=self._root_widget, parent=self._root_widget,
position=(0, v), position=(0, v),
size=(width, 20), size=(width, 20),
text=bui.Lstr(resource=self._r + '.soundtrackDescriptionText'), text=bui.Lstr(resource=f'{self._r}.soundtrackDescriptionText'),
flatness=1.0, flatness=1.0,
h_align='center', h_align='center',
scale=0.5, scale=0.5,

View File

@ -152,7 +152,7 @@ class ControlsSettingsWindow(bui.Window):
parent=self._root_widget, parent=self._root_widget,
position=(0, height - 49), position=(0, height - 49),
size=(width, 25), size=(width, 25),
text=bui.Lstr(resource=self._r + '.titleText'), text=bui.Lstr(resource=f'{self._r}.titleText'),
color=bui.app.ui_v1.title_color, color=bui.app.ui_v1.title_color,
h_align='center', h_align='center',
v_align='top', v_align='top',
@ -173,7 +173,7 @@ class ControlsSettingsWindow(bui.Window):
position=((width - button_width) / 2, v), position=((width - button_width) / 2, v),
size=(button_width, 43), size=(button_width, 43),
autoselect=True, autoselect=True,
label=bui.Lstr(resource=self._r + '.configureTouchText'), label=bui.Lstr(resource=f'{self._r}.configureTouchText'),
on_activate_call=self._do_touchscreen, on_activate_call=self._do_touchscreen,
) )
if bui.app.ui_v1.use_toolbars: if bui.app.ui_v1.use_toolbars:
@ -197,7 +197,7 @@ class ControlsSettingsWindow(bui.Window):
position=((width - button_width) / 2 - 7, v), position=((width - button_width) / 2 - 7, v),
size=(button_width, 43), size=(button_width, 43),
autoselect=True, autoselect=True,
label=bui.Lstr(resource=self._r + '.configureControllersText'), label=bui.Lstr(resource=f'{self._r}.configureControllersText'),
on_activate_call=self._do_gamepads, on_activate_call=self._do_gamepads,
) )
if bui.app.ui_v1.use_toolbars: if bui.app.ui_v1.use_toolbars:
@ -226,7 +226,7 @@ class ControlsSettingsWindow(bui.Window):
position=((width - button_width) / 2 - 5, v), position=((width - button_width) / 2 - 5, v),
size=(button_width, 43), size=(button_width, 43),
autoselect=True, autoselect=True,
label=bui.Lstr(resource=self._r + '.configureKeyboardText'), label=bui.Lstr(resource=f'{self._r}.configureKeyboardText'),
on_activate_call=self._config_keyboard, on_activate_call=self._config_keyboard,
) )
bui.widget( bui.widget(
@ -252,7 +252,7 @@ class ControlsSettingsWindow(bui.Window):
position=((width - button_width) / 2 - 3, v), position=((width - button_width) / 2 - 3, v),
size=(button_width, 43), size=(button_width, 43),
autoselect=True, autoselect=True,
label=bui.Lstr(resource=self._r + '.configureKeyboard2Text'), label=bui.Lstr(resource=f'{self._r}.configureKeyboard2Text'),
on_activate_call=self._config_keyboard2, on_activate_call=self._config_keyboard2,
) )
v -= spacing v -= spacing
@ -268,7 +268,7 @@ class ControlsSettingsWindow(bui.Window):
position=((width - button_width) / 2 - 5, v), position=((width - button_width) / 2 - 5, v),
size=(button_width, 43), size=(button_width, 43),
autoselect=True, autoselect=True,
label=bui.Lstr(resource=self._r + '.configureMobileText'), label=bui.Lstr(resource=f'{self._r}.configureMobileText'),
on_activate_call=self._do_mobile_devices, on_activate_call=self._do_mobile_devices,
) )
bui.widget( bui.widget(

View File

@ -205,7 +205,7 @@ class GamepadSettingsWindow(bui.Window):
parent=self._root_widget, parent=self._root_widget,
position=(0, v + 5), position=(0, v + 5),
size=(self._width, 25), size=(self._width, 25),
text=bui.Lstr(resource=self._r + '.titleText'), text=bui.Lstr(resource=f'{self._r}.titleText'),
color=bui.app.ui_v1.title_color, color=bui.app.ui_v1.title_color,
maxwidth=310, maxwidth=310,
h_align='center', h_align='center',
@ -229,7 +229,7 @@ class GamepadSettingsWindow(bui.Window):
parent=self._root_widget, parent=self._root_widget,
position=(50, v + 10), position=(50, v + 10),
size=(self._width - 100, 30), size=(self._width - 100, 30),
text=bui.Lstr(resource=self._r + '.appliesToAllText'), text=bui.Lstr(resource=f'{self._r}.appliesToAllText'),
maxwidth=330, maxwidth=330,
scale=0.65, scale=0.65,
color=(0.5, 0.6, 0.5, 1.0), color=(0.5, 0.6, 0.5, 1.0),
@ -244,7 +244,7 @@ class GamepadSettingsWindow(bui.Window):
parent=self._root_widget, parent=self._root_widget,
position=(0, v + 5), position=(0, v + 5),
size=(self._width, 25), size=(self._width, 25),
text=bui.Lstr(resource=self._r + '.secondaryText'), text=bui.Lstr(resource=f'{self._r}.secondaryText'),
color=bui.app.ui_v1.title_color, color=bui.app.ui_v1.title_color,
maxwidth=300, maxwidth=300,
h_align='center', h_align='center',
@ -256,7 +256,7 @@ class GamepadSettingsWindow(bui.Window):
parent=self._root_widget, parent=self._root_widget,
position=(50, v + 10), position=(50, v + 10),
size=(self._width - 100, 30), size=(self._width - 100, 30),
text=bui.Lstr(resource=self._r + '.secondHalfText'), text=bui.Lstr(resource=f'{self._r}.secondHalfText'),
maxwidth=300, maxwidth=300,
scale=0.65, scale=0.65,
color=(0.6, 0.8, 0.6, 1.0), color=(0.6, 0.8, 0.6, 1.0),
@ -269,7 +269,7 @@ class GamepadSettingsWindow(bui.Window):
autoselect=True, autoselect=True,
on_value_change_call=self._enable_check_box_changed, on_value_change_call=self._enable_check_box_changed,
size=(200, 30), size=(200, 30),
text=bui.Lstr(resource=self._r + '.secondaryEnableText'), text=bui.Lstr(resource=f'{self._r}.secondaryEnableText'),
scale=1.2, scale=1.2,
) )
v = self._height - 205 v = self._height - 205
@ -279,8 +279,8 @@ class GamepadSettingsWindow(bui.Window):
d_color = (0.4, 0.4, 0.8) d_color = (0.4, 0.4, 0.8)
sclx = 1.2 sclx = 1.2
scly = 0.98 scly = 0.98
dpm = bui.Lstr(resource=self._r + '.pressAnyButtonOrDpadText') dpm = bui.Lstr(resource=f'{self._r}.pressAnyButtonOrDpadText')
dpm2 = bui.Lstr(resource=self._r + '.ifNothingHappensTryAnalogText') dpm2 = bui.Lstr(resource=f'{self._r}.ifNothingHappensTryAnalogText')
self._capture_button( self._capture_button(
pos=(h_offs, v + scly * dist), pos=(h_offs, v + scly * dist),
color=d_color, color=d_color,
@ -318,7 +318,7 @@ class GamepadSettingsWindow(bui.Window):
message2=dpm2, message2=dpm2,
) )
dpm3 = bui.Lstr(resource=self._r + '.ifNothingHappensTryDpadText') dpm3 = bui.Lstr(resource=f'{self._r}.ifNothingHappensTryDpadText')
self._capture_button( self._capture_button(
pos=(h_offs + 130, v - 125), pos=(h_offs + 130, v - 125),
color=(0.4, 0.4, 0.6), color=(0.4, 0.4, 0.6),
@ -326,7 +326,7 @@ class GamepadSettingsWindow(bui.Window):
maxwidth=140, maxwidth=140,
texture=bui.gettexture('analogStick'), texture=bui.gettexture('analogStick'),
scale=1.2, scale=1.2,
message=bui.Lstr(resource=self._r + '.pressLeftRightText'), message=bui.Lstr(resource=f'{self._r}.pressLeftRightText'),
message2=dpm3, message2=dpm3,
) )
@ -563,13 +563,13 @@ class GamepadSettingsWindow(bui.Window):
+ ' / ' + ' / '
+ self._input.get_axis_name(sval2) + self._input.get_axis_name(sval2)
) )
return bui.Lstr(resource=self._r + '.unsetText') return bui.Lstr(resource=f'{self._r}.unsetText')
# If they're looking for triggers. # If they're looking for triggers.
if control in ['triggerRun1' + self._ext, 'triggerRun2' + self._ext]: if control in ['triggerRun1' + self._ext, 'triggerRun2' + self._ext]:
if control in self._settings: if control in self._settings:
return self._input.get_axis_name(self._settings[control]) return self._input.get_axis_name(self._settings[control])
return bui.Lstr(resource=self._r + '.unsetText') return bui.Lstr(resource=f'{self._r}.unsetText')
# Dead-zone. # Dead-zone.
if control == 'analogStickDeadZone' + self._ext: if control == 'analogStickDeadZone' + self._ext:
@ -590,7 +590,7 @@ class GamepadSettingsWindow(bui.Window):
if any(b in self._settings for b in dpad_buttons): if any(b in self._settings for b in dpad_buttons):
if control in self._settings: if control in self._settings:
return self._input.get_button_name(self._settings[control]) return self._input.get_button_name(self._settings[control])
return bui.Lstr(resource=self._r + '.unsetText') return bui.Lstr(resource=f'{self._r}.unsetText')
# No dpad buttons - show the dpad number for all 4. # No dpad buttons - show the dpad number for all 4.
dpadnum = ( dpadnum = (
@ -603,19 +603,19 @@ class GamepadSettingsWindow(bui.Window):
return bui.Lstr( return bui.Lstr(
value='${A} ${B}', value='${A} ${B}',
subs=[ subs=[
('${A}', bui.Lstr(resource=self._r + '.dpadText')), ('${A}', bui.Lstr(resource=f'{self._r}.dpadText')),
( (
'${B}', '${B}',
str(dpadnum), str(dpadnum),
), ),
], ],
) )
return bui.Lstr(resource=self._r + '.unsetText') return bui.Lstr(resource=f'{self._r}.unsetText')
# Other buttons. # Other buttons.
if control in self._settings: if control in self._settings:
return self._input.get_button_name(self._settings[control]) return self._input.get_button_name(self._settings[control])
return bui.Lstr(resource=self._r + '.unsetText') return bui.Lstr(resource=f'{self._r}.unsetText')
def _gamepad_event( def _gamepad_event(
self, self,
@ -694,7 +694,7 @@ class GamepadSettingsWindow(bui.Window):
self._input, self._input,
'analogStickUD' + ext, 'analogStickUD' + ext,
self._gamepad_event, self._gamepad_event,
bui.Lstr(resource=self._r + '.pressUpDownText'), bui.Lstr(resource=f'{self._r}.pressUpDownText'),
) )
elif control == 'analogStickUD' + ext: elif control == 'analogStickUD' + ext:
@ -745,7 +745,7 @@ class GamepadSettingsWindow(bui.Window):
maxwidth: float = 80.0, maxwidth: float = 80.0,
) -> bui.Widget: ) -> bui.Widget:
if message is None: if message is None:
message = bui.Lstr(resource=self._r + '.pressAnyButtonText') message = bui.Lstr(resource=f'{self._r}.pressAnyButtonText')
base_size = 79 base_size = 79
btn = bui.buttonwidget( btn = bui.buttonwidget(
parent=self._root_widget, parent=self._root_widget,
@ -852,7 +852,7 @@ class GamepadSettingsWindow(bui.Window):
'reset', 'reset',
] ]
choices_display: list[bui.Lstr] = [ choices_display: list[bui.Lstr] = [
bui.Lstr(resource=self._r + '.advancedText'), bui.Lstr(resource=f'{self._r}.advancedText'),
bui.Lstr(resource='settingsWindowAdvanced.resetText'), bui.Lstr(resource='settingsWindowAdvanced.resetText'),
] ]

View File

@ -58,7 +58,7 @@ class GamepadAdvancedSettingsWindow(bui.Window):
self._height - (40 if uiscale is bui.UIScale.SMALL else 34), self._height - (40 if uiscale is bui.UIScale.SMALL else 34),
), ),
size=(0, 0), size=(0, 0),
text=bui.Lstr(resource=self._r + '.advancedTitleText'), text=bui.Lstr(resource=f'{self._r}.advancedTitleText'),
maxwidth=320, maxwidth=320,
color=bui.app.ui_v1.title_color, color=bui.app.ui_v1.title_color,
h_align='center', h_align='center',
@ -126,7 +126,7 @@ class GamepadAdvancedSettingsWindow(bui.Window):
parent=self._subcontainer, parent=self._subcontainer,
position=(h + 70, v), position=(h + 70, v),
size=(500, 30), size=(500, 30),
text=bui.Lstr(resource=self._r + '.unassignedButtonsRunText'), text=bui.Lstr(resource=f'{self._r}.unassignedButtonsRunText'),
textcolor=(0.8, 0.8, 0.8), textcolor=(0.8, 0.8, 0.8),
maxwidth=330, maxwidth=330,
scale=1.0, scale=1.0,
@ -140,7 +140,7 @@ class GamepadAdvancedSettingsWindow(bui.Window):
v -= 60 v -= 60
capb = self._capture_button( capb = self._capture_button(
pos=(h2, v), pos=(h2, v),
name=bui.Lstr(resource=self._r + '.runButton1Text'), name=bui.Lstr(resource=f'{self._r}.runButton1Text'),
control='buttonRun1' + self._parent_window.get_ext(), control='buttonRun1' + self._parent_window.get_ext(),
) )
if self._parent_window.get_is_secondary(): if self._parent_window.get_is_secondary():
@ -149,14 +149,14 @@ class GamepadAdvancedSettingsWindow(bui.Window):
v -= 42 v -= 42
self._capture_button( self._capture_button(
pos=(h2, v), pos=(h2, v),
name=bui.Lstr(resource=self._r + '.runButton2Text'), name=bui.Lstr(resource=f'{self._r}.runButton2Text'),
control='buttonRun2' + self._parent_window.get_ext(), control='buttonRun2' + self._parent_window.get_ext(),
) )
bui.textwidget( bui.textwidget(
parent=self._subcontainer, parent=self._subcontainer,
position=(self._sub_width * 0.5, v - 24), position=(self._sub_width * 0.5, v - 24),
size=(0, 0), size=(0, 0),
text=bui.Lstr(resource=self._r + '.runTriggerDescriptionText'), text=bui.Lstr(resource=f'{self._r}.runTriggerDescriptionText'),
color=(0.7, 1, 0.7, 0.6), color=(0.7, 1, 0.7, 0.6),
maxwidth=self._sub_width * 0.8, maxwidth=self._sub_width * 0.8,
scale=0.7, scale=0.7,
@ -168,16 +168,16 @@ class GamepadAdvancedSettingsWindow(bui.Window):
self._capture_button( self._capture_button(
pos=(h2, v), pos=(h2, v),
name=bui.Lstr(resource=self._r + '.runTrigger1Text'), name=bui.Lstr(resource=f'{self._r}.runTrigger1Text'),
control='triggerRun1' + self._parent_window.get_ext(), control='triggerRun1' + self._parent_window.get_ext(),
message=bui.Lstr(resource=self._r + '.pressAnyAnalogTriggerText'), message=bui.Lstr(resource=f'{self._r}.pressAnyAnalogTriggerText'),
) )
v -= 42 v -= 42
self._capture_button( self._capture_button(
pos=(h2, v), pos=(h2, v),
name=bui.Lstr(resource=self._r + '.runTrigger2Text'), name=bui.Lstr(resource=f'{self._r}.runTrigger2Text'),
control='triggerRun2' + self._parent_window.get_ext(), control='triggerRun2' + self._parent_window.get_ext(),
message=bui.Lstr(resource=self._r + '.pressAnyAnalogTriggerText'), message=bui.Lstr(resource=f'{self._r}.pressAnyAnalogTriggerText'),
) )
# in vr mode, allow assigning a reset-view button # in vr mode, allow assigning a reset-view button
@ -185,45 +185,45 @@ class GamepadAdvancedSettingsWindow(bui.Window):
v -= 50 v -= 50
self._capture_button( self._capture_button(
pos=(h2, v), pos=(h2, v),
name=bui.Lstr(resource=self._r + '.vrReorientButtonText'), name=bui.Lstr(resource=f'{self._r}.vrReorientButtonText'),
control='buttonVRReorient' + self._parent_window.get_ext(), control='buttonVRReorient' + self._parent_window.get_ext(),
) )
v -= 60 v -= 60
self._capture_button( self._capture_button(
pos=(h2, v), pos=(h2, v),
name=bui.Lstr(resource=self._r + '.extraStartButtonText'), name=bui.Lstr(resource=f'{self._r}.extraStartButtonText'),
control='buttonStart2' + self._parent_window.get_ext(), control='buttonStart2' + self._parent_window.get_ext(),
) )
v -= 60 v -= 60
self._capture_button( self._capture_button(
pos=(h2, v), pos=(h2, v),
name=bui.Lstr(resource=self._r + '.ignoredButton1Text'), name=bui.Lstr(resource=f'{self._r}.ignoredButton1Text'),
control='buttonIgnored' + self._parent_window.get_ext(), control='buttonIgnored' + self._parent_window.get_ext(),
) )
v -= 42 v -= 42
self._capture_button( self._capture_button(
pos=(h2, v), pos=(h2, v),
name=bui.Lstr(resource=self._r + '.ignoredButton2Text'), name=bui.Lstr(resource=f'{self._r}.ignoredButton2Text'),
control='buttonIgnored2' + self._parent_window.get_ext(), control='buttonIgnored2' + self._parent_window.get_ext(),
) )
v -= 42 v -= 42
self._capture_button( self._capture_button(
pos=(h2, v), pos=(h2, v),
name=bui.Lstr(resource=self._r + '.ignoredButton3Text'), name=bui.Lstr(resource=f'{self._r}.ignoredButton3Text'),
control='buttonIgnored3' + self._parent_window.get_ext(), control='buttonIgnored3' + self._parent_window.get_ext(),
) )
v -= 42 v -= 42
self._capture_button( self._capture_button(
pos=(h2, v), pos=(h2, v),
name=bui.Lstr(resource=self._r + '.ignoredButton4Text'), name=bui.Lstr(resource=f'{self._r}.ignoredButton4Text'),
control='buttonIgnored4' + self._parent_window.get_ext(), control='buttonIgnored4' + self._parent_window.get_ext(),
) )
bui.textwidget( bui.textwidget(
parent=self._subcontainer, parent=self._subcontainer,
position=(self._sub_width * 0.5, v - 14), position=(self._sub_width * 0.5, v - 14),
size=(0, 0), size=(0, 0),
text=bui.Lstr(resource=self._r + '.ignoredButtonDescriptionText'), text=bui.Lstr(resource=f'{self._r}.ignoredButtonDescriptionText'),
color=(0.7, 1, 0.7, 0.6), color=(0.7, 1, 0.7, 0.6),
scale=0.8, scale=0.8,
maxwidth=self._sub_width * 0.8, maxwidth=self._sub_width * 0.8,
@ -239,7 +239,7 @@ class GamepadAdvancedSettingsWindow(bui.Window):
position=(h + 50, v), position=(h + 50, v),
size=(400, 30), size=(400, 30),
text=bui.Lstr( text=bui.Lstr(
resource=self._r + '.startButtonActivatesDefaultText' resource=f'{self._r}.startButtonActivatesDefaultText'
), ),
textcolor=(0.8, 0.8, 0.8), textcolor=(0.8, 0.8, 0.8),
maxwidth=450, maxwidth=450,
@ -254,7 +254,7 @@ class GamepadAdvancedSettingsWindow(bui.Window):
position=(self._sub_width * 0.5, v - 12), position=(self._sub_width * 0.5, v - 12),
size=(0, 0), size=(0, 0),
text=bui.Lstr( text=bui.Lstr(
resource=self._r + '.startButtonActivatesDefaultDescriptionText' resource=f'{self._r}.startButtonActivatesDefaultDescriptionText'
), ),
color=(0.7, 1, 0.7, 0.6), color=(0.7, 1, 0.7, 0.6),
maxwidth=self._sub_width * 0.8, maxwidth=self._sub_width * 0.8,
@ -269,7 +269,7 @@ class GamepadAdvancedSettingsWindow(bui.Window):
autoselect=True, autoselect=True,
position=(h + 50, v), position=(h + 50, v),
size=(400, 30), size=(400, 30),
text=bui.Lstr(resource=self._r + '.uiOnlyText'), text=bui.Lstr(resource=f'{self._r}.uiOnlyText'),
textcolor=(0.8, 0.8, 0.8), textcolor=(0.8, 0.8, 0.8),
maxwidth=450, maxwidth=450,
scale=0.9, scale=0.9,
@ -280,7 +280,7 @@ class GamepadAdvancedSettingsWindow(bui.Window):
parent=self._subcontainer, parent=self._subcontainer,
position=(self._sub_width * 0.5, v - 12), position=(self._sub_width * 0.5, v - 12),
size=(0, 0), size=(0, 0),
text=bui.Lstr(resource=self._r + '.uiOnlyDescriptionText'), text=bui.Lstr(resource=f'{self._r}.uiOnlyDescriptionText'),
color=(0.7, 1, 0.7, 0.6), color=(0.7, 1, 0.7, 0.6),
maxwidth=self._sub_width * 0.8, maxwidth=self._sub_width * 0.8,
scale=0.7, scale=0.7,
@ -294,7 +294,7 @@ class GamepadAdvancedSettingsWindow(bui.Window):
autoselect=True, autoselect=True,
position=(h + 50, v), position=(h + 50, v),
size=(400, 30), size=(400, 30),
text=bui.Lstr(resource=self._r + '.ignoreCompletelyText'), text=bui.Lstr(resource=f'{self._r}.ignoreCompletelyText'),
textcolor=(0.8, 0.8, 0.8), textcolor=(0.8, 0.8, 0.8),
maxwidth=450, maxwidth=450,
scale=0.9, scale=0.9,
@ -306,7 +306,7 @@ class GamepadAdvancedSettingsWindow(bui.Window):
position=(self._sub_width * 0.5, v - 12), position=(self._sub_width * 0.5, v - 12),
size=(0, 0), size=(0, 0),
text=bui.Lstr( text=bui.Lstr(
resource=self._r + '.ignoreCompletelyDescriptionText' resource=f'{self._r}.ignoreCompletelyDescriptionText'
), ),
color=(0.7, 1, 0.7, 0.6), color=(0.7, 1, 0.7, 0.6),
maxwidth=self._sub_width * 0.8, maxwidth=self._sub_width * 0.8,
@ -322,7 +322,7 @@ class GamepadAdvancedSettingsWindow(bui.Window):
autoselect=True, autoselect=True,
position=(h + 50, v), position=(h + 50, v),
size=(400, 30), size=(400, 30),
text=bui.Lstr(resource=self._r + '.autoRecalibrateText'), text=bui.Lstr(resource=f'{self._r}.autoRecalibrateText'),
textcolor=(0.8, 0.8, 0.8), textcolor=(0.8, 0.8, 0.8),
maxwidth=450, maxwidth=450,
scale=0.9, scale=0.9,
@ -333,7 +333,7 @@ class GamepadAdvancedSettingsWindow(bui.Window):
parent=self._subcontainer, parent=self._subcontainer,
position=(self._sub_width * 0.5, v - 12), position=(self._sub_width * 0.5, v - 12),
size=(0, 0), size=(0, 0),
text=bui.Lstr(resource=self._r + '.autoRecalibrateDescriptionText'), text=bui.Lstr(resource=f'{self._r}.autoRecalibrateDescriptionText'),
color=(0.7, 1, 0.7, 0.6), color=(0.7, 1, 0.7, 0.6),
maxwidth=self._sub_width * 0.8, maxwidth=self._sub_width * 0.8,
scale=0.7, scale=0.7,
@ -343,7 +343,7 @@ class GamepadAdvancedSettingsWindow(bui.Window):
v -= 80 v -= 80
buttons = self._config_value_editor( buttons = self._config_value_editor(
bui.Lstr(resource=self._r + '.analogStickDeadZoneText'), bui.Lstr(resource=f'{self._r}.analogStickDeadZoneText'),
control=('analogStickDeadZone' + self._parent_window.get_ext()), control=('analogStickDeadZone' + self._parent_window.get_ext()),
position=(h + 40, v), position=(h + 40, v),
min_val=0, min_val=0,
@ -359,7 +359,7 @@ class GamepadAdvancedSettingsWindow(bui.Window):
position=(self._sub_width * 0.5, v - 12), position=(self._sub_width * 0.5, v - 12),
size=(0, 0), size=(0, 0),
text=bui.Lstr( text=bui.Lstr(
resource=self._r + '.analogStickDeadZoneDescriptionText' resource=f'{self._r}.analogStickDeadZoneDescriptionText'
), ),
color=(0.7, 1, 0.7, 0.6), color=(0.7, 1, 0.7, 0.6),
maxwidth=self._sub_width * 0.8, maxwidth=self._sub_width * 0.8,
@ -375,7 +375,7 @@ class GamepadAdvancedSettingsWindow(bui.Window):
bui.buttonwidget( bui.buttonwidget(
parent=self._subcontainer, parent=self._subcontainer,
autoselect=True, autoselect=True,
label=bui.Lstr(resource=self._r + '.twoInOneSetupText'), label=bui.Lstr(resource=f'{self._r}.twoInOneSetupText'),
position=(40, v), position=(40, v),
size=(self._sub_width - 80, 50), size=(self._sub_width - 80, 50),
on_activate_call=self._parent_window.show_secondary_editor, on_activate_call=self._parent_window.show_secondary_editor,
@ -414,7 +414,7 @@ class GamepadAdvancedSettingsWindow(bui.Window):
left_widget=btn, left_widget=btn,
color=(0.45, 0.4, 0.5), color=(0.45, 0.4, 0.5),
textcolor=(0.65, 0.6, 0.7), textcolor=(0.65, 0.6, 0.7),
label=bui.Lstr(resource=self._r + '.clearText'), label=bui.Lstr(resource=f'{self._r}.clearText'),
size=(110, 50), size=(110, 50),
scale=0.7, scale=0.7,
on_activate_call=bui.Call(self._clear_control, control), on_activate_call=bui.Call(self._clear_control, control),

View File

@ -147,7 +147,7 @@ class GamepadSelectWindow(bui.Window):
parent=self._root_widget, parent=self._root_widget,
position=(20, height - 50), position=(20, height - 50),
size=(width, 25), size=(width, 25),
text=bui.Lstr(resource=self._r + '.titleText'), text=bui.Lstr(resource=f'{self._r}.titleText'),
maxwidth=250, maxwidth=250,
color=bui.app.ui_v1.title_color, color=bui.app.ui_v1.title_color,
h_align='center', h_align='center',
@ -168,7 +168,7 @@ class GamepadSelectWindow(bui.Window):
position=(15, v), position=(15, v),
size=(width - 30, 30), size=(width - 30, 30),
scale=0.8, scale=0.8,
text=bui.Lstr(resource=self._r + '.pressAnyButtonText'), text=bui.Lstr(resource=f'{self._r}.pressAnyButtonText'),
maxwidth=width * 0.95, maxwidth=width * 0.95,
color=bui.app.ui_v1.infotextcolor, color=bui.app.ui_v1.infotextcolor,
h_align='center', h_align='center',
@ -181,7 +181,7 @@ class GamepadSelectWindow(bui.Window):
position=(15, v), position=(15, v),
size=(width - 30, 30), size=(width - 30, 30),
scale=0.46, scale=0.46,
text=bui.Lstr(resource=self._r + '.androidNoteText'), text=bui.Lstr(resource=f'{self._r}.androidNoteText'),
maxwidth=width * 0.95, maxwidth=width * 0.95,
color=(0.7, 0.9, 0.7, 0.5), color=(0.7, 0.9, 0.7, 0.5),
h_align='center', h_align='center',

View File

@ -111,7 +111,7 @@ class GraphicsSettingsWindow(bui.Window):
parent=self._root_widget, parent=self._root_widget,
position=(0, height - 44), position=(0, height - 44),
size=(width, 25), size=(width, 25),
text=bui.Lstr(resource=self._r + '.titleText'), text=bui.Lstr(resource=f'{self._r}.titleText'),
color=bui.app.ui_v1.title_color, color=bui.app.ui_v1.title_color,
h_align='center', h_align='center',
v_align='top', v_align='top',
@ -159,7 +159,7 @@ class GraphicsSettingsWindow(bui.Window):
parent=self._root_widget, parent=self._root_widget,
position=(60, v), position=(60, v),
size=(160, 25), size=(160, 25),
text=bui.Lstr(resource=self._r + '.visualsText'), text=bui.Lstr(resource=f'{self._r}.visualsText'),
color=bui.app.ui_v1.heading_color, color=bui.app.ui_v1.heading_color,
scale=0.65, scale=0.65,
maxwidth=150, maxwidth=150,
@ -179,10 +179,10 @@ class GraphicsSettingsWindow(bui.Window):
), ),
choices_display=[ choices_display=[
bui.Lstr(resource='autoText'), bui.Lstr(resource='autoText'),
bui.Lstr(resource=self._r + '.higherText'), bui.Lstr(resource=f'{self._r}.higherText'),
bui.Lstr(resource=self._r + '.highText'), bui.Lstr(resource=f'{self._r}.highText'),
bui.Lstr(resource=self._r + '.mediumText'), bui.Lstr(resource=f'{self._r}.mediumText'),
bui.Lstr(resource=self._r + '.lowText'), bui.Lstr(resource=f'{self._r}.lowText'),
], ],
current_choice=bui.app.config.resolve('Graphics Quality'), current_choice=bui.app.config.resolve('Graphics Quality'),
on_value_change_call=self._set_quality, on_value_change_call=self._set_quality,
@ -193,7 +193,7 @@ class GraphicsSettingsWindow(bui.Window):
parent=self._root_widget, parent=self._root_widget,
position=(230, v), position=(230, v),
size=(160, 25), size=(160, 25),
text=bui.Lstr(resource=self._r + '.texturesText'), text=bui.Lstr(resource=f'{self._r}.texturesText'),
color=bui.app.ui_v1.heading_color, color=bui.app.ui_v1.heading_color,
scale=0.65, scale=0.65,
maxwidth=150, maxwidth=150,
@ -208,9 +208,9 @@ class GraphicsSettingsWindow(bui.Window):
choices=['Auto', 'High', 'Medium', 'Low'], choices=['Auto', 'High', 'Medium', 'Low'],
choices_display=[ choices_display=[
bui.Lstr(resource='autoText'), bui.Lstr(resource='autoText'),
bui.Lstr(resource=self._r + '.highText'), bui.Lstr(resource=f'{self._r}.highText'),
bui.Lstr(resource=self._r + '.mediumText'), bui.Lstr(resource=f'{self._r}.mediumText'),
bui.Lstr(resource=self._r + '.lowText'), bui.Lstr(resource=f'{self._r}.lowText'),
], ],
current_choice=bui.app.config.resolve('Texture Quality'), current_choice=bui.app.config.resolve('Texture Quality'),
on_value_change_call=self._set_textures, on_value_change_call=self._set_textures,
@ -231,7 +231,7 @@ class GraphicsSettingsWindow(bui.Window):
parent=self._root_widget, parent=self._root_widget,
position=(h_offs + 60, v), position=(h_offs + 60, v),
size=(160, 25), size=(160, 25),
text=bui.Lstr(resource=self._r + '.resolutionText'), text=bui.Lstr(resource=f'{self._r}.resolutionText'),
color=bui.app.ui_v1.heading_color, color=bui.app.ui_v1.heading_color,
scale=0.65, scale=0.65,
maxwidth=150, maxwidth=150,
@ -319,7 +319,7 @@ class GraphicsSettingsWindow(bui.Window):
parent=self._root_widget, parent=self._root_widget,
position=(230, v), position=(230, v),
size=(160, 25), size=(160, 25),
text=bui.Lstr(resource=self._r + '.verticalSyncText'), text=bui.Lstr(resource=f'{self._r}.verticalSyncText'),
color=bui.app.ui_v1.heading_color, color=bui.app.ui_v1.heading_color,
scale=0.65, scale=0.65,
maxwidth=150, maxwidth=150,
@ -334,8 +334,8 @@ class GraphicsSettingsWindow(bui.Window):
choices=['Auto', 'Always', 'Never'], choices=['Auto', 'Always', 'Never'],
choices_display=[ choices_display=[
bui.Lstr(resource='autoText'), bui.Lstr(resource='autoText'),
bui.Lstr(resource=self._r + '.alwaysText'), bui.Lstr(resource=f'{self._r}.alwaysText'),
bui.Lstr(resource=self._r + '.neverText'), bui.Lstr(resource=f'{self._r}.neverText'),
], ],
current_choice=bui.app.config.resolve('Vertical Sync'), current_choice=bui.app.config.resolve('Vertical Sync'),
on_value_change_call=self._set_vsync, on_value_change_call=self._set_vsync,
@ -360,7 +360,7 @@ class GraphicsSettingsWindow(bui.Window):
parent=self._root_widget, parent=self._root_widget,
position=(155, v + 10), position=(155, v + 10),
size=(0, 0), size=(0, 0),
text=bui.Lstr(resource=self._r + '.maxFPSText'), text=bui.Lstr(resource=f'{self._r}.maxFPSText'),
color=bui.app.ui_v1.heading_color, color=bui.app.ui_v1.heading_color,
scale=0.9, scale=0.9,
maxwidth=90, maxwidth=90,
@ -399,7 +399,7 @@ class GraphicsSettingsWindow(bui.Window):
size=(210, 30), size=(210, 30),
scale=0.86, scale=0.86,
configkey='Show FPS', configkey='Show FPS',
displayname=bui.Lstr(resource=self._r + '.showFPSText'), displayname=bui.Lstr(resource=f'{self._r}.showFPSText'),
maxwidth=130, maxwidth=130,
) )
if self._max_fps_text is not None: if self._max_fps_text is not None:
@ -419,7 +419,7 @@ class GraphicsSettingsWindow(bui.Window):
size=(210, 30), size=(210, 30),
scale=0.86, scale=0.86,
configkey='TV Border', configkey='TV Border',
displayname=bui.Lstr(resource=self._r + '.tvBorderText'), displayname=bui.Lstr(resource=f'{self._r}.tvBorderText'),
maxwidth=130, maxwidth=130,
) )
bui.widget(edit=fpsc.widget, right_widget=tvc.widget) bui.widget(edit=fpsc.widget, right_widget=tvc.widget)

View File

@ -111,7 +111,7 @@ class ConfigKeyboardWindow(bui.Window):
position=(self._width * 0.5, v + 15), position=(self._width * 0.5, v + 15),
size=(0, 0), size=(0, 0),
text=bui.Lstr( text=bui.Lstr(
resource=self._r + '.configuringText', resource=f'{self._r}.configuringText',
subs=[('${DEVICE}', self._displayname)], subs=[('${DEVICE}', self._displayname)],
), ),
color=bui.app.ui_v1.title_color, color=bui.app.ui_v1.title_color,
@ -129,7 +129,7 @@ class ConfigKeyboardWindow(bui.Window):
parent=self._root_widget, parent=self._root_widget,
position=(0, v + 19), position=(0, v + 19),
size=(self._width, 50), size=(self._width, 50),
text=bui.Lstr(resource=self._r + '.keyboard2NoteText'), text=bui.Lstr(resource=f'{self._r}.keyboard2NoteText'),
scale=0.7, scale=0.7,
maxwidth=self._width * 0.75, maxwidth=self._width * 0.75,
max_height=110, max_height=110,

View File

@ -48,7 +48,7 @@ class RemoteAppSettingsWindow(bui.Window):
parent=self._root_widget, parent=self._root_widget,
position=(width * 0.5, height - 42), position=(width * 0.5, height - 42),
size=(0, 0), size=(0, 0),
text=bui.Lstr(resource=self._r + '.titleText'), text=bui.Lstr(resource=f'{self._r}.titleText'),
maxwidth=370, maxwidth=370,
color=bui.app.ui_v1.title_color, color=bui.app.ui_v1.title_color,
scale=0.8, scale=0.8,
@ -73,7 +73,7 @@ class RemoteAppSettingsWindow(bui.Window):
color=(0.7, 0.9, 0.7, 1.0), color=(0.7, 0.9, 0.7, 1.0),
scale=0.8, scale=0.8,
text=bui.Lstr( text=bui.Lstr(
resource=self._r + '.explanationText', resource=f'{self._r}.explanationText',
subs=[ subs=[
('${APP_NAME}', bui.Lstr(resource='titleText')), ('${APP_NAME}', bui.Lstr(resource='titleText')),
('${REMOTE_APP_NAME}', bui.get_remote_app_name()), ('${REMOTE_APP_NAME}', bui.get_remote_app_name()),
@ -106,7 +106,7 @@ class RemoteAppSettingsWindow(bui.Window):
size=(0, 0), size=(0, 0),
color=(0.7, 0.9, 0.7, 0.8), color=(0.7, 0.9, 0.7, 0.8),
scale=0.65, scale=0.65,
text=bui.Lstr(resource=self._r + '.bestResultsText'), text=bui.Lstr(resource=f'{self._r}.bestResultsText'),
maxwidth=width * 0.95, maxwidth=width * 0.95,
max_height=height * 0.19, max_height=height * 0.19,
h_align='center', h_align='center',

View File

@ -55,7 +55,7 @@ class TouchscreenSettingsWindow(bui.Window):
parent=self._root_widget, parent=self._root_widget,
position=(25, self._height - 50), position=(25, self._height - 50),
size=(self._width, 25), size=(self._width, 25),
text=bui.Lstr(resource=self._r + '.titleText'), text=bui.Lstr(resource=f'{self._r}.titleText'),
color=bui.app.ui_v1.title_color, color=bui.app.ui_v1.title_color,
maxwidth=280, maxwidth=280,
h_align='center', h_align='center',
@ -111,7 +111,7 @@ class TouchscreenSettingsWindow(bui.Window):
parent=self._subcontainer, parent=self._subcontainer,
position=(-10, v + 43), position=(-10, v + 43),
size=(self._sub_width, 25), size=(self._sub_width, 25),
text=bui.Lstr(resource=self._r + '.swipeInfoText'), text=bui.Lstr(resource=f'{self._r}.swipeInfoText'),
flatness=1.0, flatness=1.0,
color=(0, 0.9, 0.1, 0.7), color=(0, 0.9, 0.1, 0.7),
maxwidth=self._sub_width * 0.9, maxwidth=self._sub_width * 0.9,
@ -124,7 +124,7 @@ class TouchscreenSettingsWindow(bui.Window):
parent=self._subcontainer, parent=self._subcontainer,
position=(h, v - 2), position=(h, v - 2),
size=(0, 30), size=(0, 30),
text=bui.Lstr(resource=self._r + '.movementText'), text=bui.Lstr(resource=f'{self._r}.movementText'),
maxwidth=190, maxwidth=190,
color=clr, color=clr,
v_align='center', v_align='center',
@ -133,7 +133,7 @@ class TouchscreenSettingsWindow(bui.Window):
parent=self._subcontainer, parent=self._subcontainer,
position=(h + 220, v), position=(h + 220, v),
size=(170, 30), size=(170, 30),
text=bui.Lstr(resource=self._r + '.joystickText'), text=bui.Lstr(resource=f'{self._r}.joystickText'),
maxwidth=100, maxwidth=100,
textcolor=clr2, textcolor=clr2,
scale=0.9, scale=0.9,
@ -142,7 +142,7 @@ class TouchscreenSettingsWindow(bui.Window):
parent=self._subcontainer, parent=self._subcontainer,
position=(h + 357, v), position=(h + 357, v),
size=(170, 30), size=(170, 30),
text=bui.Lstr(resource=self._r + '.swipeText'), text=bui.Lstr(resource=f'{self._r}.swipeText'),
maxwidth=100, maxwidth=100,
textcolor=clr2, textcolor=clr2,
value=False, value=False,
@ -158,7 +158,7 @@ class TouchscreenSettingsWindow(bui.Window):
xoffset=65, xoffset=65,
configkey='Touch Controls Scale Movement', configkey='Touch Controls Scale Movement',
displayname=bui.Lstr( displayname=bui.Lstr(
resource=self._r + '.movementControlScaleText' resource=f'{self._r}.movementControlScaleText'
), ),
changesound=False, changesound=False,
minval=0.1, minval=0.1,
@ -171,7 +171,7 @@ class TouchscreenSettingsWindow(bui.Window):
parent=self._subcontainer, parent=self._subcontainer,
position=(h, v - 2), position=(h, v - 2),
size=(0, 30), size=(0, 30),
text=bui.Lstr(resource=self._r + '.actionsText'), text=bui.Lstr(resource=f'{self._r}.actionsText'),
maxwidth=190, maxwidth=190,
color=clr, color=clr,
v_align='center', v_align='center',
@ -180,7 +180,7 @@ class TouchscreenSettingsWindow(bui.Window):
parent=self._subcontainer, parent=self._subcontainer,
position=(h + 220, v), position=(h + 220, v),
size=(170, 30), size=(170, 30),
text=bui.Lstr(resource=self._r + '.buttonsText'), text=bui.Lstr(resource=f'{self._r}.buttonsText'),
maxwidth=100, maxwidth=100,
textcolor=clr2, textcolor=clr2,
scale=0.9, scale=0.9,
@ -189,7 +189,7 @@ class TouchscreenSettingsWindow(bui.Window):
parent=self._subcontainer, parent=self._subcontainer,
position=(h + 357, v), position=(h + 357, v),
size=(170, 30), size=(170, 30),
text=bui.Lstr(resource=self._r + '.swipeText'), text=bui.Lstr(resource=f'{self._r}.swipeText'),
maxwidth=100, maxwidth=100,
textcolor=clr2, textcolor=clr2,
scale=0.9, scale=0.9,
@ -203,7 +203,7 @@ class TouchscreenSettingsWindow(bui.Window):
position=(h, v), position=(h, v),
xoffset=65, xoffset=65,
configkey='Touch Controls Scale Actions', configkey='Touch Controls Scale Actions',
displayname=bui.Lstr(resource=self._r + '.actionControlScaleText'), displayname=bui.Lstr(resource=f'{self._r}.actionControlScaleText'),
changesound=False, changesound=False,
minval=0.1, minval=0.1,
maxval=4.0, maxval=4.0,
@ -217,7 +217,7 @@ class TouchscreenSettingsWindow(bui.Window):
size=(400, 30), size=(400, 30),
maxwidth=400, maxwidth=400,
configkey='Touch Controls Swipe Hidden', configkey='Touch Controls Swipe Hidden',
displayname=bui.Lstr(resource=self._r + '.swipeControlsHiddenText'), displayname=bui.Lstr(resource=f'{self._r}.swipeControlsHiddenText'),
) )
v -= 65 v -= 65
@ -225,7 +225,7 @@ class TouchscreenSettingsWindow(bui.Window):
parent=self._subcontainer, parent=self._subcontainer,
position=(self._sub_width * 0.5 - 70, v), position=(self._sub_width * 0.5 - 70, v),
size=(170, 60), size=(170, 60),
label=bui.Lstr(resource=self._r + '.resetText'), label=bui.Lstr(resource=f'{self._r}.resetText'),
scale=0.75, scale=0.75,
on_activate_call=self._reset, on_activate_call=self._reset,
) )
@ -235,7 +235,7 @@ class TouchscreenSettingsWindow(bui.Window):
position=(self._width * 0.5, 38), position=(self._width * 0.5, 38),
size=(0, 0), size=(0, 0),
h_align='center', h_align='center',
text=bui.Lstr(resource=self._r + '.dragControlsText'), text=bui.Lstr(resource=f'{self._r}.dragControlsText'),
maxwidth=self._width * 0.8, maxwidth=self._width * 0.8,
scale=0.65, scale=0.65,
color=(1, 1, 1, 0.4), color=(1, 1, 1, 0.4),

View File

@ -90,7 +90,7 @@ class SoundtrackBrowserWindow(bui.Window):
position=(self._width * 0.5, self._height - 35), position=(self._width * 0.5, self._height - 35),
size=(0, 0), size=(0, 0),
maxwidth=300, maxwidth=300,
text=bui.Lstr(resource=self._r + '.titleText'), text=bui.Lstr(resource=f'{self._r}.titleText'),
color=bui.app.ui_v1.title_color, color=bui.app.ui_v1.title_color,
h_align='center', h_align='center',
v_align='center', v_align='center',
@ -119,7 +119,7 @@ class SoundtrackBrowserWindow(bui.Window):
autoselect=True, autoselect=True,
textcolor=b_textcolor, textcolor=b_textcolor,
text_scale=0.7, text_scale=0.7,
label=bui.Lstr(resource=self._r + '.newText'), label=bui.Lstr(resource=f'{self._r}.newText'),
) )
self._lock_images.append( self._lock_images.append(
bui.imagewidget( bui.imagewidget(
@ -148,7 +148,7 @@ class SoundtrackBrowserWindow(bui.Window):
autoselect=True, autoselect=True,
textcolor=b_textcolor, textcolor=b_textcolor,
text_scale=0.7, text_scale=0.7,
label=bui.Lstr(resource=self._r + '.editText'), label=bui.Lstr(resource=f'{self._r}.editText'),
) )
self._lock_images.append( self._lock_images.append(
bui.imagewidget( bui.imagewidget(
@ -176,7 +176,7 @@ class SoundtrackBrowserWindow(bui.Window):
color=b_color, color=b_color,
textcolor=b_textcolor, textcolor=b_textcolor,
text_scale=0.7, text_scale=0.7,
label=bui.Lstr(resource=self._r + '.duplicateText'), label=bui.Lstr(resource=f'{self._r}.duplicateText'),
) )
self._lock_images.append( self._lock_images.append(
bui.imagewidget( bui.imagewidget(
@ -204,7 +204,7 @@ class SoundtrackBrowserWindow(bui.Window):
autoselect=True, autoselect=True,
textcolor=b_textcolor, textcolor=b_textcolor,
text_scale=0.7, text_scale=0.7,
label=bui.Lstr(resource=self._r + '.deleteText'), label=bui.Lstr(resource=f'{self._r}.deleteText'),
) )
self._lock_images.append( self._lock_images.append(
bui.imagewidget( bui.imagewidget(
@ -303,13 +303,13 @@ class SoundtrackBrowserWindow(bui.Window):
if self._selected_soundtrack == '__default__': if self._selected_soundtrack == '__default__':
bui.getsound('error').play() bui.getsound('error').play()
bui.screenmessage( bui.screenmessage(
bui.Lstr(resource=self._r + '.cantDeleteDefaultText'), bui.Lstr(resource=f'{self._r}.cantDeleteDefaultText'),
color=(1, 0, 0), color=(1, 0, 0),
) )
else: else:
ConfirmWindow( ConfirmWindow(
bui.Lstr( bui.Lstr(
resource=self._r + '.deleteConfirmText', resource=f'{self._r}.deleteConfirmText',
subs=[('${NAME}', self._selected_soundtrack)], subs=[('${NAME}', self._selected_soundtrack)],
), ),
self._do_delete_soundtrack, self._do_delete_soundtrack,
@ -438,7 +438,7 @@ class SoundtrackBrowserWindow(bui.Window):
if self._selected_soundtrack == '__default__': if self._selected_soundtrack == '__default__':
bui.getsound('error').play() bui.getsound('error').play()
bui.screenmessage( bui.screenmessage(
bui.Lstr(resource=self._r + '.cantEditDefaultText'), bui.Lstr(resource=f'{self._r}.cantEditDefaultText'),
color=(1, 0, 0), color=(1, 0, 0),
) )
return return
@ -455,7 +455,7 @@ class SoundtrackBrowserWindow(bui.Window):
def _get_soundtrack_display_name(self, soundtrack: str) -> bui.Lstr: def _get_soundtrack_display_name(self, soundtrack: str) -> bui.Lstr:
if soundtrack == '__default__': if soundtrack == '__default__':
return bui.Lstr(resource=self._r + '.defaultSoundtrackNameText') return bui.Lstr(resource=f'{self._r}.defaultSoundtrackNameText')
return bui.Lstr(value=soundtrack) return bui.Lstr(value=soundtrack)
def _refresh(self, select_soundtrack: str | None = None) -> None: def _refresh(self, select_soundtrack: str | None = None) -> None:

View File

@ -121,7 +121,7 @@ class SoundtrackEditWindow(bui.Window):
bui.textwidget( bui.textwidget(
parent=self._root_widget, parent=self._root_widget,
text=bui.Lstr(resource=self._r + '.nameText'), text=bui.Lstr(resource=f'{self._r}.nameText'),
maxwidth=80, maxwidth=80,
scale=0.8, scale=0.8,
position=(105 + x_inset, v + 19), position=(105 + x_inset, v + 19),
@ -135,7 +135,7 @@ class SoundtrackEditWindow(bui.Window):
if existing_soundtrack is None: if existing_soundtrack is None:
i = 1 i = 1
st_name_text = bui.Lstr( st_name_text = bui.Lstr(
resource=self._r + '.newSoundtrackNameText' resource=f'{self._r}.newSoundtrackNameText'
).evaluate() ).evaluate()
if '${COUNT}' not in st_name_text: if '${COUNT}' not in st_name_text:
# make sure we insert number *somewhere* # make sure we insert number *somewhere*
@ -155,7 +155,7 @@ class SoundtrackEditWindow(bui.Window):
v_align='center', v_align='center',
max_chars=32, max_chars=32,
autoselect=True, autoselect=True,
description=bui.Lstr(resource=self._r + '.nameText'), description=bui.Lstr(resource=f'{self._r}.nameText'),
editable=True, editable=True,
padding=4, padding=4,
on_return_press_call=self._do_it_with_sound, on_return_press_call=self._do_it_with_sound,
@ -305,7 +305,7 @@ class SoundtrackEditWindow(bui.Window):
btn = bui.buttonwidget( btn = bui.buttonwidget(
parent=row, parent=row,
size=(50, 32), size=(50, 32),
label=bui.Lstr(resource=self._r + '.testText'), label=bui.Lstr(resource=f'{self._r}.testText'),
text_scale=0.6, text_scale=0.6,
on_activate_call=bui.Call(self._test, bs.MusicType(song_type)), on_activate_call=bui.Call(self._test, bs.MusicType(song_type)),
up_widget=( up_widget=(
@ -389,7 +389,7 @@ class SoundtrackEditWindow(bui.Window):
if bui.app.config.resolve('Music Volume') < 0.01: if bui.app.config.resolve('Music Volume') < 0.01:
bui.getsound('error').play() bui.getsound('error').play()
bui.screenmessage( bui.screenmessage(
bui.Lstr(resource=self._r + '.musicVolumeZeroWarning'), bui.Lstr(resource=f'{self._r}.musicVolumeZeroWarning'),
color=(1, 0.5, 0), color=(1, 0.5, 0),
) )
music.set_music_play_mode(bui.app.classic.MusicPlayMode.TEST) music.set_music_play_mode(bui.app.classic.MusicPlayMode.TEST)
@ -405,7 +405,7 @@ class SoundtrackEditWindow(bui.Window):
etype = music.get_soundtrack_entry_type(entry) etype = music.get_soundtrack_entry_type(entry)
ename: str | bui.Lstr ename: str | bui.Lstr
if etype == 'default': if etype == 'default':
ename = bui.Lstr(resource=self._r + '.defaultGameMusicText') ename = bui.Lstr(resource=f'{self._r}.defaultGameMusicText')
elif etype in ('musicFile', 'musicFolder'): elif etype in ('musicFile', 'musicFolder'):
ename = os.path.basename(music.get_soundtrack_entry_name(entry)) ename = os.path.basename(music.get_soundtrack_entry_name(entry))
else: else:
@ -453,7 +453,7 @@ class SoundtrackEditWindow(bui.Window):
new_name = cast(str, bui.textwidget(query=self._text_field)) new_name = cast(str, bui.textwidget(query=self._text_field))
if new_name != self._soundtrack_name and new_name in cfg['Soundtracks']: if new_name != self._soundtrack_name and new_name in cfg['Soundtracks']:
bui.screenmessage( bui.screenmessage(
bui.Lstr(resource=self._r + '.cantSaveAlreadyExistsText') bui.Lstr(resource=f'{self._r}.cantSaveAlreadyExistsText')
) )
bui.getsound('error').play() bui.getsound('error').play()
return return
@ -463,11 +463,11 @@ class SoundtrackEditWindow(bui.Window):
if ( if (
new_name new_name
== bui.Lstr( == bui.Lstr(
resource=self._r + '.defaultSoundtrackNameText' resource=f'{self._r}.defaultSoundtrackNameText'
).evaluate() ).evaluate()
): ):
bui.screenmessage( bui.screenmessage(
bui.Lstr(resource=self._r + '.cantOverwriteDefaultText') bui.Lstr(resource=f'{self._r}.cantOverwriteDefaultText')
) )
bui.getsound('error').play() bui.getsound('error').play()
return return

View File

@ -82,7 +82,7 @@ class SoundtrackEntryTypeSelectWindow(bui.Window):
parent=self._root_widget, parent=self._root_widget,
position=(self._width * 0.5, self._height - 32), position=(self._width * 0.5, self._height - 32),
size=(0, 0), size=(0, 0),
text=bui.Lstr(resource=self._r + '.selectASourceText'), text=bui.Lstr(resource=f'{self._r}.selectASourceText'),
color=bui.app.ui_v1.title_color, color=bui.app.ui_v1.title_color,
maxwidth=230, maxwidth=230,
h_align='center', h_align='center',
@ -110,7 +110,7 @@ class SoundtrackEntryTypeSelectWindow(bui.Window):
parent=self._root_widget, parent=self._root_widget,
size=(self._width - 100, 60), size=(self._width - 100, 60),
position=(50, v), position=(50, v),
label=bui.Lstr(resource=self._r + '.useDefaultGameMusicText'), label=bui.Lstr(resource=f'{self._r}.useDefaultGameMusicText'),
on_activate_call=self._on_default_press, on_activate_call=self._on_default_press,
) )
if current_entry_type == 'default': if current_entry_type == 'default':
@ -122,7 +122,7 @@ class SoundtrackEntryTypeSelectWindow(bui.Window):
parent=self._root_widget, parent=self._root_widget,
size=(self._width - 100, 60), size=(self._width - 100, 60),
position=(50, v), position=(50, v),
label=bui.Lstr(resource=self._r + '.useITunesPlaylistText'), label=bui.Lstr(resource=f'{self._r}.useITunesPlaylistText'),
on_activate_call=self._on_mac_music_app_playlist_press, on_activate_call=self._on_mac_music_app_playlist_press,
icon=None, icon=None,
) )
@ -135,7 +135,7 @@ class SoundtrackEntryTypeSelectWindow(bui.Window):
parent=self._root_widget, parent=self._root_widget,
size=(self._width - 100, 60), size=(self._width - 100, 60),
position=(50, v), position=(50, v),
label=bui.Lstr(resource=self._r + '.useMusicFileText'), label=bui.Lstr(resource=f'{self._r}.useMusicFileText'),
on_activate_call=self._on_music_file_press, on_activate_call=self._on_music_file_press,
icon=bui.gettexture('file'), icon=bui.gettexture('file'),
) )
@ -148,7 +148,7 @@ class SoundtrackEntryTypeSelectWindow(bui.Window):
parent=self._root_widget, parent=self._root_widget,
size=(self._width - 100, 60), size=(self._width - 100, 60),
position=(50, v), position=(50, v),
label=bui.Lstr(resource=self._r + '.useMusicFolderText'), label=bui.Lstr(resource=f'{self._r}.useMusicFolderText'),
on_activate_call=self._on_music_folder_press, on_activate_call=self._on_music_folder_press,
icon=bui.gettexture('folder'), icon=bui.gettexture('folder'),
icon_color=(1.1, 0.8, 0.2), icon_color=(1.1, 0.8, 0.2),

View File

@ -52,7 +52,7 @@ class MacMusicAppPlaylistSelectWindow(bui.Window):
parent=self._root_widget, parent=self._root_widget,
position=(20, self._height - 54), position=(20, self._height - 54),
size=(self._width, 25), size=(self._width, 25),
text=bui.Lstr(resource=self._r + '.selectAPlaylistText'), text=bui.Lstr(resource=f'{self._r}.selectAPlaylistText'),
color=bui.app.ui_v1.title_color, color=bui.app.ui_v1.title_color,
h_align='center', h_align='center',
v_align='center', v_align='center',
@ -75,7 +75,7 @@ class MacMusicAppPlaylistSelectWindow(bui.Window):
bui.textwidget( bui.textwidget(
parent=self._column, parent=self._column,
size=(self._width - 80, 22), size=(self._width - 80, 22),
text=bui.Lstr(resource=self._r + '.fetchingITunesText'), text=bui.Lstr(resource=f'{self._r}.fetchingITunesText'),
color=(0.6, 0.9, 0.6, 1.0), color=(0.6, 0.9, 0.6, 1.0),
scale=0.8, scale=0.8,
) )

View File

@ -205,17 +205,17 @@ class StoreBrowserWindow(bui.Window):
tab_buffer_h = 250 + 2 * x_inset tab_buffer_h = 250 + 2 * x_inset
tabs_def = [ tabs_def = [
(self.TabID.EXTRAS, bui.Lstr(resource=self._r + '.extrasText')), (self.TabID.EXTRAS, bui.Lstr(resource=f'{self._r}.extrasText')),
(self.TabID.MAPS, bui.Lstr(resource=self._r + '.mapsText')), (self.TabID.MAPS, bui.Lstr(resource=f'{self._r}.mapsText')),
( (
self.TabID.MINIGAMES, self.TabID.MINIGAMES,
bui.Lstr(resource=self._r + '.miniGamesText'), bui.Lstr(resource=f'{self._r}.miniGamesText'),
), ),
( (
self.TabID.CHARACTERS, self.TabID.CHARACTERS,
bui.Lstr(resource=self._r + '.charactersText'), bui.Lstr(resource=f'{self._r}.charactersText'),
), ),
(self.TabID.ICONS, bui.Lstr(resource=self._r + '.iconsText')), (self.TabID.ICONS, bui.Lstr(resource=f'{self._r}.iconsText')),
] ]
self._tab_row = TabRow( self._tab_row = TabRow(
@ -449,7 +449,7 @@ class StoreBrowserWindow(bui.Window):
color=(1, 0.7, 1, 0.5), color=(1, 0.7, 1, 0.5),
h_align='center', h_align='center',
v_align='center', v_align='center',
text=bui.Lstr(resource=self._r + '.loadingText'), text=bui.Lstr(resource=f'{self._r}.loadingText'),
maxwidth=self._scroll_width * 0.9, maxwidth=self._scroll_width * 0.9,
) )
@ -653,7 +653,7 @@ class StoreBrowserWindow(bui.Window):
def _print_already_own(self, charname: str) -> None: def _print_already_own(self, charname: str) -> None:
bui.screenmessage( bui.screenmessage(
bui.Lstr( bui.Lstr(
resource=self._r + '.alreadyOwnText', resource=f'{self._r}.alreadyOwnText',
subs=[('${NAME}', charname)], subs=[('${NAME}', charname)],
), ),
color=(1, 0, 0), color=(1, 0, 0),
@ -868,7 +868,7 @@ class StoreBrowserWindow(bui.Window):
color=(1, 0.3, 0.3, 1.0), color=(1, 0.3, 0.3, 1.0),
h_align='center', h_align='center',
v_align='center', v_align='center',
text=bui.Lstr(resource=self._r + '.loadErrorText'), text=bui.Lstr(resource=f'{self._r}.loadErrorText'),
maxwidth=self._scroll_width * 0.9, maxwidth=self._scroll_width * 0.9,
) )
else: else:
@ -1238,7 +1238,7 @@ class StoreBrowserWindow(bui.Window):
color=(1, 1, 0.3, 1.0), color=(1, 1, 0.3, 1.0),
h_align='center', h_align='center',
v_align='center', v_align='center',
text=bui.Lstr(resource=self._r + '.comingSoonText'), text=bui.Lstr(resource=f'{self._r}.comingSoonText'),
maxwidth=self._scroll_width * 0.9, maxwidth=self._scroll_width * 0.9,
) )

View File

@ -116,14 +116,14 @@ class WatchWindow(bui.Window):
scale=1.5, scale=1.5,
h_align='center', h_align='center',
v_align='center', v_align='center',
text=bui.Lstr(resource=self._r + '.titleText'), text=bui.Lstr(resource=f'{self._r}.titleText'),
maxwidth=400, maxwidth=400,
) )
tabdefs = [ tabdefs = [
( (
self.TabID.MY_REPLAYS, self.TabID.MY_REPLAYS,
bui.Lstr(resource=self._r + '.myReplaysText'), bui.Lstr(resource=f'{self._r}.myReplaysText'),
), ),
# (self.TabID.TEST_TAB, bui.Lstr(value='Testing')), # (self.TabID.TEST_TAB, bui.Lstr(value='Testing')),
] ]
@ -276,7 +276,7 @@ class WatchWindow(bui.Window):
textcolor=b_textcolor, textcolor=b_textcolor,
on_activate_call=self._on_my_replay_play_press, on_activate_call=self._on_my_replay_play_press,
text_scale=tscl, text_scale=tscl,
label=bui.Lstr(resource=self._r + '.watchReplayButtonText'), label=bui.Lstr(resource=f'{self._r}.watchReplayButtonText'),
autoselect=True, autoselect=True,
) )
bui.widget(edit=btn1, up_widget=self._tab_row.tabs[tab_id].button) bui.widget(edit=btn1, up_widget=self._tab_row.tabs[tab_id].button)
@ -296,7 +296,7 @@ class WatchWindow(bui.Window):
textcolor=b_textcolor, textcolor=b_textcolor,
on_activate_call=self._on_my_replay_rename_press, on_activate_call=self._on_my_replay_rename_press,
text_scale=tscl, text_scale=tscl,
label=bui.Lstr(resource=self._r + '.renameReplayButtonText'), label=bui.Lstr(resource=f'{self._r}.renameReplayButtonText'),
autoselect=True, autoselect=True,
) )
btnv -= b_height + b_space_extra btnv -= b_height + b_space_extra
@ -309,7 +309,7 @@ class WatchWindow(bui.Window):
textcolor=b_textcolor, textcolor=b_textcolor,
on_activate_call=self._on_my_replay_delete_press, on_activate_call=self._on_my_replay_delete_press,
text_scale=tscl, text_scale=tscl,
label=bui.Lstr(resource=self._r + '.deleteReplayButtonText'), label=bui.Lstr(resource=f'{self._r}.deleteReplayButtonText'),
autoselect=True, autoselect=True,
) )
@ -339,7 +339,7 @@ class WatchWindow(bui.Window):
def _no_replay_selected_error(self) -> None: def _no_replay_selected_error(self) -> None:
bui.screenmessage( bui.screenmessage(
bui.Lstr(resource=self._r + '.noReplaySelectedErrorText'), bui.Lstr(resource=f'{self._r}.noReplaySelectedErrorText'),
color=(1, 0, 0), color=(1, 0, 0),
) )
bui.getsound('error').play() bui.getsound('error').play()
@ -395,7 +395,7 @@ class WatchWindow(bui.Window):
h_align='center', h_align='center',
v_align='center', v_align='center',
text=bui.Lstr( text=bui.Lstr(
resource=self._r + '.renameReplayText', resource=f'{self._r}.renameReplayText',
subs=[('${REPLAY}', dname)], subs=[('${REPLAY}', dname)],
), ),
maxwidth=c_width * 0.8, maxwidth=c_width * 0.8,
@ -408,7 +408,7 @@ class WatchWindow(bui.Window):
v_align='center', v_align='center',
text=dname, text=dname,
editable=True, editable=True,
description=bui.Lstr(resource=self._r + '.replayNameText'), description=bui.Lstr(resource=f'{self._r}.replayNameText'),
position=(c_width * 0.1, c_height - 140), position=(c_width * 0.1, c_height - 140),
autoselect=True, autoselect=True,
maxwidth=c_width * 0.7, maxwidth=c_width * 0.7,
@ -427,7 +427,7 @@ class WatchWindow(bui.Window):
) )
okb = bui.buttonwidget( okb = bui.buttonwidget(
parent=cnt, parent=cnt,
label=bui.Lstr(resource=self._r + '.renameText'), label=bui.Lstr(resource=f'{self._r}.renameText'),
size=(180, 60), size=(180, 60),
position=(c_width - 230, 30), position=(c_width - 230, 30),
on_activate_call=bui.Call( on_activate_call=bui.Call(
@ -477,7 +477,7 @@ class WatchWindow(bui.Window):
bui.getsound('error').play() bui.getsound('error').play()
bui.screenmessage( bui.screenmessage(
bui.Lstr( bui.Lstr(
resource=self._r + '.replayRenameErrorInvalidName' resource=f'{self._r}.replayRenameErrorInvalidName'
), ),
color=(1, 0, 0), color=(1, 0, 0),
) )
@ -492,7 +492,7 @@ class WatchWindow(bui.Window):
) )
bui.getsound('error').play() bui.getsound('error').play()
bui.screenmessage( bui.screenmessage(
bui.Lstr(resource=self._r + '.replayRenameErrorText'), bui.Lstr(resource=f'{self._r}.replayRenameErrorText'),
color=(1, 0, 0), color=(1, 0, 0),
) )
@ -508,7 +508,7 @@ class WatchWindow(bui.Window):
return return
confirm.ConfirmWindow( confirm.ConfirmWindow(
bui.Lstr( bui.Lstr(
resource=self._r + '.deleteConfirmText', resource=f'{self._r}.deleteConfirmText',
subs=[ subs=[
( (
'${REPLAY}', '${REPLAY}',
@ -540,7 +540,7 @@ class WatchWindow(bui.Window):
logging.exception("Error deleting replay '%s'.", replay) logging.exception("Error deleting replay '%s'.", replay)
bui.getsound('error').play() bui.getsound('error').play()
bui.screenmessage( bui.screenmessage(
bui.Lstr(resource=self._r + '.replayDeleteErrorText'), bui.Lstr(resource=f'{self._r}.replayDeleteErrorText'),
color=(1, 0, 0), color=(1, 0, 0),
) )

View File

@ -39,7 +39,7 @@ auto main(int argc, char** argv) -> int {
namespace ballistica { namespace ballistica {
// These are set automatically via script; don't modify them here. // These are set automatically via script; don't modify them here.
const int kEngineBuildNumber = 21939; const int kEngineBuildNumber = 21942;
const char* kEngineVersion = "1.7.36"; const char* kEngineVersion = "1.7.36";
const int kEngineApiVersion = 8; const int kEngineApiVersion = 8;

View File

@ -16,6 +16,13 @@ if TYPE_CHECKING:
pass pass
class WebLocation(Enum):
"""Set of places we can be directed on ballistica.net."""
ACCOUNT_EDITOR = 'e'
ACCOUNT_DELETE_SECTION = 'd'
@ioprepped @ioprepped
@dataclass @dataclass
class LoginProxyRequestMessage(Message): class LoginProxyRequestMessage(Message):
@ -238,6 +245,10 @@ class SignInResponse(Response):
class ManageAccountMessage(Message): class ManageAccountMessage(Message):
"""Message asking for a manage-account url.""" """Message asking for a manage-account url."""
weblocation: Annotated[WebLocation, IOAttrs('l')] = (
WebLocation.ACCOUNT_EDITOR
)
@override @override
@classmethod @classmethod
def get_response_types(cls) -> list[type[Response] | None]: def get_response_types(cls) -> list[type[Response] | None]: