From 88bd29d4fe13c7b3ab0ea57110ac3d62ecf661b4 Mon Sep 17 00:00:00 2001 From: Vishal Date: Fri, 30 Aug 2024 00:45:40 +0530 Subject: [PATCH 01/17] Update mainmenu.py --- .../ba_data/python/bascenev1lib/mainmenu.py | 81 ++++++++++++------- 1 file changed, 50 insertions(+), 31 deletions(-) diff --git a/src/assets/ba_data/python/bascenev1lib/mainmenu.py b/src/assets/ba_data/python/bascenev1lib/mainmenu.py index 15d5e24f..01aef956 100644 --- a/src/assets/ba_data/python/bascenev1lib/mainmenu.py +++ b/src/assets/ba_data/python/bascenev1lib/mainmenu.py @@ -7,6 +7,7 @@ from __future__ import annotations import time import random import weakref +import functools from typing import TYPE_CHECKING, override import bascenev1 as bs @@ -566,7 +567,6 @@ class MainMenuActivity(bs.Activity[bs.Player, bs.Team]): vr_depth_offset: float = 0.0, ) -> None: # pylint: disable=too-many-locals - # Temp easter goodness. if custom_texture is None: custom_texture = self._get_custom_logo_tex_name() @@ -584,6 +584,7 @@ class MainMenuActivity(bs.Activity[bs.Player, bs.Team]): bs.newnode( 'image', attrs={ + 'position': (x, y), 'texture': ltex, 'mesh_opaque': mopaque, 'mesh_transparent': mtrans, @@ -592,47 +593,65 @@ class MainMenuActivity(bs.Activity[bs.Player, bs.Team]): 'attach': 'center', 'tilt_translate': 0.21, 'absolute_scale': True, + 'scale': ( + (2000.0,2000.0) if custom_texture is None + else None + ) }, ) ) self._logo_node = logo.node self._word_actors.append(logo) - # Add a bit of stop-motion-y jitter to the logo (unless we're in - # VR mode in which case its best to leave things still). + # Add a bit of stop-motion-y jitter to the logo + # (unless we're in VR mode in which case its best to + # leave things still). assert logo.node - if not bs.app.env.vr: - cmb = bs.newnode('combine', owner=logo.node, attrs={'size': 2}) - cmb.connectattr('output', logo.node, 'position') - keys = {} - time_v = 0.0 + def jitter() -> None: + if not bs.app.env.vr: + cmb = bs.newnode('combine', owner=logo.node, attrs={'size': 2}) + cmb.connectattr('output', logo.node, 'position') + keys = {} + time_v = 0.0 - # Gen some random keys for that stop-motion-y look - for _i in range(10): - keys[time_v] = x + (random.random() - 0.5) * 0.7 * jitter_scale - time_v += random.random() * 0.1 - bs.animate(cmb, 'input0', keys, loop=True) - keys = {} - time_v = 0.0 - for _i in range(10): - keys[time_v * self._ts] = ( - y + (random.random() - 0.5) * 0.7 * jitter_scale + # Gen some random keys for that stop-motion-y look + for _i in range(10): + keys[time_v] = x + (random.random() - 0.5) * 0.7 * jitter_scale + time_v += random.random() * 0.1 + bs.animate(cmb, 'input0', keys, loop=True) + keys = {} + time_v = 0.0 + for _i in range(10): + keys[time_v * self._ts] = ( + y + (random.random() - 0.5) * 0.7 * jitter_scale + ) + time_v += random.random() * 0.1 + bs.animate(cmb, 'input1', keys, loop=True) + + if custom_texture is None: + def rotate_logo() -> None: + logo.node.rotate = logo.node.rotate + 4 + logo.node.scale = ( + logo.node.scale[0] - 20, logo.node.scale[1] - 20 ) - time_v += random.random() * 0.1 - bs.animate(cmb, 'input1', keys, loop=True) + if logo.node.rotate >= 355: + self._logo_rotate_timer = None + jitter() + self._logo_rotate_timer = bs.Timer( + 0.001, functools.partial(rotate_logo), repeat = True + ) else: - logo.node.position = (x, y) + jitter() + cmb = bs.newnode('combine', owner=logo.node, attrs={'size': 2}) - cmb = bs.newnode('combine', owner=logo.node, attrs={'size': 2}) - - keys = { - delay: 0.0, - delay + 0.1: 700.0 * scale, - delay + 0.2: 600.0 * scale, - } - bs.animate(cmb, 'input0', keys) - bs.animate(cmb, 'input1', keys) - cmb.connectattr('output', logo.node, 'scale') + keys = { + delay: 0.0, + delay + 0.1: 700.0 * scale, + delay + 0.2: 600.0 * scale, + } + bs.animate(cmb, 'input0', keys) + bs.animate(cmb, 'input1', keys) + cmb.connectattr('output', logo.node, 'scale') def _start_preloads(self) -> None: # FIXME: The func that calls us back doesn't save/restore state From 1eda53efe640117eb9c8294ba95aaed021882d04 Mon Sep 17 00:00:00 2001 From: Vishal Date: Fri, 30 Aug 2024 00:46:05 +0530 Subject: [PATCH 02/17] Update mainmenu.py --- src/assets/ba_data/python/bascenev1lib/mainmenu.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/assets/ba_data/python/bascenev1lib/mainmenu.py b/src/assets/ba_data/python/bascenev1lib/mainmenu.py index 01aef956..6695b578 100644 --- a/src/assets/ba_data/python/bascenev1lib/mainmenu.py +++ b/src/assets/ba_data/python/bascenev1lib/mainmenu.py @@ -43,6 +43,7 @@ class MainMenuActivity(bs.Activity[bs.Player, bs.Team]): self._update_timer: bs.Timer | None = None self._news: NewsDisplay | None = None self._attract_mode_timer: bs.Timer | None = None + self._logo_rotate_timer: bs.Timer | None = None @override def on_transition_in(self) -> None: From bef294e5ed36e83b4e06b9cfbdb3b14c35673da4 Mon Sep 17 00:00:00 2001 From: Vishal Date: Sat, 31 Aug 2024 19:31:48 +0530 Subject: [PATCH 03/17] Fixing Mypy --- src/assets/ba_data/python/bascenev1lib/mainmenu.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/assets/ba_data/python/bascenev1lib/mainmenu.py b/src/assets/ba_data/python/bascenev1lib/mainmenu.py index 6695b578..3db7a162 100644 --- a/src/assets/ba_data/python/bascenev1lib/mainmenu.py +++ b/src/assets/ba_data/python/bascenev1lib/mainmenu.py @@ -630,12 +630,13 @@ class MainMenuActivity(bs.Activity[bs.Player, bs.Team]): bs.animate(cmb, 'input1', keys, loop=True) if custom_texture is None: + logo_scale = 2000.0 def rotate_logo() -> None: logo.node.rotate = logo.node.rotate + 4 logo.node.scale = ( - logo.node.scale[0] - 20, logo.node.scale[1] - 20 + logo_scale - 20, logo_scale - 20 ) - if logo.node.rotate >= 355: + if logo.node.rotate >= 356: self._logo_rotate_timer = None jitter() self._logo_rotate_timer = bs.Timer( From cf0696a2ec43e4d9a649a0642bd1101b8b63c8a9 Mon Sep 17 00:00:00 2001 From: Vishal Date: Sat, 31 Aug 2024 19:38:19 +0530 Subject: [PATCH 04/17] Fixing Pylint --- src/assets/ba_data/python/bascenev1lib/mainmenu.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/assets/ba_data/python/bascenev1lib/mainmenu.py b/src/assets/ba_data/python/bascenev1lib/mainmenu.py index 3db7a162..bc4a40f6 100644 --- a/src/assets/ba_data/python/bascenev1lib/mainmenu.py +++ b/src/assets/ba_data/python/bascenev1lib/mainmenu.py @@ -617,7 +617,9 @@ class MainMenuActivity(bs.Activity[bs.Player, bs.Team]): # Gen some random keys for that stop-motion-y look for _i in range(10): - keys[time_v] = x + (random.random() - 0.5) * 0.7 * jitter_scale + keys[time_v] = ( + x + (random.random() - 0.5) * 0.7 * jitter_scale + ) time_v += random.random() * 0.1 bs.animate(cmb, 'input0', keys, loop=True) keys = {} From 46573c0ebc191a43d918f3f1d0c9bf2ee27afd05 Mon Sep 17 00:00:00 2001 From: Vishal Date: Sun, 1 Sep 2024 01:12:40 +0530 Subject: [PATCH 05/17] Fixing a few bugs --- .../python/bascenev1lib/activity/coopscore.py | 21 +++++++-------- .../python/bauiv1lib/settings/advanced.py | 2 +- .../python/bauiv1lib/settings/controls.py | 7 +++-- .../python/bauiv1lib/settings/touchscreen.py | 26 ++++++++++++------- 4 files changed, 32 insertions(+), 24 deletions(-) diff --git a/src/assets/ba_data/python/bascenev1lib/activity/coopscore.py b/src/assets/ba_data/python/bascenev1lib/activity/coopscore.py index a5958874..4373d66c 100644 --- a/src/assets/ba_data/python/bascenev1lib/activity/coopscore.py +++ b/src/assets/ba_data/python/bascenev1lib/activity/coopscore.py @@ -396,7 +396,7 @@ class CoopScoreScreen(bs.Activity[bs.Player, bs.Team]): bui.buttonwidget( parent=rootc, color=(0.45, 0.4, 0.5), - position=(160, v_offs + 480), + position=(160, v_offs + 439), size=(350, 62), label=( bui.Lstr(resource='tournamentStandingsText') @@ -489,8 +489,8 @@ class CoopScoreScreen(bs.Activity[bs.Player, bs.Team]): x_offs_extra = 0 if show_next_button else -100 self._corner_button_offs = ( - h_offs + 300.0 + 100.0 + x_offs_extra, - v_offs + 560.0, + h_offs + 300.0 + x_offs_extra, + v_offs + 519.0, ) if env.demo or env.arcade: @@ -499,7 +499,7 @@ class CoopScoreScreen(bs.Activity[bs.Player, bs.Team]): else: self._league_rank_button = LeagueRankButton( parent=rootc, - position=(h_offs + 300 + 100 + x_offs_extra, v_offs + 560), + position=(h_offs + 300 + x_offs_extra, v_offs + 519), size=(100, 60), scale=0.9, color=(0.4, 0.4, 0.9), @@ -509,7 +509,7 @@ class CoopScoreScreen(bs.Activity[bs.Player, bs.Team]): ) self._store_button_instance = StoreButton( parent=rootc, - position=(h_offs + 400 + 100 + x_offs_extra, v_offs + 560), + position=(h_offs + 400 + x_offs_extra, v_offs + 519), show_tickets=True, sale_scale=0.85, size=(100, 60), @@ -536,9 +536,8 @@ class CoopScoreScreen(bs.Activity[bs.Player, bs.Team]): ) def _update_corner_button_positions(self) -> None: - offs = -55 if bui.is_party_icon_visible() else 0 assert self._corner_button_offs is not None - pos_x = self._corner_button_offs[0] + offs + pos_x = self._corner_button_offs[0] pos_y = self._corner_button_offs[1] if self._league_rank_button is not None: self._league_rank_button.set_position((pos_x, pos_y)) @@ -716,7 +715,7 @@ class CoopScoreScreen(bs.Activity[bs.Player, bs.Team]): color=(0.5, 1, 0.5, 1), h_align='center', scale=0.4, - position=(0, 292), + position=(0, 255), jitter=1.0, ).autoretain() Text( @@ -1277,7 +1276,7 @@ class CoopScoreScreen(bs.Activity[bs.Player, bs.Team]): ), position=( ts_h_offs - 35 + 95, - ts_height / 2 + 6 + v_offs, + ts_height / 2 + 6 + v_offs - 41, ), color=(0.4, 0.4, 0.4, 1.0), scale=0.7, @@ -1344,7 +1343,7 @@ class CoopScoreScreen(bs.Activity[bs.Player, bs.Team]): ts_height / 2 + -ts_height * (i + 1) / 10 + v_offs - + 11.0, + - 30.0, ), h_align=Text.HAlign.RIGHT, v_align=Text.VAlign.CENTER, @@ -1361,7 +1360,7 @@ class CoopScoreScreen(bs.Activity[bs.Player, bs.Team]): + -ts_height * (i + 1) / 10 + v_offs_names + v_offs - + 11.0, + - 30.0, ), maxwidth=80.0 + 100.0 * len(self._playerinfos), v_align=Text.VAlign.CENTER, diff --git a/src/assets/ba_data/python/bauiv1lib/settings/advanced.py b/src/assets/ba_data/python/bauiv1lib/settings/advanced.py index b43b95b5..4ea22b36 100644 --- a/src/assets/ba_data/python/bauiv1lib/settings/advanced.py +++ b/src/assets/ba_data/python/bauiv1lib/settings/advanced.py @@ -132,7 +132,7 @@ class AdvancedSettingsWindow(bui.MainWindow): self._height - (57 if uiscale is bui.UIScale.SMALL else 40), ), size=(0, 0), - scale=0.5 if uiscale is bui.UIScale.SMALL else 1.0, + scale=0.65 if uiscale is bui.UIScale.SMALL else 1.0, text=bui.Lstr(resource=f'{self._r}.titleText'), color=app.ui_v1.title_color, h_align='center', diff --git a/src/assets/ba_data/python/bauiv1lib/settings/controls.py b/src/assets/ba_data/python/bauiv1lib/settings/controls.py index 85620b48..6c5afa90 100644 --- a/src/assets/ba_data/python/bauiv1lib/settings/controls.py +++ b/src/assets/ba_data/python/bauiv1lib/settings/controls.py @@ -162,7 +162,9 @@ class ControlsSettingsWindow(bui.MainWindow): bui.textwidget( parent=self._root_widget, - position=(0, height - 49 + yoffs), + position=(0, height + yoffs - ( + 75 if uiscale is bui.UIScale.SMALL else 50) + ), size=(width, 25), text=bui.Lstr(resource=f'{self._r}.titleText'), color=bui.app.ui_v1.title_color, @@ -310,7 +312,8 @@ class ControlsSettingsWindow(bui.MainWindow): xinput_checkbox = bui.checkboxwidget( parent=self._root_widget, - position=(100, v + 3), + position=(width * ( + 0.35 if uiscale is bui.UIScale.SMALL else 0.25), v + 3), size=(120, 30), value=(not bui.get_low_level_config_value('enablexinput', 1)), maxwidth=200, diff --git a/src/assets/ba_data/python/bauiv1lib/settings/touchscreen.py b/src/assets/ba_data/python/bauiv1lib/settings/touchscreen.py index ea965829..3ebb29ec 100644 --- a/src/assets/ba_data/python/bauiv1lib/settings/touchscreen.py +++ b/src/assets/ba_data/python/bauiv1lib/settings/touchscreen.py @@ -47,20 +47,26 @@ class TouchscreenSettingsWindow(bui.MainWindow): origin_widget=origin_widget, ) - btn = bui.buttonwidget( - parent=self._root_widget, - position=(55, self._height - 60), - size=(120, 60), - label=bui.Lstr(resource='backText'), - button_type='back', - scale=0.8, - on_activate_call=self._back, - ) + if uiscale is bui.UIScale.SMALL: + bui.containerwidget( + edit=self._root_widget, on_cancel_call=self.main_window_back + ) + btn = None + else: + btn = bui.buttonwidget( + parent=self._root_widget, + position=(55, self._height - 60), + size=(120, 60), + label=bui.Lstr(resource='backText'), + button_type='back', + scale=0.8, + on_activate_call=self.main_window_back + ) bui.containerwidget(edit=self._root_widget, cancel_button=btn) bui.textwidget( parent=self._root_widget, - position=(25, self._height - 50), + position=(25, self._height - 62), size=(self._width, 25), text=bui.Lstr(resource=f'{self._r}.titleText'), color=bui.app.ui_v1.title_color, From 3a219e2199fdfc9d3554f14e1a7a6c94c64b64eb Mon Sep 17 00:00:00 2001 From: Vishal Date: Sun, 1 Sep 2024 14:26:26 +0530 Subject: [PATCH 06/17] Small Back button fix --- src/assets/ba_data/python/bauiv1lib/settings/touchscreen.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/assets/ba_data/python/bauiv1lib/settings/touchscreen.py b/src/assets/ba_data/python/bauiv1lib/settings/touchscreen.py index 3ebb29ec..9ab19c45 100644 --- a/src/assets/ba_data/python/bauiv1lib/settings/touchscreen.py +++ b/src/assets/ba_data/python/bauiv1lib/settings/touchscreen.py @@ -42,6 +42,11 @@ class TouchscreenSettingsWindow(bui.MainWindow): if uiscale is bui.UIScale.SMALL else 1.55 if uiscale is bui.UIScale.MEDIUM else 1.2 ), + toolbar_visibility=( + 'menu_minimal' + if uiscale is bui.UIScale.SMALL + else 'menu_full' + ), ), transition=transition, origin_widget=origin_widget, From c495dc691987fc080de7dcd658dc84a3e1dde48b Mon Sep 17 00:00:00 2001 From: Vishal Date: Sun, 1 Sep 2024 16:30:55 +0530 Subject: [PATCH 07/17] Fixing pause/resume bug during games --- src/assets/ba_data/python/bauiv1lib/ingamemenu.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/assets/ba_data/python/bauiv1lib/ingamemenu.py b/src/assets/ba_data/python/bauiv1lib/ingamemenu.py index f72477f9..be4f7eec 100644 --- a/src/assets/ba_data/python/bauiv1lib/ingamemenu.py +++ b/src/assets/ba_data/python/bauiv1lib/ingamemenu.py @@ -592,3 +592,15 @@ class InGameMenuWindow(bui.MainWindow): logging.exception('Error in classic resume callback.') classic.main_menu_resume_callbacks.clear() + + def __del__(self) -> None: + import bascenev1lib.tutorial as tutorial + activity = bs.get_foreground_host_activity() + + if isinstance(activity, (bs.GameActivity, tutorial.TutorialActivity)): + classic = bui.app.classic + + assert classic is not None + classic.resume() + + bui.app.ui_v1.clear_main_window() From 22f08080489696acdd4622acab516534cde5bd09 Mon Sep 17 00:00:00 2001 From: Vishal Date: Sun, 1 Sep 2024 16:36:34 +0530 Subject: [PATCH 08/17] fixing PyLint --- src/assets/ba_data/python/bauiv1lib/ingamemenu.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/assets/ba_data/python/bauiv1lib/ingamemenu.py b/src/assets/ba_data/python/bauiv1lib/ingamemenu.py index be4f7eec..9b944338 100644 --- a/src/assets/ba_data/python/bauiv1lib/ingamemenu.py +++ b/src/assets/ba_data/python/bauiv1lib/ingamemenu.py @@ -594,7 +594,7 @@ class InGameMenuWindow(bui.MainWindow): classic.main_menu_resume_callbacks.clear() def __del__(self) -> None: - import bascenev1lib.tutorial as tutorial + from bascenev1lib import tutorial activity = bs.get_foreground_host_activity() if isinstance(activity, (bs.GameActivity, tutorial.TutorialActivity)): From cffa1939ff204f5b614ac429fad177924455ab8d Mon Sep 17 00:00:00 2001 From: Vishal Date: Mon, 2 Sep 2024 11:44:16 +0530 Subject: [PATCH 09/17] Fixing a bug where game gets stuck in profile new/edit window --- .../ba_data/python/bauiv1lib/ingamemenu.py | 4 +- .../ba_data/python/bauiv1lib/profile/edit.py | 71 ++++++++++--------- 2 files changed, 38 insertions(+), 37 deletions(-) diff --git a/src/assets/ba_data/python/bauiv1lib/ingamemenu.py b/src/assets/ba_data/python/bauiv1lib/ingamemenu.py index 9b944338..c626e1f7 100644 --- a/src/assets/ba_data/python/bauiv1lib/ingamemenu.py +++ b/src/assets/ba_data/python/bauiv1lib/ingamemenu.py @@ -594,10 +594,10 @@ class InGameMenuWindow(bui.MainWindow): classic.main_menu_resume_callbacks.clear() def __del__(self) -> None: - from bascenev1lib import tutorial + from bascenev1lib.tutorial import TutorialActivity activity = bs.get_foreground_host_activity() - if isinstance(activity, (bs.GameActivity, tutorial.TutorialActivity)): + if isinstance(activity, (bs.GameActivity, TutorialActivity)): classic = bui.app.classic assert classic is not None diff --git a/src/assets/ba_data/python/bauiv1lib/profile/edit.py b/src/assets/ba_data/python/bauiv1lib/profile/edit.py index 982d143b..269e5236 100644 --- a/src/assets/ba_data/python/bauiv1lib/profile/edit.py +++ b/src/assets/ba_data/python/bauiv1lib/profile/edit.py @@ -7,9 +7,10 @@ from __future__ import annotations import random from typing import cast, override -from bauiv1lib.colorpicker import ColorPicker import bauiv1 as bui import bascenev1 as bs +from bauiv1lib.colorpicker import ColorPicker +from bauiv1lib.profile.browser import ProfileBrowserWindow class EditProfileWindow(bui.MainWindow): @@ -80,11 +81,6 @@ class EditProfileWindow(bui.MainWindow): stack_offset=( (0, -40) if uiscale is bui.UIScale.SMALL else (0, 0) ), - toolbar_visibility=( - 'menu_minimal' - if uiscale is bui.UIScale.SMALL - else 'menu_full' - ), ), transition=transition, origin_widget=origin_widget, @@ -690,24 +686,27 @@ class EditProfileWindow(bui.MainWindow): ) def _cancel(self) -> None: - self.main_window_back() - # from bauiv1lib.profile.browser import ProfileBrowserWindow + + if self._in_main_menu: + self.main_window_back() + return - # # no-op if our underlying widget is dead or on its way out. - # if not self._root_widget or self._root_widget.transitioning_out: - # return + # no-op if our underlying widget is dead or on its way out. + if not self._root_widget or self._root_widget.transitioning_out: + return - # bui.containerwidget(edit=self._root_widget, transition='out_right') - # assert bui.app.classic is not None - # bui.app.ui_v1.set_main_window( - # ProfileBrowserWindow( - # 'in_left', - # selected_profile=self._existing_profile, - # in_main_menu=self._in_main_menu, - # ), - # from_window=self, - # is_back=True, - # ) + bui.containerwidget(edit=self._root_widget, transition='out_right') + assert bui.app.classic is not None + + bui.app.ui_v1.set_main_window( + ProfileBrowserWindow( + 'in_left', + selected_profile=self._existing_profile, + in_main_menu=self._in_main_menu, + ), + from_window=self, + is_back=True, + ) def _set_color(self, color: tuple[float, float, float]) -> None: self._color = color @@ -859,17 +858,19 @@ class EditProfileWindow(bui.MainWindow): if transition_out: plus.run_v1_account_transactions() - self.main_window_back() - # bui.containerwidget(edit=self._root_widget, - # transition='out_right') - # assert bui.app.classic is not None - # bui.app.ui_v1.set_main_window( - # ProfileBrowserWindow( - # 'in_left', - # selected_profile=new_name, - # in_main_menu=self._in_main_menu, - # ), - # from_window=self, - # is_back=True, - # ) + if self._in_main_menu: + self.main_window_back() + return + bui.containerwidget(edit=self._root_widget, + transition='out_right') + assert bui.app.classic is not None + bui.app.ui_v1.set_main_window( + ProfileBrowserWindow( + 'in_left', + selected_profile=new_name, + in_main_menu=self._in_main_menu, + ), + from_window=self, + is_back=True, + ) return True From af215c082fc91b11bbcb76ce86360521b2b02d31 Mon Sep 17 00:00:00 2001 From: Vishal Date: Mon, 2 Sep 2024 11:54:57 +0530 Subject: [PATCH 10/17] Fixing error --- src/assets/ba_data/python/bauiv1lib/profile/edit.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/assets/ba_data/python/bauiv1lib/profile/edit.py b/src/assets/ba_data/python/bauiv1lib/profile/edit.py index 269e5236..054ff6fd 100644 --- a/src/assets/ba_data/python/bauiv1lib/profile/edit.py +++ b/src/assets/ba_data/python/bauiv1lib/profile/edit.py @@ -686,7 +686,7 @@ class EditProfileWindow(bui.MainWindow): ) def _cancel(self) -> None: - + if self._in_main_menu: self.main_window_back() return @@ -860,7 +860,7 @@ class EditProfileWindow(bui.MainWindow): plus.run_v1_account_transactions() if self._in_main_menu: self.main_window_back() - return + return True bui.containerwidget(edit=self._root_widget, transition='out_right') assert bui.app.classic is not None From 74c4a6c357ebb7543361a6c3575332353c12f81e Mon Sep 17 00:00:00 2001 From: Vishal Date: Mon, 2 Sep 2024 12:49:06 +0530 Subject: [PATCH 11/17] Removing unwanted code --- src/assets/ba_data/python/bauiv1lib/ingamemenu.py | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/src/assets/ba_data/python/bauiv1lib/ingamemenu.py b/src/assets/ba_data/python/bauiv1lib/ingamemenu.py index c626e1f7..96b23840 100644 --- a/src/assets/ba_data/python/bauiv1lib/ingamemenu.py +++ b/src/assets/ba_data/python/bauiv1lib/ingamemenu.py @@ -594,13 +594,4 @@ class InGameMenuWindow(bui.MainWindow): classic.main_menu_resume_callbacks.clear() def __del__(self) -> None: - from bascenev1lib.tutorial import TutorialActivity - activity = bs.get_foreground_host_activity() - - if isinstance(activity, (bs.GameActivity, TutorialActivity)): - classic = bui.app.classic - - assert classic is not None - classic.resume() - - bui.app.ui_v1.clear_main_window() + self._resume() From 06174ef34c2ca1ebfef1ce68bde8c3bcb0f2f9cb Mon Sep 17 00:00:00 2001 From: Vishal Date: Mon, 2 Sep 2024 21:25:32 +0530 Subject: [PATCH 12/17] Fixing a Party Window showing msg bug --- src/ballistica/ui_v1/python/methods/python_methods_ui_v1.cc | 1 + src/ballistica/ui_v1/ui_v1.cc | 2 +- src/ballistica/ui_v1/ui_v1.h | 4 ++++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/ballistica/ui_v1/python/methods/python_methods_ui_v1.cc b/src/ballistica/ui_v1/python/methods/python_methods_ui_v1.cc index 765c719c..ca7d6862 100644 --- a/src/ballistica/ui_v1/python/methods/python_methods_ui_v1.cc +++ b/src/ballistica/ui_v1/python/methods/python_methods_ui_v1.cc @@ -2500,6 +2500,7 @@ static auto PySetPartyWindowOpen(PyObject* self, PyObject* args, // } // root_ui->set_party_window_open(static_cast(value)); + g_ui_v1->set_party_window_open(static_cast(value)); Py_RETURN_NONE; BA_PYTHON_CATCH; } diff --git a/src/ballistica/ui_v1/ui_v1.cc b/src/ballistica/ui_v1/ui_v1.cc index 0bc3846f..db224536 100644 --- a/src/ballistica/ui_v1/ui_v1.cc +++ b/src/ballistica/ui_v1/ui_v1.cc @@ -102,7 +102,7 @@ bool UIV1FeatureSet::PartyWindowOpen() { // if (auto* r = root_ui()) { // return r->party_window_open(); // } - return false; + return party_window_open_; } void UIV1FeatureSet::Draw(base::FrameDef* frame_def) { diff --git a/src/ballistica/ui_v1/ui_v1.h b/src/ballistica/ui_v1/ui_v1.h index d962d6ae..1ecd406d 100644 --- a/src/ballistica/ui_v1/ui_v1.h +++ b/src/ballistica/ui_v1/ui_v1.h @@ -131,6 +131,9 @@ class UIV1FeatureSet : public FeatureSetNativeComponent, auto always_use_internal_on_screen_keyboard() const { return always_use_internal_on_screen_keyboard_; } + auto set_party_window_open(bool value) { + party_window_open_ = value; + } auto HasQuitConfirmDialog() -> bool override; void ConfirmQuit(QuitType quit_type) override; @@ -142,6 +145,7 @@ class UIV1FeatureSet : public FeatureSetNativeComponent, Object::Ref overlay_root_widget_; Object::Ref root_widget_; bool always_use_internal_on_screen_keyboard_{}; + bool party_window_open_{false}; int ui_lock_count_{}; int language_state_{}; }; From 17e995f2274249c1cf18e2ed06c982f9c4162795 Mon Sep 17 00:00:00 2001 From: Vishal Date: Wed, 4 Sep 2024 17:38:16 +0530 Subject: [PATCH 13/17] Fixing conflicts --- .../python/bauiv1lib/settings/touchscreen.py | 94 ++++++++++--------- 1 file changed, 49 insertions(+), 45 deletions(-) diff --git a/src/assets/ba_data/python/bauiv1lib/settings/touchscreen.py b/src/assets/ba_data/python/bauiv1lib/settings/touchscreen.py index 9ab19c45..ad8195a7 100644 --- a/src/assets/ba_data/python/bauiv1lib/settings/touchscreen.py +++ b/src/assets/ba_data/python/bauiv1lib/settings/touchscreen.py @@ -13,11 +13,6 @@ class TouchscreenSettingsWindow(bui.MainWindow): """Settings window for touchscreens.""" def __del__(self) -> None: - # Note - this happens in 'back' too; - # we just do it here too in case the window is closed by other means. - - # FIXME: Could switch to a UI destroy callback now that those are a - # thing that exists. bs.set_touchscreen_editing(False) def __init__( @@ -25,9 +20,9 @@ class TouchscreenSettingsWindow(bui.MainWindow): transition: str | None = 'in_right', origin_widget: bui.Widget | None = None, ) -> None: - self._width = 650 + self._width = 780 self._height = 380 - self._spacing = 40 + # self._spacing = 40 self._r = 'configTouchscreenWindow' bs.set_touchscreen_editing(True) @@ -47,6 +42,9 @@ class TouchscreenSettingsWindow(bui.MainWindow): if uiscale is bui.UIScale.SMALL else 'menu_full' ), + stack_offset=( + (0, -20) if uiscale is bui.UIScale.SMALL else (0, 0) + ), ), transition=transition, origin_widget=origin_widget, @@ -56,22 +54,21 @@ class TouchscreenSettingsWindow(bui.MainWindow): bui.containerwidget( edit=self._root_widget, on_cancel_call=self.main_window_back ) - btn = None else: btn = bui.buttonwidget( parent=self._root_widget, position=(55, self._height - 60), - size=(120, 60), - label=bui.Lstr(resource='backText'), - button_type='back', + size=(60, 60), + label=bui.charstr(bui.SpecialChar.BACK), + button_type='backSmall', scale=0.8, - on_activate_call=self.main_window_back + on_activate_call=self.main_window_back, ) - bui.containerwidget(edit=self._root_widget, cancel_button=btn) + bui.containerwidget(edit=self._root_widget, cancel_button=btn) bui.textwidget( parent=self._root_widget, - position=(25, self._height - 62), + position=(25, self._height - 57), size=(self._width, 25), text=bui.Lstr(resource=f'{self._r}.titleText'), color=bui.app.ui_v1.title_color, @@ -80,13 +77,6 @@ class TouchscreenSettingsWindow(bui.MainWindow): v_align='center', ) - bui.buttonwidget( - edit=btn, - button_type='backSmall', - size=(60, 60), - label=bui.charstr(bui.SpecialChar.BACK), - ) - self._scroll_width = self._width - 100 self._scroll_height = self._height - 110 self._sub_width = self._scroll_width - 20 @@ -124,6 +114,7 @@ class TouchscreenSettingsWindow(bui.MainWindow): ) def _build_gui(self) -> None: + # pylint: disable=too-many-locals from bauiv1lib.config import ConfigNumberEdit, ConfigCheckBox from bauiv1lib.radiogroup import make_radio_group @@ -132,13 +123,16 @@ class TouchscreenSettingsWindow(bui.MainWindow): for child in children: child.delete() h = 30 + hoffs = 100 + hoffs2 = 70 + hoffs3 = 320 v = self._sub_height - 85 clr = (0.8, 0.8, 0.8, 1.0) clr2 = (0.8, 0.8, 0.8) bui.textwidget( parent=self._subcontainer, - position=(-10, v + 43), - size=(self._sub_width, 25), + position=(self._sub_width * 0.5, v + 63), + size=(0, 0), text=bui.Lstr(resource=f'{self._r}.swipeInfoText'), flatness=1.0, color=(0, 0.9, 0.1, 0.7), @@ -159,7 +153,7 @@ class TouchscreenSettingsWindow(bui.MainWindow): ) cb1 = bui.checkboxwidget( parent=self._subcontainer, - position=(h + 220, v), + position=(h + hoffs + 220, v), size=(170, 30), text=bui.Lstr(resource=f'{self._r}.joystickText'), maxwidth=100, @@ -168,7 +162,7 @@ class TouchscreenSettingsWindow(bui.MainWindow): ) cb2 = bui.checkboxwidget( parent=self._subcontainer, - position=(h + 357, v), + position=(h + hoffs + 357, v), size=(170, 30), text=bui.Lstr(resource=f'{self._r}.swipeText'), maxwidth=100, @@ -183,7 +177,7 @@ class TouchscreenSettingsWindow(bui.MainWindow): ConfigNumberEdit( parent=self._subcontainer, position=(h, v), - xoffset=65, + xoffset=hoffs2 + 65, configkey='Touch Controls Scale Movement', displayname=bui.Lstr( resource=f'{self._r}.movementControlScaleText' @@ -206,7 +200,7 @@ class TouchscreenSettingsWindow(bui.MainWindow): ) cb1 = bui.checkboxwidget( parent=self._subcontainer, - position=(h + 220, v), + position=(h + hoffs + 220, v), size=(170, 30), text=bui.Lstr(resource=f'{self._r}.buttonsText'), maxwidth=100, @@ -215,7 +209,7 @@ class TouchscreenSettingsWindow(bui.MainWindow): ) cb2 = bui.checkboxwidget( parent=self._subcontainer, - position=(h + 357, v), + position=(h + hoffs + 357, v), size=(170, 30), text=bui.Lstr(resource=f'{self._r}.swipeText'), maxwidth=100, @@ -229,7 +223,7 @@ class TouchscreenSettingsWindow(bui.MainWindow): ConfigNumberEdit( parent=self._subcontainer, position=(h, v), - xoffset=65, + xoffset=hoffs2 + 65, configkey='Touch Controls Scale Actions', displayname=bui.Lstr(resource=f'{self._r}.actionControlScaleText'), changesound=False, @@ -239,13 +233,23 @@ class TouchscreenSettingsWindow(bui.MainWindow): ) v -= 50 + bui.textwidget( + parent=self._subcontainer, + position=(h, v - 2), + size=(0, 30), + text=bui.Lstr(resource=f'{self._r}.swipeControlsHiddenText'), + maxwidth=190, + color=clr, + v_align='center', + ) + ConfigCheckBox( parent=self._subcontainer, - position=(h, v), - size=(400, 30), + position=(h + hoffs3, v), + size=(100, 30), maxwidth=400, configkey='Touch Controls Swipe Hidden', - displayname=bui.Lstr(resource=f'{self._r}.swipeControlsHiddenText'), + displayname='', ) v -= 65 @@ -299,18 +303,18 @@ class TouchscreenSettingsWindow(bui.MainWindow): cfg.apply_and_commit() bui.apptimer(0, self._build_gui) - def _back(self) -> None: - from bauiv1lib.settings import controls + # def _back(self) -> None: + # from bauiv1lib.settings import controls - # no-op if our underlying widget is dead or on its way out. - if not self._root_widget or self._root_widget.transitioning_out: - return + # # no-op if our underlying widget is dead or on its way out. + # if not self._root_widget or self._root_widget.transitioning_out: + # return - bui.containerwidget(edit=self._root_widget, transition='out_right') - assert bui.app.classic is not None - bui.app.ui_v1.set_main_window( - controls.ControlsSettingsWindow(transition='in_left'), - from_window=self, - is_back=True, - ) - bs.set_touchscreen_editing(False) + # bui.containerwidget(edit=self._root_widget, transition='out_right') + # assert bui.app.classic is not None + # bui.app.ui_v1.set_main_window( + # controls.ControlsSettingsWindow(transition='in_left'), + # from_window=self, + # is_back=True, + # ) + # bs.set_touchscreen_editing(False) From f24cc3ccc99dc4686b69d28652dd77c1dc95a357 Mon Sep 17 00:00:00 2001 From: Vishal Date: Thu, 5 Sep 2024 00:38:28 +0530 Subject: [PATCH 14/17] Fixing more conflitcs --- .../ba_data/python/bauiv1lib/profile/edit.py | 88 ++++++++----------- 1 file changed, 39 insertions(+), 49 deletions(-) diff --git a/src/assets/ba_data/python/bauiv1lib/profile/edit.py b/src/assets/ba_data/python/bauiv1lib/profile/edit.py index 054ff6fd..e2bc1660 100644 --- a/src/assets/ba_data/python/bauiv1lib/profile/edit.py +++ b/src/assets/ba_data/python/bauiv1lib/profile/edit.py @@ -7,13 +7,13 @@ from __future__ import annotations import random from typing import cast, override +from bauiv1lib.colorpicker import ColorPicker +from bauiv1lib.characterpicker import CharacterPickerDelegate import bauiv1 as bui import bascenev1 as bs -from bauiv1lib.colorpicker import ColorPicker -from bauiv1lib.profile.browser import ProfileBrowserWindow -class EditProfileWindow(bui.MainWindow): +class EditProfileWindow(bui.MainWindow, CharacterPickerDelegate): """Window for editing a player profile.""" def reload_window(self) -> None: @@ -23,18 +23,20 @@ class EditProfileWindow(bui.MainWindow): if not self._root_widget or self._root_widget.transitioning_out: return - bui.containerwidget(edit=self._root_widget, transition='out_left') - assert bui.app.classic is not None - bui.app.ui_v1.set_main_window( - EditProfileWindow(self.getname(), self._in_main_menu), - from_window=self, - is_back=True, - ) + bui.screenmessage('UNDER CONSTRUCTION') + return + # bui.containerwidget(edit=self._root_widget, transition='out_left') + # assert bui.app.classic is not None + # bui.app.ui_v1.set_main_window( + # EditProfileWindow(self.getname()), + # from_window=self, + # is_back=True, + # ) def __init__( self, existing_profile: str | None, - in_main_menu: bool, + # in_main_menu: bool, transition: str | None = 'in_right', origin_widget: bui.Widget | None = None, ): @@ -47,7 +49,7 @@ class EditProfileWindow(bui.MainWindow): plus = bui.app.plus assert plus is not None - self._in_main_menu = in_main_menu + # self._in_main_menu = in_main_menu self._existing_profile = existing_profile self._r = 'editProfileWindow' self._spazzes: list[str] = [] @@ -81,6 +83,12 @@ class EditProfileWindow(bui.MainWindow): stack_offset=( (0, -40) if uiscale is bui.UIScale.SMALL else (0, 0) ), + toolbar_visibility=( + # 'menu_minimal' + None + if uiscale is bui.UIScale.SMALL + else 'menu_full' + ), ), transition=transition, origin_widget=origin_widget, @@ -522,7 +530,7 @@ class EditProfileWindow(bui.MainWindow): transition=transition, origin_widget=origin_widget, existing_profile=self._existing_profile, - in_main_menu=self._in_main_menu, + # in_main_menu=self._in_main_menu, ) ) @@ -628,6 +636,7 @@ class EditProfileWindow(bui.MainWindow): self._icon = icon self._update_icon() + @override def on_character_picker_pick(self, character: str) -> None: """A character has been selected by the picker.""" if not self._root_widget: @@ -640,6 +649,20 @@ class EditProfileWindow(bui.MainWindow): ) self._update_character() + @override + def on_character_picker_get_more_press(self) -> None: + from bauiv1lib.store.browser import StoreBrowserWindow + + if not self.main_window_has_control(): + return + + self.main_window_replace( + StoreBrowserWindow( + minimal_toolbars=True, + show_tab=StoreBrowserWindow.TabID.CHARACTERS, + ) + ) + def _on_character_press(self) -> None: from bauiv1lib import characterpicker @@ -686,27 +709,7 @@ class EditProfileWindow(bui.MainWindow): ) def _cancel(self) -> None: - - if self._in_main_menu: - self.main_window_back() - return - - # no-op if our underlying widget is dead or on its way out. - if not self._root_widget or self._root_widget.transitioning_out: - return - - bui.containerwidget(edit=self._root_widget, transition='out_right') - assert bui.app.classic is not None - - bui.app.ui_v1.set_main_window( - ProfileBrowserWindow( - 'in_left', - selected_profile=self._existing_profile, - in_main_menu=self._in_main_menu, - ), - from_window=self, - is_back=True, - ) + self.main_window_back() def _set_color(self, color: tuple[float, float, float]) -> None: self._color = color @@ -858,19 +861,6 @@ class EditProfileWindow(bui.MainWindow): if transition_out: plus.run_v1_account_transactions() - if self._in_main_menu: - self.main_window_back() - return True - bui.containerwidget(edit=self._root_widget, - transition='out_right') - assert bui.app.classic is not None - bui.app.ui_v1.set_main_window( - ProfileBrowserWindow( - 'in_left', - selected_profile=new_name, - in_main_menu=self._in_main_menu, - ), - from_window=self, - is_back=True, - ) + self.main_window_back() + return True From 9e691b490161c6e8349893e67ece4c2ca4dcb007 Mon Sep 17 00:00:00 2001 From: Vishal Date: Fri, 6 Sep 2024 16:09:12 +0530 Subject: [PATCH 15/17] conflict fix... again --- src/assets/ba_data/python/bascenev1lib/activity/coopscore.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/assets/ba_data/python/bascenev1lib/activity/coopscore.py b/src/assets/ba_data/python/bascenev1lib/activity/coopscore.py index 4373d66c..edc77bcd 100644 --- a/src/assets/ba_data/python/bascenev1lib/activity/coopscore.py +++ b/src/assets/ba_data/python/bascenev1lib/activity/coopscore.py @@ -536,6 +536,7 @@ class CoopScoreScreen(bs.Activity[bs.Player, bs.Team]): ) def _update_corner_button_positions(self) -> None: + offs = -55 assert self._corner_button_offs is not None pos_x = self._corner_button_offs[0] pos_y = self._corner_button_offs[1] From 01ab4a39d95774b07671220ce42fa2f5acac22f4 Mon Sep 17 00:00:00 2001 From: Vishal Date: Fri, 6 Sep 2024 16:10:25 +0530 Subject: [PATCH 16/17] Welp, that's gone, again --- src/assets/ba_data/python/bascenev1lib/activity/coopscore.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/assets/ba_data/python/bascenev1lib/activity/coopscore.py b/src/assets/ba_data/python/bascenev1lib/activity/coopscore.py index edc77bcd..4373d66c 100644 --- a/src/assets/ba_data/python/bascenev1lib/activity/coopscore.py +++ b/src/assets/ba_data/python/bascenev1lib/activity/coopscore.py @@ -536,7 +536,6 @@ class CoopScoreScreen(bs.Activity[bs.Player, bs.Team]): ) def _update_corner_button_positions(self) -> None: - offs = -55 assert self._corner_button_offs is not None pos_x = self._corner_button_offs[0] pos_y = self._corner_button_offs[1] From 498bfb39de90752bb991bcb13a07e5a6e967e3ac Mon Sep 17 00:00:00 2001 From: Vishal Date: Sat, 7 Sep 2024 20:41:29 +0530 Subject: [PATCH 17/17] Fixing a bug --- src/assets/ba_data/python/bascenev1lib/mainmenu.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/assets/ba_data/python/bascenev1lib/mainmenu.py b/src/assets/ba_data/python/bascenev1lib/mainmenu.py index bc4a40f6..78d13d7e 100644 --- a/src/assets/ba_data/python/bascenev1lib/mainmenu.py +++ b/src/assets/ba_data/python/bascenev1lib/mainmenu.py @@ -632,11 +632,11 @@ class MainMenuActivity(bs.Activity[bs.Player, bs.Team]): bs.animate(cmb, 'input1', keys, loop=True) if custom_texture is None: - logo_scale = 2000.0 def rotate_logo() -> None: + logo_scale = logo.node.scale logo.node.rotate = logo.node.rotate + 4 logo.node.scale = ( - logo_scale - 20, logo_scale - 20 + logo_scale[0] - 20, logo_scale[1] - 20 ) if logo.node.rotate >= 356: self._logo_rotate_timer = None