From c421ef808fc9bf832d96eb536cbd8a567f446da1 Mon Sep 17 00:00:00 2001 From: Eric Date: Fri, 9 Jun 2023 15:14:03 -0700 Subject: [PATCH] featureset dependency cleanup; all spinoff-tests should now pass --- .efrocachemap | 32 ++++++++-------- Makefile | 4 ++ config/featuresets/featureset_classic.py | 9 ++++- config/featuresets/featureset_ui_v1_lib.py | 2 +- .../ba_data/python/baclassic/_subsystem.py | 38 +++++++++++++++++++ src/assets/ba_data/python/bascenev1/_hooks.py | 14 ++++--- src/assets/ba_data/python/bauiv1/_hooks.py | 11 +++++- .../ba_data/python/bauiv1/_subsystem.py | 36 +----------------- .../ba_data/python/bauiv1lib/confirm.py | 3 +- src/assets/ba_data/python/bauiv1lib/party.py | 2 +- 10 files changed, 89 insertions(+), 62 deletions(-) diff --git a/.efrocachemap b/.efrocachemap index 81c69749..ba35afd0 100644 --- a/.efrocachemap +++ b/.efrocachemap @@ -4080,18 +4080,18 @@ "build/prefab/full/linux_x86_64_gui/release/ballisticakit": "https://files.ballistica.net/cache/ba1/f7/bd/eaf1e62f9fdba779bf850b9f28cd", "build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/e4/9b/a638d9e75b054f0696d6a941dcb3", "build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/8c/d0/c241f77c0217b3ef1b9694edd375", - "build/prefab/full/mac_arm64_gui/debug/ballisticakit": "https://files.ballistica.net/cache/ba1/07/b0/bc8c67505b71eba68778f37a34d5", + "build/prefab/full/mac_arm64_gui/debug/ballisticakit": "https://files.ballistica.net/cache/ba1/4b/8e/d9283666c42e8930b0cd534be4dc", "build/prefab/full/mac_arm64_gui/release/ballisticakit": "https://files.ballistica.net/cache/ba1/93/c1/240c43c921ed22d974ca9dadb253", - "build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/eb/c4/d7e1847d58ddf748dc4aafbcb399", + "build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/42/1b/e71f135f126f72804de5e5b127d5", "build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/90/f6/98b7cdb09b8ebc51f01469901486", - "build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "https://files.ballistica.net/cache/ba1/1a/98/77aec04467b11b0ce5600c99eb2d", + "build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "https://files.ballistica.net/cache/ba1/18/d5/4f9d22c1f26b18e3656f9785073e", "build/prefab/full/mac_x86_64_gui/release/ballisticakit": "https://files.ballistica.net/cache/ba1/6e/44/e63d5c7dc2506c6483a559396af5", - "build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/2c/08/52470d98248d8ba847984c051742", + "build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/2a/2f/b360b5f06f4d59c67cac83139188", "build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/c0/c9/7c5e84ee836a2d4a22663f8edae5", - "build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "https://files.ballistica.net/cache/ba1/7c/93/9f12cacd69a8cf7a0add000d5265", - "build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "https://files.ballistica.net/cache/ba1/79/dd/da70bbc4da1b69310a2d7bca8103", - "build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "https://files.ballistica.net/cache/ba1/db/a6/6c31f8d62226abdd0e2f82aaa40b", - "build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "https://files.ballistica.net/cache/ba1/3c/a6/03466686547fd2f2f9e90e1f258c", + "build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "https://files.ballistica.net/cache/ba1/ce/39/5f920f47fd1d3ac74de4d3632e4d", + "build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "https://files.ballistica.net/cache/ba1/b9/73/d01e9f2f8dafcaa2b1eee3cd4c62", + "build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "https://files.ballistica.net/cache/ba1/62/e5/7cc3c367168c84d06ac35295618e", + "build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "https://files.ballistica.net/cache/ba1/6c/7f/29963c7a8dc5847d76949169356e", "build/prefab/lib/linux_arm64_gui/debug/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/08/f1/36613a6c3ca87c93b4fbbe0de451", "build/prefab/lib/linux_arm64_gui/release/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/08/67/849330893eeb104e5a4dd44db54d", "build/prefab/lib/linux_arm64_server/debug/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/d4/63/436f0f9b3c22d669bbd6262dee66", @@ -4108,14 +4108,14 @@ "build/prefab/lib/mac_x86_64_gui/release/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/0d/da/cf2b3140c0c83b3e368623f1d705", "build/prefab/lib/mac_x86_64_server/debug/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/94/6c/3489c9df42324ad7f089d6271c4b", "build/prefab/lib/mac_x86_64_server/release/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/a6/0b/3ae5a82111a12bb75cd62252c2cc", - "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "https://files.ballistica.net/cache/ba1/de/50/e953e9f4bef5249444bf92cf7431", - "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "https://files.ballistica.net/cache/ba1/44/d4/c945282e101215eb32677adf6ee7", - "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "https://files.ballistica.net/cache/ba1/80/52/fec8962cf5f258068449d728e3f9", - "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "https://files.ballistica.net/cache/ba1/0d/dc/576e81d6a01de5a1d274d41fdc4b", - "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "https://files.ballistica.net/cache/ba1/5c/e8/dd981295029e587001e8e631def6", - "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "https://files.ballistica.net/cache/ba1/d9/a1/f00e661f34a44fdd82af47d63706", - "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "https://files.ballistica.net/cache/ba1/9d/01/701403052ee0cd98d324e138491c", - "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "https://files.ballistica.net/cache/ba1/06/df/07ac07299a66a7ea90e40a82736c", + "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "https://files.ballistica.net/cache/ba1/e6/17/d01132ba1b6e94801e4a23a94989", + "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "https://files.ballistica.net/cache/ba1/0f/d3/7613d44ef1a540f6263b2e89bfb5", + "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "https://files.ballistica.net/cache/ba1/f1/a1/8eb50a585d96ea1b557783105b7b", + "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "https://files.ballistica.net/cache/ba1/21/3a/ac8bf36b227128b558f85188c0b5", + "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "https://files.ballistica.net/cache/ba1/a1/20/b99fd7c8aa08645a1f76848badfd", + "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "https://files.ballistica.net/cache/ba1/7c/29/8587b6ff47891b57a8b467f6e5fb", + "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "https://files.ballistica.net/cache/ba1/82/81/a0b997a9f9dfe5a263ea4652ec62", + "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "https://files.ballistica.net/cache/ba1/29/1f/cccee6be4be518d2b45a026fc9fd", "src/assets/ba_data/python/babase/_mgen/__init__.py": "https://files.ballistica.net/cache/ba1/52/c6/c11130af7b10d6c0321add5518fa", "src/assets/ba_data/python/babase/_mgen/enums.py": "https://files.ballistica.net/cache/ba1/38/c3/1dedd5e74f2508efc5974c8815a1", "src/ballistica/base/mgen/pyembed/binding_base.inc": "https://files.ballistica.net/cache/ba1/fe/d2/3be7462aaff43bd651b5b5ac9d04", diff --git a/Makefile b/Makefile index f24ec816..c9d7db15 100644 --- a/Makefile +++ b/Makefile @@ -608,6 +608,10 @@ spinoff-test-base: spinoff-test-plus: tools/pcommand spinoff_test plus $(SPINOFF_TEST_EXTRA_ARGS) +# Build and check a spinoff project including only the classic feature-set. +spinoff-test-classic: + tools/pcommand spinoff_test classic $(SPINOFF_TEST_EXTRA_ARGS) + # Build and check a spinoff project with only the template_fs feature-set. spinoff-test-template_fs: tools/pcommand spinoff_test template_fs $(SPINOFF_TEST_EXTRA_ARGS) diff --git a/config/featuresets/featureset_classic.py b/config/featuresets/featureset_classic.py index 1f4f34e9..b3399ee6 100644 --- a/config/featuresets/featureset_classic.py +++ b/config/featuresets/featureset_classic.py @@ -12,7 +12,14 @@ from batools.featureset import FeatureSet # Grab the FeatureSet we should apply to. fset = FeatureSet.get_active() -fset.requirements = {'core', 'base', 'scene_v1', 'scene_v1_lib', 'ui_v1'} +fset.requirements = { + 'core', + 'base', + 'scene_v1', + 'scene_v1_lib', + 'ui_v1', + 'ui_v1_lib', +} # We can make use of plus stuff but can live without it. fset.soft_requirements = {'plus'} diff --git a/config/featuresets/featureset_ui_v1_lib.py b/config/featuresets/featureset_ui_v1_lib.py index 77554932..38f1be73 100644 --- a/config/featuresets/featureset_ui_v1_lib.py +++ b/config/featuresets/featureset_ui_v1_lib.py @@ -14,4 +14,4 @@ fset = FeatureSet.get_active() fset.has_native_python_module = False -fset.requirements = {'core', 'base', 'ui_v1'} +fset.requirements = {'core', 'base', 'ui_v1', 'classic'} diff --git a/src/assets/ba_data/python/baclassic/_subsystem.py b/src/assets/ba_data/python/baclassic/_subsystem.py index 50040931..28f1d979 100644 --- a/src/assets/ba_data/python/baclassic/_subsystem.py +++ b/src/assets/ba_data/python/baclassic/_subsystem.py @@ -5,6 +5,7 @@ from __future__ import annotations import random import logging +import weakref from typing import TYPE_CHECKING from efro.dataclassio import dataclass_from_dict @@ -36,6 +37,7 @@ if TYPE_CHECKING: from baclassic._appdelegate import AppDelegate from baclassic._servermode import ServerController from baclassic._net import MasterServerCallback + from bauiv1lib.party import PartyWindow class ClassicSubsystem(AppSubsystem): @@ -121,6 +123,7 @@ class ClassicSubsystem(AppSubsystem): self.main_menu_window_refresh_check_count = 0 # FIXME: Mv to mainmenu. self.invite_confirm_windows: list[Any] = [] # FIXME: Don't use Any. self.delegate: AppDelegate | None = None + self.party_window: weakref.ref[PartyWindow] | None = None # Store. self.store_layout: dict[str, list[dict[str, Any]]] | None = None @@ -756,3 +759,38 @@ class ClassicSubsystem(AppSubsystem): _bauiv1.gettexture(map_tex_name) except Exception: logging.exception('Error preloading map preview media.') + + def party_icon_activate(self, origin: Sequence[float]) -> None: + """(internal)""" + from bauiv1lib.party import PartyWindow + from babase import app + + assert not app.headless_mode + + _bauiv1.getsound('swish').play() + + # If it exists, dismiss it; otherwise make a new one. + party_window = ( + None if self.party_window is None else self.party_window() + ) + if party_window is not None: + party_window.close() + else: + self.party_window = weakref.ref(PartyWindow(origin=origin)) + + def device_menu_press(self, device_id: int | None) -> None: + """(internal)""" + from bauiv1lib.mainmenu import MainMenuWindow + from bauiv1 import set_ui_input_device + + assert _babase.app is not None + in_main_menu = _babase.app.ui_v1.has_main_menu_window() + if not in_main_menu: + set_ui_input_device(device_id) + + if not _babase.app.headless_mode: + _bauiv1.getsound('swish').play() + + _babase.app.ui_v1.set_main_menu_window( + MainMenuWindow().get_root_widget() + ) diff --git a/src/assets/ba_data/python/bascenev1/_hooks.py b/src/assets/ba_data/python/bascenev1/_hooks.py index 39546e7a..7ab12a7f 100644 --- a/src/assets/ba_data/python/bascenev1/_hooks.py +++ b/src/assets/ba_data/python/bascenev1/_hooks.py @@ -45,9 +45,11 @@ def filter_chat_message(msg: str, client_id: int) -> str | None: def local_chat_message(msg: str) -> None: - assert _babase.app.classic is not None - if ( - _babase.app.ui_v1.party_window is not None - and _babase.app.ui_v1.party_window() is not None - ): - _babase.app.ui_v1.party_window().on_chat_message(msg) + classic = _babase.app.classic + assert classic is not None + party_window = ( + None if classic.party_window is None else classic.party_window() + ) + + if party_window is not None: + party_window.on_chat_message(msg) diff --git a/src/assets/ba_data/python/bauiv1/_hooks.py b/src/assets/ba_data/python/bauiv1/_hooks.py index c702b64d..0925bc6f 100644 --- a/src/assets/ba_data/python/bauiv1/_hooks.py +++ b/src/assets/ba_data/python/bauiv1/_hooks.py @@ -51,7 +51,10 @@ def friends_button_press() -> None: def party_icon_activate(origin: Sequence[float]) -> None: from babase import app - app.ui_v1.party_icon_activate(origin) + if app.classic is not None: + app.classic.party_icon_activate(origin) + else: + logging.warning('party_icon_activate: no classic.') def quit_window() -> None: @@ -67,7 +70,11 @@ def quit_window() -> None: def device_menu_press(device_id: int | None) -> None: from babase import app - app.ui_v1.device_menu_press(device_id) + if app.classic is None: + logging.exception('Classic not present.') + return + + app.classic.device_menu_press(device_id) def show_url_window(address: str) -> None: diff --git a/src/assets/ba_data/python/bauiv1/_subsystem.py b/src/assets/ba_data/python/bauiv1/_subsystem.py index 4924e590..693d78f7 100644 --- a/src/assets/ba_data/python/bauiv1/_subsystem.py +++ b/src/assets/ba_data/python/bauiv1/_subsystem.py @@ -5,7 +5,6 @@ from __future__ import annotations from typing import TYPE_CHECKING -import weakref import _babase from babase._mgen.enums import UIScale @@ -16,7 +15,7 @@ import bauiv1 if TYPE_CHECKING: from typing import Any, Callable, Sequence - from bauiv1._uitypes import UICleanupCheck, UIController + from bauiv1._uitypes import UICleanupCheck, UIController, Window import babase @@ -36,6 +35,7 @@ class UIV1Subsystem(AppSubsystem): self._main_menu_window: bauiv1.Widget | None = None self._main_menu_location: str | None = None + self.quit_window: bauiv1.Widget | None = None # From classic. self.main_menu_resume_callbacks: list = [] # Can probably go away. @@ -55,11 +55,9 @@ class UIV1Subsystem(AppSubsystem): self.window_states: dict[type, Any] = {} # FIXME: Kill this. self.main_menu_selection: str | None = None # FIXME: Kill this. self.have_party_queue_window = False - self.quit_window: Any = None self.cleanupchecks: list[UICleanupCheck] = [] self.upkeeptimer: babase.AppTimer | None = None self.use_toolbars = env.get('toolbar_test', True) - self.party_window: Any = None # FIXME: Don't use Any. self.title_color = (0.72, 0.7, 0.75) self.heading_color = (0.72, 0.7, 0.75) self.infotextcolor = (0.7, 0.9, 0.7) @@ -184,33 +182,3 @@ class UIV1Subsystem(AppSubsystem): def get_main_menu_location(self) -> str | None: """Return the current named main menu location, if any.""" return self._main_menu_location - - def party_icon_activate(self, origin: Sequence[float]) -> None: - """(internal)""" - from bauiv1lib.party import PartyWindow - from babase import app - - assert not app.headless_mode - - _bauiv1.getsound('swish').play() - - # If it exists, dismiss it; otherwise make a new one. - if self.party_window is not None and self.party_window() is not None: - self.party_window().close() - else: - self.party_window = weakref.ref(PartyWindow(origin=origin)) - - def device_menu_press(self, device_id: int | None) -> None: - """(internal)""" - from bauiv1lib.mainmenu import MainMenuWindow - from bauiv1 import set_ui_input_device - - assert _babase.app is not None - in_main_menu = self.has_main_menu_window() - if not in_main_menu: - set_ui_input_device(device_id) - - if not _babase.app.headless_mode: - _bauiv1.getsound('swish').play() - - self.set_main_menu_window(MainMenuWindow().get_root_widget()) diff --git a/src/assets/ba_data/python/bauiv1lib/confirm.py b/src/assets/ba_data/python/bauiv1lib/confirm.py index cc67c010..256d3b7b 100644 --- a/src/assets/ba_data/python/bauiv1lib/confirm.py +++ b/src/assets/ba_data/python/bauiv1lib/confirm.py @@ -157,7 +157,8 @@ class QuitWindow: back: bool = False, origin_widget: bui.Widget | None = None, ): - assert bui.app.classic is not None + classic = bui.app.classic + assert classic is not None ui = bui.app.ui_v1 app = bui.app self._back = back diff --git a/src/assets/ba_data/python/bauiv1lib/party.py b/src/assets/ba_data/python/bauiv1lib/party.py index 0a22cf4e..9cf7083b 100644 --- a/src/assets/ba_data/python/bauiv1lib/party.py +++ b/src/assets/ba_data/python/bauiv1lib/party.py @@ -8,9 +8,9 @@ import math import logging from typing import TYPE_CHECKING, cast -from bauiv1lib.popup import PopupMenuWindow import bauiv1 as bui import bascenev1 as bs +from bauiv1lib.popup import PopupMenuWindow if TYPE_CHECKING: from typing import Sequence, Any