getting this train rolling again

This commit is contained in:
Eric 2024-09-19 19:12:22 -07:00
parent 07fccafb96
commit b2e5243a22
No known key found for this signature in database
GPG Key ID: 89C93F0F8D6D5A98
13 changed files with 151 additions and 133 deletions

72
.efrocachemap generated
View File

@ -4096,26 +4096,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": "d75f5f4310f75e74040fd0617e64f808", "build/prefab/full/linux_arm64_gui/debug/ballisticakit": "fad0592c63dbf5623fd085b1f94dc5b5",
"build/prefab/full/linux_arm64_gui/release/ballisticakit": "b58ff78d4b313d2f929c4d02ee48c3fd", "build/prefab/full/linux_arm64_gui/release/ballisticakit": "b18b7d1073b180dd2b0ed563e3befda7",
"build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "09217687f4cd81efd1061788dbc16830", "build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "2ea095b28288927982060509174ed625",
"build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "556abef315aab24e2b29b058ec4e97fa", "build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "bdd91ad1d25228813e6123adecc16031",
"build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "f7c223996f159ead8e57bd5d718bfd57", "build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "354635e2cdb27b523c229ee3c723e136",
"build/prefab/full/linux_x86_64_gui/release/ballisticakit": "62b67a3c1dc9fa3460ad330a5e41fb57", "build/prefab/full/linux_x86_64_gui/release/ballisticakit": "6a3ecdf84a34549f451cfa43e87bae28",
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "a64bff24f4813517b481696442f4a66c", "build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "5e01a1b583a53c3d475013363b6e0372",
"build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "4e9fd279decc11c8f686c52474e97e4a", "build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "179905fc0b716c99c57b56179f84166e",
"build/prefab/full/mac_arm64_gui/debug/ballisticakit": "4c5ce050b46aa6e69f49351bb81ff33f", "build/prefab/full/mac_arm64_gui/debug/ballisticakit": "be15731bcd223a8723f146d8e3153b53",
"build/prefab/full/mac_arm64_gui/release/ballisticakit": "faaade6fa2863f1ad214ca8f6440acfe", "build/prefab/full/mac_arm64_gui/release/ballisticakit": "dfc1d123a5517302f5869b151a436a7f",
"build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "8a5273647be0a4979ef7457d9a293f2a", "build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "b1ef6725fdcf9071aba0f0f5e038727d",
"build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "29caca9434388e5256c951f7f4ff3705", "build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "24ac52a8b44b2b815cce76a150f38629",
"build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "9addb788e8b1777f91952dd3dcd7a76c", "build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "488119eac17785da1bf534702e8ed51f",
"build/prefab/full/mac_x86_64_gui/release/ballisticakit": "d4caaec3da50abfaef83e966c1e4b27e", "build/prefab/full/mac_x86_64_gui/release/ballisticakit": "cb59173e8b176b98206b7f69b9a08972",
"build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "e6601219689eeb0aea9775b744cefc35", "build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "60700ee6b7ed262215fca2c02ec5561b",
"build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "5c91f9eb1064b3291f337014362e6290", "build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "972c6e59e59ca24c7d1739b1d7530a30",
"build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "b580bfe90d14ffa181484d5dcd0c2039", "build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "b04c87e6dec8916aaf3666fe0aa4d158",
"build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "f674dcf98a27bcc90c3dfaa0df103175", "build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "04ddbccf8268c1199d196b3dc4559e1b",
"build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "ece0bcba0c29308b4f0b4f81a383abdf", "build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "02c9824a5e1951e8298c75196ae154e2",
"build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "f2b6a65b264164145f5f0c90b74807a1", "build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "da0705f8cc9e9eece02592fd1295ea40",
"build/prefab/lib/linux_arm64_gui/debug/libballisticaplus.a": "73ad3303fe1a82005918fbc5dae3446c", "build/prefab/lib/linux_arm64_gui/debug/libballisticaplus.a": "73ad3303fe1a82005918fbc5dae3446c",
"build/prefab/lib/linux_arm64_gui/release/libballisticaplus.a": "fa659b5d6119acba6570c92ce4d35ae2", "build/prefab/lib/linux_arm64_gui/release/libballisticaplus.a": "fa659b5d6119acba6570c92ce4d35ae2",
"build/prefab/lib/linux_arm64_server/debug/libballisticaplus.a": "73ad3303fe1a82005918fbc5dae3446c", "build/prefab/lib/linux_arm64_server/debug/libballisticaplus.a": "73ad3303fe1a82005918fbc5dae3446c",
@ -4124,22 +4124,22 @@
"build/prefab/lib/linux_x86_64_gui/release/libballisticaplus.a": "4a4c19120f810ff5b4c7afbf11c23cf6", "build/prefab/lib/linux_x86_64_gui/release/libballisticaplus.a": "4a4c19120f810ff5b4c7afbf11c23cf6",
"build/prefab/lib/linux_x86_64_server/debug/libballisticaplus.a": "ab8467107ed371eb542e0317a7e7395d", "build/prefab/lib/linux_x86_64_server/debug/libballisticaplus.a": "ab8467107ed371eb542e0317a7e7395d",
"build/prefab/lib/linux_x86_64_server/release/libballisticaplus.a": "4a4c19120f810ff5b4c7afbf11c23cf6", "build/prefab/lib/linux_x86_64_server/release/libballisticaplus.a": "4a4c19120f810ff5b4c7afbf11c23cf6",
"build/prefab/lib/mac_arm64_gui/debug/libballisticaplus.a": "bbee8acd115ca24fc14146a9fc47c676", "build/prefab/lib/mac_arm64_gui/debug/libballisticaplus.a": "f4c36e72fa8d9d06f8a00684a3fc4679",
"build/prefab/lib/mac_arm64_gui/release/libballisticaplus.a": "8b68b56dda9a9f421823e653b752445a", "build/prefab/lib/mac_arm64_gui/release/libballisticaplus.a": "3168e8377498df85a4adacede63d126a",
"build/prefab/lib/mac_arm64_server/debug/libballisticaplus.a": "bbee8acd115ca24fc14146a9fc47c676", "build/prefab/lib/mac_arm64_server/debug/libballisticaplus.a": "f4c36e72fa8d9d06f8a00684a3fc4679",
"build/prefab/lib/mac_arm64_server/release/libballisticaplus.a": "8b68b56dda9a9f421823e653b752445a", "build/prefab/lib/mac_arm64_server/release/libballisticaplus.a": "3168e8377498df85a4adacede63d126a",
"build/prefab/lib/mac_x86_64_gui/debug/libballisticaplus.a": "3108eb4d3a41bde33702e22fb893b218", "build/prefab/lib/mac_x86_64_gui/debug/libballisticaplus.a": "427a392c291aa9562e93c570c9f1b92c",
"build/prefab/lib/mac_x86_64_gui/release/libballisticaplus.a": "3e5c5fd0a09f55ba7b05ce1e2ec7171e", "build/prefab/lib/mac_x86_64_gui/release/libballisticaplus.a": "3f50101eed1a5178d5630064dbafb3ee",
"build/prefab/lib/mac_x86_64_server/debug/libballisticaplus.a": "1659535e95e3047fda529543e265ac97", "build/prefab/lib/mac_x86_64_server/debug/libballisticaplus.a": "78cf6a2069ab46f5f0be3f5b57a6ee70",
"build/prefab/lib/mac_x86_64_server/release/libballisticaplus.a": "3e5c5fd0a09f55ba7b05ce1e2ec7171e", "build/prefab/lib/mac_x86_64_server/release/libballisticaplus.a": "3f50101eed1a5178d5630064dbafb3ee",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "b109d15f1fb304874cac3d931d43a36b", "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "4769b8b8a99ef0e08aa968af3072fa38",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "aa913ed657a00c1806ab09a8458222b8", "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "f999d258cb8c7645c5b462ff81012289",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "4b48897babf11db572bbd1ebb6fdfb47", "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "aee027b5a96a835583d07ea95ac6d608",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "fefa3781a2f219fd11cde65e88ddf73b", "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "3f7d65bf17deb2714862df46c6772e06",
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "b64f90b8ab5fad730899089902ee9cc3", "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "d332af0eee1178cc7c00b6e3ed5ca8a2",
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "97046c99136410186428976d96fc6089", "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "2c8f29b6b26f657c776fee12f81bd28e",
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "945a62b44dfe35e066264e014fe20e27", "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "26a02edb690a0f9e5baaf0923cc1e57d",
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "79eb0ddb488d8d19141d7d1afb294398", "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "62d7688c402895869b794541366a3e20",
"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": "794d258d59fd17a61752843a9a0551ad", "src/assets/ba_data/python/babase/_mgen/enums.py": "794d258d59fd17a61752843a9a0551ad",
"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.37 (build 22004, api 9, 2024-09-05) ### 1.7.37 (build 22007, api 9, 2024-09-19)
- Bumping api version to 9. As you'll see below, there's some UI changes that - Bumping api version to 9. As you'll see below, there's some UI changes that
will require a bit of work for any UI mods to adapt to. If your mods don't will require a bit of work for any UI mods to adapt to. If your mods don't
touch UI stuff at all you can simply bump your api version and call it a day. touch UI stuff at all you can simply bump your api version and call it a day.

View File

@ -1,14 +1,14 @@
cpplint==1.6.1 cpplint==1.6.1
dmgbuild==1.6.2 dmgbuild==1.6.2
filelock==3.15.4 filelock==3.16.1
furo==2024.8.6 furo==2024.8.6
mypy==1.11.2 mypy==1.11.2
pbxproj==4.2.1 pbxproj==4.2.1
pdoc==14.6.1 pdoc==14.7.0
pur==7.3.2 pur==7.3.2
pylint==3.2.7 pylint==3.2.7
pylsp-mypy==0.6.9 pylsp-mypy==0.6.9
pytest==8.3.2 pytest==8.3.3
python-daemon==3.0.1 python-daemon==3.0.1
python-lsp-black==2.0.0 python-lsp-black==2.0.0
python-lsp-server==1.12.0 python-lsp-server==1.12.0
@ -17,6 +17,6 @@ Sphinx==8.0.2
tomlkit==0.13.2 tomlkit==0.13.2
types-certifi==2021.10.8.3 types-certifi==2021.10.8.3
types-filelock==3.2.7 types-filelock==3.2.7
types-requests==2.32.0.20240905 types-requests==2.32.0.20240914
typing_extensions==4.12.2 typing_extensions==4.12.2
urllib3==2.2.2 urllib3==2.2.3

View File

@ -152,14 +152,6 @@ class DevConsoleTabUI(DevConsoleTab):
def refresh(self) -> None: def refresh(self) -> None:
from babase._mgen.enums import UIScale from babase._mgen.enums import UIScale
# self.text(
# 'UI Testing',
# scale=0.8,
# pos=(15, 77),
# h_anchor='left',
# h_align='left',
# v_align='center',
# )
self.text( self.text(
'Make sure all interactive UI fits in the' 'Make sure all interactive UI fits in the'
' virtual bounds at all UI-scales (not counting things' ' virtual bounds at all UI-scales (not counting things'

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 = 22004 TARGET_BALLISTICA_BUILD = 22007
TARGET_BALLISTICA_VERSION = '1.7.37' TARGET_BALLISTICA_VERSION = '1.7.37'

View File

@ -7,7 +7,6 @@ from __future__ import annotations
import time import time
import random import random
import weakref import weakref
import functools
from typing import TYPE_CHECKING, override from typing import TYPE_CHECKING, override
import bascenev1 as bs import bascenev1 as bs
@ -251,7 +250,7 @@ class MainMenuActivity(bs.Activity[bs.Player, bs.Team]):
y = -15 y = -15
base_scale = 1.1 base_scale = 1.1
self._word_actors = [] self._word_actors = []
base_delay = 1.0 base_delay = 0.8
delay = base_delay delay = base_delay
delay_inc = 0.02 delay_inc = 0.02
@ -631,21 +630,37 @@ class MainMenuActivity(bs.Activity[bs.Player, bs.Team]):
time_v += random.random() * 0.1 time_v += random.random() * 0.1
bs.animate(cmb, 'input1', keys, loop=True) bs.animate(cmb, 'input1', keys, loop=True)
if custom_texture is None: # Do a fun spinny animation on the logo the first time in.
if (
custom_texture is None
and bs.app.classic is not None
and not bs.app.classic.main_menu_did_initial_transition
):
jitter()
cmb = bs.newnode('combine', owner=logo.node, attrs={'size': 2})
def rotate_logo() -> None: delay = 0.0
logo_scale = logo.node.scale keys = {
assert not isinstance(logo_scale, float) delay: 5000.0 * scale,
logo.node.rotate = logo.node.rotate + 4 delay + 0.4: 530.0 * scale,
logo.node.scale = (logo_scale[0] - 20, logo_scale[1] - 20) delay + 0.45: 620.0 * scale,
if logo.node.rotate >= 356: delay + 0.5: 590.0 * scale,
self._logo_rotate_timer = None delay + 0.55: 605.0 * scale,
jitter() delay + 0.6: 600.0 * scale,
}
bs.animate(cmb, 'input0', keys)
bs.animate(cmb, 'input1', keys)
cmb.connectattr('output', logo.node, 'scale')
self._logo_rotate_timer = bs.Timer( keys = {
0.001, functools.partial(rotate_logo), repeat=True delay: 100.0,
) delay + 0.4: 370.0,
delay + 0.45: 357.0,
delay + 0.5: 360.0,
}
bs.animate(logo.node, 'rotate', keys)
else: else:
# For all other cases do a simple scale up animation.
jitter() jitter()
cmb = bs.newnode('combine', owner=logo.node, attrs={'size': 2}) cmb = bs.newnode('combine', owner=logo.node, attrs={'size': 2})

View File

@ -982,7 +982,7 @@ class AccountSettingsWindow(bui.MainWindow):
# bit of spacing before the reset/sign-out section # bit of spacing before the reset/sign-out section
# v -= 5 # v -= 5
button_width = 250 button_width = 300
self._linked_accounts_text: bui.Widget | None self._linked_accounts_text: bui.Widget | None
if show_linked_accounts_text: if show_linked_accounts_text:

View File

@ -188,11 +188,16 @@ class MainMenuWindow(bui.MainWindow):
) )
if not classic.did_menu_intro: if not classic.did_menu_intro:
self._tdelay = 1.7 self._tdelay = 1.6
self._t_delay_inc = 0.05 self._t_delay_inc = 0.03
self._t_delay_play = 1.7
classic.did_menu_intro = True classic.did_menu_intro = True
td1 = 2
td2 = 1
td3 = 0
td4 = -1
td5 = -2
self._width = 400.0 self._width = 400.0
self._height = 200.0 self._height = 200.0
@ -231,6 +236,7 @@ class MainMenuWindow(bui.MainWindow):
) )
# Version/copyright info. # Version/copyright info.
thistdelay = self._tdelay + td3 * self._t_delay_inc
bui.textwidget( bui.textwidget(
parent=self._root_widget, parent=self._root_widget,
position=(self._width * 0.5, button_y_offs - 10), position=(self._width * 0.5, button_y_offs - 10),
@ -245,7 +251,8 @@ class MainMenuWindow(bui.MainWindow):
), ),
h_align='center', h_align='center',
v_align='center', v_align='center',
transition_delay=self._t_delay_play, # transition_delay=self._t_delay_play,
transition_delay=thistdelay,
) )
# In kiosk mode, provide a button to get back to the kiosk menu. # In kiosk mode, provide a button to get back to the kiosk menu.
@ -255,11 +262,12 @@ class MainMenuWindow(bui.MainWindow):
v = button_y_offs v = button_y_offs
scale = 1.0 scale = 1.0
this_b_width = self._button_width * 0.4 * scale this_b_width = self._button_width * 0.4 * scale
demo_menu_delay = ( # demo_menu_delay = (
0.0 # 0.0
if self._t_delay_play == 0.0 # if self._t_delay_play == 0.0
else max(0, self._t_delay_play + 0.1) # else max(0, self._t_delay_play + 0.1)
) # )
demo_menu_delay = 0.0
self._demo_menu_button = bui.buttonwidget( self._demo_menu_button = bui.buttonwidget(
parent=self._root_widget, parent=self._root_widget,
position=(self._width * 0.5 - this_b_width * 0.5, v + 90), position=(self._width * 0.5 - this_b_width * 0.5, v + 90),
@ -289,6 +297,8 @@ class MainMenuWindow(bui.MainWindow):
- side_button_width * side_button_scale * 0.5 - side_button_width * side_button_scale * 0.5
) )
v = button_y_offs + side_button_y_offs v = button_y_offs + side_button_y_offs
thistdelay = self._tdelay + td2 * self._t_delay_inc
self._gather_button = btn = bui.buttonwidget( self._gather_button = btn = bui.buttonwidget(
parent=self._root_widget, parent=self._root_widget,
position=(h - side_button_width * side_button_scale * 0.5, v), position=(h - side_button_width * side_button_scale * 0.5, v),
@ -297,7 +307,7 @@ class MainMenuWindow(bui.MainWindow):
autoselect=self._use_autoselect, autoselect=self._use_autoselect,
button_type='square', button_type='square',
label='', label='',
transition_delay=self._tdelay, transition_delay=thistdelay,
on_activate_call=self._gather_press, on_activate_call=self._gather_press,
) )
bui.textwidget( bui.textwidget(
@ -305,7 +315,7 @@ class MainMenuWindow(bui.MainWindow):
position=(h, v + side_button_height * side_button_scale * 0.25), position=(h, v + side_button_height * side_button_scale * 0.25),
size=(0, 0), size=(0, 0),
scale=0.75, scale=0.75,
transition_delay=self._tdelay, transition_delay=thistdelay,
draw_controller=btn, draw_controller=btn,
color=(0.75, 1.0, 0.7), color=(0.75, 1.0, 0.7),
maxwidth=side_button_width * side_button_scale * 0.8, maxwidth=side_button_width * side_button_scale * 0.8,
@ -318,7 +328,7 @@ class MainMenuWindow(bui.MainWindow):
parent=self._root_widget, parent=self._root_widget,
size=(icon_size, icon_size), size=(icon_size, icon_size),
draw_controller=btn, draw_controller=btn,
transition_delay=self._tdelay, transition_delay=thistdelay,
position=( position=(
h - 0.5 * icon_size, h - 0.5 * icon_size,
v v
@ -327,6 +337,8 @@ class MainMenuWindow(bui.MainWindow):
), ),
texture=bui.gettexture('usersButton'), texture=bui.gettexture('usersButton'),
) )
thistdelay = self._tdelay + td1 * self._t_delay_inc
# self._tdelay += self._t_delay_inc
h -= ( h -= (
side_button_width * side_button_scale * 0.5 side_button_width * side_button_scale * 0.5
@ -343,7 +355,7 @@ class MainMenuWindow(bui.MainWindow):
button_type='square', button_type='square',
scale=side_button_2_scale, scale=side_button_2_scale,
label=bui.Lstr(resource=f'{self._r}.howToPlayText'), label=bui.Lstr(resource=f'{self._r}.howToPlayText'),
transition_delay=self._tdelay, transition_delay=thistdelay,
on_activate_call=self._howtoplay, on_activate_call=self._howtoplay,
) )
self._how_to_play_button = btn self._how_to_play_button = btn
@ -353,6 +365,7 @@ class MainMenuWindow(bui.MainWindow):
v = button_y_offs v = button_y_offs
assert play_button_width is not None assert play_button_width is not None
assert play_button_height is not None assert play_button_height is not None
thistdelay = self._tdelay + td3 * self._t_delay_inc
self._play_button = start_button = bui.buttonwidget( self._play_button = start_button = bui.buttonwidget(
parent=self._root_widget, parent=self._root_widget,
position=(h - play_button_width * 0.5 * play_button_scale, v), position=(h - play_button_width * 0.5 * play_button_scale, v),
@ -361,7 +374,7 @@ class MainMenuWindow(bui.MainWindow):
scale=play_button_scale, scale=play_button_scale,
text_res_scale=2.0, text_res_scale=2.0,
label=bui.Lstr(resource='playText'), label=bui.Lstr(resource='playText'),
transition_delay=self._t_delay_play, transition_delay=thistdelay,
on_activate_call=self._play_press, on_activate_call=self._play_press,
) )
bui.containerwidget( bui.containerwidget(
@ -370,7 +383,7 @@ class MainMenuWindow(bui.MainWindow):
selected_child=start_button, selected_child=start_button,
) )
self._tdelay += self._t_delay_inc # self._tdelay += self._t_delay_inc
h = ( h = (
self._width * 0.5 self._width * 0.5
@ -379,6 +392,7 @@ class MainMenuWindow(bui.MainWindow):
+ side_button_width * side_button_scale * 0.5 + side_button_width * side_button_scale * 0.5
) )
v = button_y_offs + side_button_y_offs v = button_y_offs + side_button_y_offs
thistdelay = self._tdelay + td4 * self._t_delay_inc
self._watch_button = btn = bui.buttonwidget( self._watch_button = btn = bui.buttonwidget(
parent=self._root_widget, parent=self._root_widget,
position=(h - side_button_width * side_button_scale * 0.5, v), position=(h - side_button_width * side_button_scale * 0.5, v),
@ -387,7 +401,7 @@ class MainMenuWindow(bui.MainWindow):
autoselect=self._use_autoselect, autoselect=self._use_autoselect,
button_type='square', button_type='square',
label='', label='',
transition_delay=self._tdelay, transition_delay=thistdelay,
on_activate_call=self._watch_press, on_activate_call=self._watch_press,
) )
bui.textwidget( bui.textwidget(
@ -395,7 +409,7 @@ class MainMenuWindow(bui.MainWindow):
position=(h, v + side_button_height * side_button_scale * 0.25), position=(h, v + side_button_height * side_button_scale * 0.25),
size=(0, 0), size=(0, 0),
scale=0.75, scale=0.75,
transition_delay=self._tdelay, transition_delay=thistdelay,
color=(0.75, 1.0, 0.7), color=(0.75, 1.0, 0.7),
draw_controller=btn, draw_controller=btn,
maxwidth=side_button_width * side_button_scale * 0.8, maxwidth=side_button_width * side_button_scale * 0.8,
@ -408,7 +422,7 @@ class MainMenuWindow(bui.MainWindow):
parent=self._root_widget, parent=self._root_widget,
size=(icon_size, icon_size), size=(icon_size, icon_size),
draw_controller=btn, draw_controller=btn,
transition_delay=self._tdelay, transition_delay=thistdelay,
position=( position=(
h - 0.5 * icon_size, h - 0.5 * icon_size,
v v
@ -419,7 +433,8 @@ class MainMenuWindow(bui.MainWindow):
) )
# Credits button. # Credits button.
self._tdelay += self._t_delay_inc # self._tdelay += self._t_delay_inc
thistdelay = self._tdelay + td5 * self._t_delay_inc
h += side_button_width * side_button_scale * 0.5 + hspace2 h += side_button_width * side_button_scale * 0.5 + hspace2
v = button_y_offs + side_button_2_y_offs v = button_y_offs + side_button_2_y_offs
@ -438,10 +453,10 @@ class MainMenuWindow(bui.MainWindow):
scale=side_button_2_scale, scale=side_button_2_scale,
autoselect=self._use_autoselect, autoselect=self._use_autoselect,
label=bui.Lstr(resource=f'{self._r}.creditsText'), label=bui.Lstr(resource=f'{self._r}.creditsText'),
transition_delay=self._tdelay, transition_delay=thistdelay,
on_activate_call=self._credits, on_activate_call=self._credits,
) )
self._tdelay += self._t_delay_inc # self._tdelay += self._t_delay_inc
self._quit_button: bui.Widget | None self._quit_button: bui.Widget | None
if self._have_quit_button: if self._have_quit_button:
@ -461,13 +476,13 @@ class MainMenuWindow(bui.MainWindow):
) )
), ),
on_activate_call=self._quit, on_activate_call=self._quit,
transition_delay=self._tdelay, transition_delay=thistdelay,
) )
bui.containerwidget( bui.containerwidget(
edit=self._root_widget, cancel_button=quit_button edit=self._root_widget, cancel_button=quit_button
) )
self._tdelay += self._t_delay_inc # self._tdelay += self._t_delay_inc
else: else:
self._quit_button = None self._quit_button = None

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 = 22004; const int kEngineBuildNumber = 22007;
const char* kEngineVersion = "1.7.37"; const char* kEngineVersion = "1.7.37";
const int kEngineApiVersion = 9; const int kEngineApiVersion = 9;

View File

@ -27,8 +27,8 @@ namespace ballistica::ui_v1 {
// ------------------------------ getsound ------------------------------------- // ------------------------------ getsound -------------------------------------
static auto PyGetSound(PyObject* self, PyObject* args, static auto PyGetSound(PyObject* self, PyObject* args, PyObject* keywds)
PyObject* keywds) -> PyObject* { -> PyObject* {
BA_PYTHON_TRY; BA_PYTHON_TRY;
const char* name; const char* name;
static const char* kwlist[] = {"name", nullptr}; static const char* kwlist[] = {"name", nullptr};
@ -56,8 +56,8 @@ static PyMethodDef PyGetSoundDef = {
// ----------------------------- gettexture ------------------------------------ // ----------------------------- gettexture ------------------------------------
static auto PyGetTexture(PyObject* self, PyObject* args, static auto PyGetTexture(PyObject* self, PyObject* args, PyObject* keywds)
PyObject* keywds) -> PyObject* { -> PyObject* {
BA_PYTHON_TRY; BA_PYTHON_TRY;
const char* name; const char* name;
static const char* kwlist[] = {"name", nullptr}; static const char* kwlist[] = {"name", nullptr};
@ -85,8 +85,8 @@ static PyMethodDef PyGetTextureDef = {
// -------------------------- get_qrcode_texture ------------------------------- // -------------------------- get_qrcode_texture -------------------------------
static auto PyGetQRCodeTexture(PyObject* self, PyObject* args, static auto PyGetQRCodeTexture(PyObject* self, PyObject* args, PyObject* keywds)
PyObject* keywds) -> PyObject* { -> PyObject* {
BA_PYTHON_TRY; BA_PYTHON_TRY;
const char* url; const char* url;
static const char* kwlist[] = {"url", nullptr}; static const char* kwlist[] = {"url", nullptr};
@ -115,8 +115,8 @@ static PyMethodDef PyGetQRCodeTextureDef = {
// ------------------------------- getmesh ------------------------------------- // ------------------------------- getmesh -------------------------------------
static auto PyGetMesh(PyObject* self, PyObject* args, static auto PyGetMesh(PyObject* self, PyObject* args, PyObject* keywds)
PyObject* keywds) -> PyObject* { -> PyObject* {
BA_PYTHON_TRY; BA_PYTHON_TRY;
const char* name; const char* name;
static const char* kwlist[] = {"name", nullptr}; static const char* kwlist[] = {"name", nullptr};
@ -144,8 +144,8 @@ static PyMethodDef PyGetMeshDef = {
// ----------------------------- buttonwidget ---------------------------------- // ----------------------------- buttonwidget ----------------------------------
static auto PyButtonWidget(PyObject* self, PyObject* args, static auto PyButtonWidget(PyObject* self, PyObject* args, PyObject* keywds)
PyObject* keywds) -> PyObject* { -> PyObject* {
BA_PYTHON_TRY; BA_PYTHON_TRY;
PyObject* size_obj = Py_None; PyObject* size_obj = Py_None;
PyObject* pos_obj = Py_None; PyObject* pos_obj = Py_None;
@ -506,8 +506,8 @@ static PyMethodDef PyButtonWidgetDef = {
// --------------------------- checkboxwidget ---------------------------------- // --------------------------- checkboxwidget ----------------------------------
static auto PyCheckBoxWidget(PyObject* self, PyObject* args, static auto PyCheckBoxWidget(PyObject* self, PyObject* args, PyObject* keywds)
PyObject* keywds) -> PyObject* { -> PyObject* {
BA_PYTHON_TRY; BA_PYTHON_TRY;
PyObject* size_obj = Py_None; PyObject* size_obj = Py_None;
PyObject* pos_obj = Py_None; PyObject* pos_obj = Py_None;
@ -680,8 +680,8 @@ static PyMethodDef PyCheckBoxWidgetDef = {
// ----------------------------- imagewidget ----------------------------------- // ----------------------------- imagewidget -----------------------------------
static auto PyImageWidget(PyObject* self, PyObject* args, static auto PyImageWidget(PyObject* self, PyObject* args, PyObject* keywds)
PyObject* keywds) -> PyObject* { -> PyObject* {
BA_PYTHON_TRY; BA_PYTHON_TRY;
PyObject* size_obj = Py_None; PyObject* size_obj = Py_None;
PyObject* pos_obj = Py_None; PyObject* pos_obj = Py_None;
@ -885,8 +885,8 @@ static PyMethodDef PyImageWidgetDef = {
// ----------------------------- columnwidget ---------------------------------- // ----------------------------- columnwidget ----------------------------------
static auto PyColumnWidget(PyObject* self, PyObject* args, static auto PyColumnWidget(PyObject* self, PyObject* args, PyObject* keywds)
PyObject* keywds) -> PyObject* { -> PyObject* {
BA_PYTHON_TRY; BA_PYTHON_TRY;
PyObject* size_obj{Py_None}; PyObject* size_obj{Py_None};
@ -1067,8 +1067,8 @@ static PyMethodDef PyColumnWidgetDef = {
// ---------------------------- containerwidget -------------------------------- // ---------------------------- containerwidget --------------------------------
static auto PyContainerWidget(PyObject* self, PyObject* args, static auto PyContainerWidget(PyObject* self, PyObject* args, PyObject* keywds)
PyObject* keywds) -> PyObject* { -> PyObject* {
BA_PYTHON_TRY; BA_PYTHON_TRY;
PyObject* size_obj = Py_None; PyObject* size_obj = Py_None;
PyObject* pos_obj = Py_None; PyObject* pos_obj = Py_None;
@ -1417,8 +1417,8 @@ static PyMethodDef PyContainerWidgetDef = {
// ------------------------------ rowwidget ------------------------------------ // ------------------------------ rowwidget ------------------------------------
static auto PyRowWidget(PyObject* self, PyObject* args, static auto PyRowWidget(PyObject* self, PyObject* args, PyObject* keywds)
PyObject* keywds) -> PyObject* { -> PyObject* {
BA_PYTHON_TRY; BA_PYTHON_TRY;
PyObject* size_obj{Py_None}; PyObject* size_obj{Py_None};
@ -1546,8 +1546,8 @@ static PyMethodDef PyRowWidgetDef = {
// ---------------------------- scrollwidget ----------------------------------- // ---------------------------- scrollwidget -----------------------------------
static auto PyScrollWidget(PyObject* self, PyObject* args, static auto PyScrollWidget(PyObject* self, PyObject* args, PyObject* keywds)
PyObject* keywds) -> PyObject* { -> PyObject* {
BA_PYTHON_TRY; BA_PYTHON_TRY;
PyObject* size_obj{Py_None}; PyObject* size_obj{Py_None};
PyObject* pos_obj{Py_None}; PyObject* pos_obj{Py_None};
@ -1734,8 +1734,8 @@ static PyMethodDef PyScrollWidgetDef = {
// ---------------------------- hscrollwidget ---------------------------------- // ---------------------------- hscrollwidget ----------------------------------
static auto PyHScrollWidget(PyObject* self, PyObject* args, static auto PyHScrollWidget(PyObject* self, PyObject* args, PyObject* keywds)
PyObject* keywds) -> PyObject* { -> PyObject* {
BA_PYTHON_TRY; BA_PYTHON_TRY;
PyObject* size_obj = Py_None; PyObject* size_obj = Py_None;
@ -1913,8 +1913,8 @@ static PyMethodDef PyHScrollWidgetDef = {
// ------------------------------ textwidget ----------------------------------- // ------------------------------ textwidget -----------------------------------
static auto PyTextWidget(PyObject* self, PyObject* args, static auto PyTextWidget(PyObject* self, PyObject* args, PyObject* keywds)
PyObject* keywds) -> PyObject* { -> PyObject* {
BA_PYTHON_TRY; BA_PYTHON_TRY;
PyObject* size_obj = Py_None; PyObject* size_obj = Py_None;
PyObject* pos_obj = Py_None; PyObject* pos_obj = Py_None;
@ -2311,8 +2311,8 @@ static PyMethodDef PyTextWidgetDef = {
// ------------------------------- widget -------------------------------------- // ------------------------------- widget --------------------------------------
static auto PyWidgetCall(PyObject* self, PyObject* args, static auto PyWidgetCall(PyObject* self, PyObject* args, PyObject* keywds)
PyObject* keywds) -> PyObject* { -> PyObject* {
BA_PYTHON_TRY; BA_PYTHON_TRY;
PyObject* edit_obj = Py_None; PyObject* edit_obj = Py_None;
@ -2516,8 +2516,8 @@ static PyMethodDef PySetPartyWindowOpenDef = {
// -------------------------- get_special_widget ------------------------------- // -------------------------- get_special_widget -------------------------------
static auto PyGetSpecialWidget(PyObject* self, PyObject* args, static auto PyGetSpecialWidget(PyObject* self, PyObject* args, PyObject* keywds)
PyObject* keywds) -> PyObject* { -> PyObject* {
BA_PYTHON_TRY; BA_PYTHON_TRY;
const char* name; const char* name;

View File

@ -135,13 +135,8 @@ void ButtonWidget::Draw(base::RenderPass* pass, bool draw_transparent) {
show_icons = true; show_icons = true;
} }
bool ouya_icons = false;
bool remote_icons = false; bool remote_icons = false;
// Phasing out ouya stuff.
if (explicit_bool(false)) {
ouya_icons = true;
}
if (icon_type_ == IconType::kCancel && device != nullptr if (icon_type_ == IconType::kCancel && device != nullptr
&& device->IsRemoteControl()) { && device->IsRemoteControl()) {
remote_icons = true; remote_icons = true;
@ -151,7 +146,7 @@ void ButtonWidget::Draw(base::RenderPass* pass, bool draw_transparent) {
millisecs_t transition = millisecs_t transition =
(birth_time_millisecs_ + transition_delay_) - current_time; (birth_time_millisecs_ + transition_delay_) - current_time;
if (transition > 0) { if (transition > 0) {
extra_offs_x -= static_cast<float>(transition) * 4.0f; extra_offs_x -= static_cast<float>(transition) * 4.0f / scale();
} }
if (text_width_dirty_) { if (text_width_dirty_) {
@ -380,11 +375,6 @@ void ButtonWidget::Draw(base::RenderPass* pass, bool draw_transparent) {
1.0f * mult * (1.0f), 1.0f); 1.0f * mult * (1.0f), 1.0f);
c.SetTexture( c.SetTexture(
g_base->assets->SysTexture(base::SysTextureID::kBackIcon)); g_base->assets->SysTexture(base::SysTextureID::kBackIcon));
} else if (ouya_icons) {
c.SetColor(1.0f * mult * (1.0f), 1.0f * mult * (1.0f),
1.0f * mult * (1.0f), 1.0f);
c.SetTexture(
g_base->assets->SysTexture(base::SysTextureID::kOuyaAButton));
} else { } else {
c.SetColor(1.5f * mult * (color_red_), 1.5f * mult * (color_green_), c.SetColor(1.5f * mult * (color_red_), 1.5f * mult * (color_green_),
1.5f * mult * (color_blue_), 1.0f); 1.5f * mult * (color_blue_), 1.0f);

View File

@ -155,7 +155,9 @@ def run(projroot: str, args: list[str]) -> None:
ver = lines[0].strip().replace("'", '').replace('"', '').split()[-1] ver = lines[0].strip().replace("'", '').replace('"', '').split()[-1]
path = os.path.join(sdk_dir, 'ndk', ver) path = os.path.join(sdk_dir, 'ndk', ver)
if not os.path.isdir(path): if not os.path.isdir(path):
raise RuntimeError(f'NDK listed in gradle not found: {path}.') raise RuntimeError(
f'NDK path listed in gradle file not found: {path}.'
)
print(path) print(path)
if command == 'get-adb-path': if command == 'get-adb-path':

View File

@ -339,13 +339,17 @@ def build_android(rootdir: str, arch: str, debug: bool = False) -> None:
subprocess.run(['git', 'checkout', PY_VER_EXACT_ANDROID], check=True) subprocess.run(['git', 'checkout', PY_VER_EXACT_ANDROID], check=True)
# These builds require ANDROID_NDK to be set; make sure that's the case. # These builds require ANDROID_NDK to be set; make sure that's the case.
os.environ['ANDROID_NDK'] = ( ndkpath = (
subprocess.check_output( subprocess.check_output(
[f'{rootdir}/tools/pcommand', 'android_sdk_utils', 'get-ndk-path'] [f'{rootdir}/tools/pcommand', 'android_sdk_utils', 'get-ndk-path']
) )
.decode() .decode()
.strip() .strip()
) )
if not os.path.isdir(ndkpath):
raise RuntimeError(f'NDK path does not exist: "{ndkpath}".')
os.environ['ANDROID_NDK'] = ndkpath
# TEMP - hard coding old ndk for the moment; looks like libffi needs to # TEMP - hard coding old ndk for the moment; looks like libffi needs to
# be fixed to build with it. I *think* this has already been done; we just # be fixed to build with it. I *think* this has already been done; we just