From f61f55f905016af7b786d9ce17285c54a0fca6bd Mon Sep 17 00:00:00 2001 From: Vishal Date: Sat, 2 Mar 2024 13:00:56 +0530 Subject: [PATCH 1/5] Update _subsystem.py --- src/assets/ba_data/python/bauiv1/_subsystem.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/assets/ba_data/python/bauiv1/_subsystem.py b/src/assets/ba_data/python/bauiv1/_subsystem.py index 34d7f5af..e5549609 100644 --- a/src/assets/ba_data/python/bauiv1/_subsystem.py +++ b/src/assets/ba_data/python/bauiv1/_subsystem.py @@ -43,7 +43,10 @@ class UIV1Subsystem(babase.AppSubsystem): self._uiscale: babase.UIScale - interfacetype = env['ui_scale'] + interfacetype = babase.app.config.get('UI Scale', env['ui_scale']) + if interfacetype == 'auto': + interfacetype = env['ui_scale'] + if interfacetype == 'large': self._uiscale = babase.UIScale.LARGE elif interfacetype == 'medium': From 002c317f493728977f3d2a3f503c00384bde5eff Mon Sep 17 00:00:00 2001 From: Vishal Date: Sat, 2 Mar 2024 13:28:29 +0530 Subject: [PATCH 2/5] Add files via upload --- .../python/bauiv1lib/settings/advanced.py | 34 +++ .../python/bauiv1lib/settings/moddingtools.py | 208 ++++++++++++++++++ 2 files changed, 242 insertions(+) create mode 100644 src/assets/ba_data/python/bauiv1lib/settings/moddingtools.py diff --git a/src/assets/ba_data/python/bauiv1lib/settings/advanced.py b/src/assets/ba_data/python/bauiv1lib/settings/advanced.py index 38285375..f9e2e8b1 100644 --- a/src/assets/ba_data/python/bauiv1lib/settings/advanced.py +++ b/src/assets/ba_data/python/bauiv1lib/settings/advanced.py @@ -112,6 +112,7 @@ class AdvancedSettingsWindow(bui.Window): if self._do_net_test_button: self._sub_height += self._extra_button_spacing self._sub_height += self._spacing * 2.0 # plugins + self._sub_height += self._spacing * 2.0 # modding tools self._r = 'settingsWindowAdvanced' @@ -196,6 +197,7 @@ class AdvancedSettingsWindow(bui.Window): from bauiv1lib import promocode as _unused7 from bauiv1lib import debug as _unused8 from bauiv1lib.settings import plugins as _unused9 + from bauiv1lib.settings import moddingtools as _unused10 def _update_lang_status(self) -> None: if self._complete_langs_list is not None: @@ -575,6 +577,19 @@ class AdvancedSettingsWindow(bui.Window): bui.open_url, 'https://ballistica.net/wiki/modding-guide' ), ) + + v -= self._spacing * 2.0 + + self._modding_tools_button = bui.buttonwidget( + parent=self._subcontainer, + position=(self._sub_width / 2 - this_button_width / 2, v - 10), + size=(this_button_width, 60), + autoselect=True, + label=bui.Lstr(value='Modding Tools'), + text_scale=1.0, + on_activate_call=self._on_modding_tools_button_press, + ) + if self._show_always_use_internal_keyboard: assert self._always_use_internal_keyboard_check_box is not None bui.widget( @@ -763,6 +778,21 @@ class AdvancedSettingsWindow(bui.Window): from_window=self._root_widget, ) + def _on_modding_tools_button_press(self) -> None: + from bauiv1lib.settings.moddingtools import ModdingToolsWindow + + # 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 + + self._save_state() + bui.containerwidget(edit=self._root_widget, transition='out_left') + assert bui.app.classic is not None + bui.app.ui_v1.set_main_menu_window( + ModdingToolsWindow(origin_widget=self._modding_tools_button).get_root_widget(), + from_window=self._root_widget, + ) + def _on_promo_code_press(self) -> None: from bauiv1lib.promocode import PromoCodeWindow from bauiv1lib.account import show_sign_in_prompt @@ -848,6 +878,8 @@ class AdvancedSettingsWindow(bui.Window): sel_name = 'ShowUserMods' elif sel == self._plugins_button: sel_name = 'Plugins' + elif sel == self._modding_tools_button: + sel_name = 'ModdingTools' elif sel == self._modding_guide_button: sel_name = 'ModdingGuide' elif sel == self._language_inform_checkbox: @@ -915,6 +947,8 @@ class AdvancedSettingsWindow(bui.Window): sel = self._show_user_mods_button elif sel_name == 'Plugins': sel = self._plugins_button + elif sel_name == 'ModdingTools': + sel = self._modding_tools_button elif sel_name == 'ModdingGuide': sel = self._modding_guide_button elif sel_name == 'LangInform': diff --git a/src/assets/ba_data/python/bauiv1lib/settings/moddingtools.py b/src/assets/ba_data/python/bauiv1lib/settings/moddingtools.py new file mode 100644 index 00000000..163e3fa8 --- /dev/null +++ b/src/assets/ba_data/python/bauiv1lib/settings/moddingtools.py @@ -0,0 +1,208 @@ +# Released under the MIT License. See LICENSE for details. +# +"""UI functionality for Modding Tools.""" + +from __future__ import annotations + +import babase +import bauiv1 as bui +from bauiv1lib.popup import PopupMenu +from bauiv1lib.confirm import ConfirmWindow + +class ModdingToolsWindow(bui.Window): + """Window for accessing modding tools.""" + + def __init__( + self, + transition: str = 'in_right', + origin_widget: bui.Widget | None = None, + ): + + app = bui.app + assert app.classic is not None + + # If they provided an origin-widget, scale up from that. + scale_origin: tuple[float, float] | None + if origin_widget is not None: + self._transition_out = 'out_scale' + scale_origin = origin_widget.get_screen_space_center() + transition = 'in_scale' + else: + self._transition_out = 'out_right' + scale_origin = None + + uiscale = app.ui_v1.uiscale + self._width = 970.0 if uiscale is bui.UIScale.SMALL else 670.0 + x_inset = 150 if uiscale is bui.UIScale.SMALL else 0 + self._height = ( + 390.0 + if uiscale is bui.UIScale.SMALL + else 450.0 + if uiscale is bui.UIScale.MEDIUM + else 520.0 + ) + + self._spacing = 32 + top_extra = 10 if uiscale is bui.UIScale.SMALL else 0 + + self._scroll_width = self._width - (100 + 2 * x_inset) + self._scroll_height = self._height - 115.0 + self._sub_width = self._scroll_width * 0.95 + self._sub_height = 100.0 + + super().__init__( + root_widget=bui.containerwidget( + size=(self._width, self._height + top_extra), + transition=transition, + toolbar_visibility='menu_minimal', + scale_origin_stack_offset=scale_origin, + scale=( + 2.06 + if uiscale is bui.UIScale.SMALL + else 1.4 + if uiscale is bui.UIScale.MEDIUM + else 1.0 + ), + stack_offset=(0, -25) + if uiscale is bui.UIScale.SMALL + else (0, 0), + ) + ) + + self._r = 'settingsModdingTools' + + if app.ui_v1.use_toolbars and uiscale is bui.UIScale.SMALL: + bui.containerwidget( + edit=self._root_widget, on_cancel_call=self._do_back + ) + self._back_button = None + else: + self._back_button = bui.buttonwidget( + parent=self._root_widget, + position=(53 + x_inset, self._height - 60), + size=(140, 60), + scale=0.8, + autoselect=True, + label=bui.Lstr(resource='backText'), + button_type='back', + on_activate_call=self._do_back, + ) + bui.containerwidget( + edit=self._root_widget, cancel_button=self._back_button + ) + + self._title_text = bui.textwidget( + parent=self._root_widget, + position=(0, self._height - 52), + size=(self._width, 25), + # text=bui.Lstr(resource=f'{self._r}.titleText'), + text=bui.Lstr(value='Modding Tools'), + color=app.ui_v1.title_color, + h_align='center', + v_align='top', + ) + + if self._back_button is not None: + bui.buttonwidget( + edit=self._back_button, + button_type='backSmall', + size=(60, 60), + label=bui.charstr(bui.SpecialChar.BACK), + ) + + self._scrollwidget = bui.scrollwidget( + parent=self._root_widget, + position=(50 + x_inset, 50), + simple_culling_v=20.0, + highlight=False, + size=(self._scroll_width, self._scroll_height), + selection_loops_to_parent=True, + ) + bui.widget(edit=self._scrollwidget, right_widget=self._scrollwidget) + self._subcontainer = bui.containerwidget( + parent=self._scrollwidget, + size=(self._sub_width, self._sub_height), + background=False, + selection_loops_to_parent=True, + ) + + v = self._sub_height - 35 + this_button_width = 410 + + v -= self._spacing * 1.2 + self._create_user_system_scripts_button = bui.buttonwidget( + parent=self._subcontainer, + position=(self._sub_width / 2 - this_button_width / 2, v - 10), + size=(this_button_width, 60), + autoselect=True, + label=bui.Lstr(value='Create User System Scripts'), + text_scale=1.0, + on_activate_call=babase.modutils.create_user_system_scripts, + ) + + v -= self._spacing * 2.5 + self._delete_user_system_scripts_button = bui.buttonwidget( + parent=self._subcontainer, + position=(self._sub_width / 2 - this_button_width / 2, v - 10), + size=(this_button_width, 60), + autoselect=True, + label=bui.Lstr(value='Delete User System Scripts'), + text_scale=1.0, + on_activate_call=lambda: ConfirmWindow( + action=babase.modutils.delete_user_system_scripts, + ), + ) + + v -= self._spacing * 2.5 + bui.textwidget( + parent=self._subcontainer, + position=(170, v + 10), + size=(0, 0), + text=bui.Lstr(value='UI SIZE :'), + color=app.ui_v1.title_color, + h_align='center', + v_align='center', + ) + + PopupMenu( + parent=self._subcontainer, + position=(230, v - 20), + button_size=(200.0, 60.0), + choices=['auto','small', 'medium', 'large',], + choices_display=[ + bui.Lstr(value='autoText'), + bui.Lstr(value='smallText'), + bui.Lstr(value='mediumText'), + bui.Lstr(value='largeText'), + ], + current_choice=app.config.get('UI Scale', 'auto'), + on_value_change_call=self._set_uiscale, + ) + + def _set_uiscale(self, val: str) -> None: + cfg = bui.app.config + cfg['UI Scale'] = val + cfg.apply_and_commit() + if bui.app.ui_v1.uiscale.name != val.upper(): + bui.screenmessage( + bui.Lstr( + resource='settingsWindowAdvanced.mustRestartText' + ), + color=(1.0, 0.5, 0.0), + ) + + def _do_back(self) -> None: + from bauiv1lib.settings.advanced import AdvancedSettingsWindow + + # 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=self._transition_out + ) + assert bui.app.classic is not None + bui.app.ui_v1.set_main_menu_window( + AdvancedSettingsWindow(transition='in_left').get_root_widget(), + from_window=self._root_widget, + ) \ No newline at end of file From ce089fed71877e52167fe6ef0d1c06a75cb14daa Mon Sep 17 00:00:00 2001 From: Vishal Date: Sat, 2 Mar 2024 14:14:58 +0530 Subject: [PATCH 3/5] Fixing up a few stuff --- src/assets/ba_data/python/babase/modutils.py | 17 +++++++++++++---- .../python/bauiv1lib/settings/advanced.py | 9 +++++++-- .../python/bauiv1lib/settings/moddingtools.py | 17 ++++++++--------- 3 files changed, 28 insertions(+), 15 deletions(-) diff --git a/src/assets/ba_data/python/babase/modutils.py b/src/assets/ba_data/python/babase/modutils.py index 1608eb5c..3b1d14db 100644 --- a/src/assets/ba_data/python/babase/modutils.py +++ b/src/assets/ba_data/python/babase/modutils.py @@ -136,8 +136,16 @@ def create_user_system_scripts() -> None: path = f'{env.python_directory_user}/sys/{env.version}' pathtmp = path + '_tmp' if os.path.exists(path): - print('Delete Existing User Scripts and try again.') - _babase.screenmessage('Delete Existing User Scripts and try again.') + print('Delete Existing User Scripts,' + f'Restart {_babase.appname()} and try again.') + _babase.screenmessage( + 'Delete Existing User Scripts,', + color=(1, 0, 0) + ) + _babase.screenmessage( + f'Restart {_babase.appname()} and try again.', + color=(1, 0, 0) + ) return if os.path.exists(pathtmp): shutil.rmtree(pathtmp) @@ -161,7 +169,7 @@ def create_user_system_scripts() -> None: f"'\nRestart {_babase.appname()} to use them." f' (use babase.quit() to exit the game)' ) - _babase.screenmessage('Created User System Scripts') + _babase.screenmessage('Created User System Scripts', color=(0, 1, 0)) if app.classic is not None and app.classic.platform == 'android': print( 'Note: the new files may not be visible via ' @@ -186,9 +194,10 @@ def delete_user_system_scripts() -> None: f'Restart {_babase.appname()} to use internal' f' scripts. (use babase.quit() to exit the game)' ) - _babase.screenmessage('Deleted User System Scripts') + _babase.screenmessage('Deleted User System Scripts', color=(0, 1, 0)) else: print(f"User system scripts not found at '{path}'.") + _babase.screenmessage('User Scripts Not Found', color=(1, 0, 0)) # If the sys path is empty, kill it. dpath = env.python_directory_user + '/sys' diff --git a/src/assets/ba_data/python/bauiv1lib/settings/advanced.py b/src/assets/ba_data/python/bauiv1lib/settings/advanced.py index f9e2e8b1..677731de 100644 --- a/src/assets/ba_data/python/bauiv1lib/settings/advanced.py +++ b/src/assets/ba_data/python/bauiv1lib/settings/advanced.py @@ -1,6 +1,7 @@ # Released under the MIT License. See LICENSE for details. # """UI functionality for advanced settings.""" +# pylint: disable=too-many-lines from __future__ import annotations @@ -585,7 +586,7 @@ class AdvancedSettingsWindow(bui.Window): position=(self._sub_width / 2 - this_button_width / 2, v - 10), size=(this_button_width, 60), autoselect=True, - label=bui.Lstr(value='Modding Tools'), + label=bui.Lstr(resource=f'{self._r}.moddingToolsText'), text_scale=1.0, on_activate_call=self._on_modding_tools_button_press, ) @@ -779,6 +780,7 @@ class AdvancedSettingsWindow(bui.Window): ) def _on_modding_tools_button_press(self) -> None: + # pylint: disable=cyclic-import from bauiv1lib.settings.moddingtools import ModdingToolsWindow # no-op if our underlying widget is dead or on its way out. @@ -789,7 +791,9 @@ class AdvancedSettingsWindow(bui.Window): bui.containerwidget(edit=self._root_widget, transition='out_left') assert bui.app.classic is not None bui.app.ui_v1.set_main_menu_window( - ModdingToolsWindow(origin_widget=self._modding_tools_button).get_root_widget(), + ModdingToolsWindow( + origin_widget=self._modding_tools_button + ).get_root_widget(), from_window=self._root_widget, ) @@ -836,6 +840,7 @@ class AdvancedSettingsWindow(bui.Window): def _save_state(self) -> None: # pylint: disable=too-many-branches + # pylint: disable=too-many-statements try: sel = self._root_widget.get_selected_child() if sel == self._scrollwidget: diff --git a/src/assets/ba_data/python/bauiv1lib/settings/moddingtools.py b/src/assets/ba_data/python/bauiv1lib/settings/moddingtools.py index 163e3fa8..65222c85 100644 --- a/src/assets/ba_data/python/bauiv1lib/settings/moddingtools.py +++ b/src/assets/ba_data/python/bauiv1lib/settings/moddingtools.py @@ -95,8 +95,7 @@ class ModdingToolsWindow(bui.Window): parent=self._root_widget, position=(0, self._height - 52), size=(self._width, 25), - # text=bui.Lstr(resource=f'{self._r}.titleText'), - text=bui.Lstr(value='Modding Tools'), + text=bui.Lstr(resource='moddingToolsTitleText'), color=app.ui_v1.title_color, h_align='center', v_align='top', @@ -135,7 +134,7 @@ class ModdingToolsWindow(bui.Window): position=(self._sub_width / 2 - this_button_width / 2, v - 10), size=(this_button_width, 60), autoselect=True, - label=bui.Lstr(value='Create User System Scripts'), + label=bui.Lstr(resource='createUserSystemScriptsText'), text_scale=1.0, on_activate_call=babase.modutils.create_user_system_scripts, ) @@ -146,7 +145,7 @@ class ModdingToolsWindow(bui.Window): position=(self._sub_width / 2 - this_button_width / 2, v - 10), size=(this_button_width, 60), autoselect=True, - label=bui.Lstr(value='Delete User System Scripts'), + label=bui.Lstr(resource='deleteUserSystemScriptsText'), text_scale=1.0, on_activate_call=lambda: ConfirmWindow( action=babase.modutils.delete_user_system_scripts, @@ -170,10 +169,10 @@ class ModdingToolsWindow(bui.Window): button_size=(200.0, 60.0), choices=['auto','small', 'medium', 'large',], choices_display=[ - bui.Lstr(value='autoText'), - bui.Lstr(value='smallText'), - bui.Lstr(value='mediumText'), - bui.Lstr(value='largeText'), + bui.Lstr(resource='autoText'), + bui.Lstr(resource='smallText'), + bui.Lstr(resource='mediumText'), + bui.Lstr(resource='largeText'), ], current_choice=app.config.get('UI Scale', 'auto'), on_value_change_call=self._set_uiscale, @@ -205,4 +204,4 @@ class ModdingToolsWindow(bui.Window): bui.app.ui_v1.set_main_menu_window( AdvancedSettingsWindow(transition='in_left').get_root_widget(), from_window=self._root_widget, - ) \ No newline at end of file + ) From 59b636dd8faece78301f18c0f473e3b4d91d6d0b Mon Sep 17 00:00:00 2001 From: Vishal Date: Sat, 2 Mar 2024 19:38:19 +0530 Subject: [PATCH 4/5] Update modutils.py --- src/assets/ba_data/python/babase/modutils.py | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/assets/ba_data/python/babase/modutils.py b/src/assets/ba_data/python/babase/modutils.py index 3b1d14db..08a58c71 100644 --- a/src/assets/ba_data/python/babase/modutils.py +++ b/src/assets/ba_data/python/babase/modutils.py @@ -136,15 +136,10 @@ def create_user_system_scripts() -> None: path = f'{env.python_directory_user}/sys/{env.version}' pathtmp = path + '_tmp' if os.path.exists(path): - print('Delete Existing User Scripts,' - f'Restart {_babase.appname()} and try again.') + print('Delete Existing User Scripts first!') _babase.screenmessage( - 'Delete Existing User Scripts,', - color=(1, 0, 0) - ) - _babase.screenmessage( - f'Restart {_babase.appname()} and try again.', - color=(1, 0, 0) + 'Delete Existing User Scripts first!', + color=(1, 0, 0), ) return if os.path.exists(pathtmp): @@ -195,6 +190,10 @@ def delete_user_system_scripts() -> None: f' scripts. (use babase.quit() to exit the game)' ) _babase.screenmessage('Deleted User System Scripts', color=(0, 1, 0)) + _babase.screenmessage( + f'Restart {_babase.appname()} to take effect.', + color=(0, 1, 0), + ) else: print(f"User system scripts not found at '{path}'.") _babase.screenmessage('User Scripts Not Found', color=(1, 0, 0)) From 839ba388c5f4f708090f0a9c65a62d41ae31247b Mon Sep 17 00:00:00 2001 From: 3alTemp Date: Sat, 2 Mar 2024 20:54:12 -0600 Subject: [PATCH 5/5] make update! --- src/assets/.asset_manifest_public.json | 2 ++ src/assets/Makefile | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/assets/.asset_manifest_public.json b/src/assets/.asset_manifest_public.json index 80f06984..575edf24 100644 --- a/src/assets/.asset_manifest_public.json +++ b/src/assets/.asset_manifest_public.json @@ -513,6 +513,7 @@ "ba_data/python/bauiv1lib/settings/__pycache__/gamepadselect.cpython-311.opt-1.pyc", "ba_data/python/bauiv1lib/settings/__pycache__/graphics.cpython-311.opt-1.pyc", "ba_data/python/bauiv1lib/settings/__pycache__/keyboard.cpython-311.opt-1.pyc", + "ba_data/python/bauiv1lib/settings/__pycache__/moddingtools.cpython-311.opt-1.pyc", "ba_data/python/bauiv1lib/settings/__pycache__/nettesting.cpython-311.opt-1.pyc", "ba_data/python/bauiv1lib/settings/__pycache__/plugins.cpython-311.opt-1.pyc", "ba_data/python/bauiv1lib/settings/__pycache__/pluginsettings.cpython-311.opt-1.pyc", @@ -529,6 +530,7 @@ "ba_data/python/bauiv1lib/settings/gamepadselect.py", "ba_data/python/bauiv1lib/settings/graphics.py", "ba_data/python/bauiv1lib/settings/keyboard.py", + "ba_data/python/bauiv1lib/settings/moddingtools.py", "ba_data/python/bauiv1lib/settings/nettesting.py", "ba_data/python/bauiv1lib/settings/plugins.py", "ba_data/python/bauiv1lib/settings/pluginsettings.py", diff --git a/src/assets/Makefile b/src/assets/Makefile index a92c9ad7..45bc5ee0 100644 --- a/src/assets/Makefile +++ b/src/assets/Makefile @@ -406,6 +406,7 @@ SCRIPT_TARGETS_PY_PUBLIC = \ $(BUILD_DIR)/ba_data/python/bauiv1lib/settings/gamepadselect.py \ $(BUILD_DIR)/ba_data/python/bauiv1lib/settings/graphics.py \ $(BUILD_DIR)/ba_data/python/bauiv1lib/settings/keyboard.py \ + $(BUILD_DIR)/ba_data/python/bauiv1lib/settings/moddingtools.py \ $(BUILD_DIR)/ba_data/python/bauiv1lib/settings/nettesting.py \ $(BUILD_DIR)/ba_data/python/bauiv1lib/settings/plugins.py \ $(BUILD_DIR)/ba_data/python/bauiv1lib/settings/pluginsettings.py \ @@ -681,6 +682,7 @@ SCRIPT_TARGETS_PYC_PUBLIC = \ $(BUILD_DIR)/ba_data/python/bauiv1lib/settings/__pycache__/gamepadselect.cpython-311.opt-1.pyc \ $(BUILD_DIR)/ba_data/python/bauiv1lib/settings/__pycache__/graphics.cpython-311.opt-1.pyc \ $(BUILD_DIR)/ba_data/python/bauiv1lib/settings/__pycache__/keyboard.cpython-311.opt-1.pyc \ + $(BUILD_DIR)/ba_data/python/bauiv1lib/settings/__pycache__/moddingtools.cpython-311.opt-1.pyc \ $(BUILD_DIR)/ba_data/python/bauiv1lib/settings/__pycache__/nettesting.cpython-311.opt-1.pyc \ $(BUILD_DIR)/ba_data/python/bauiv1lib/settings/__pycache__/plugins.cpython-311.opt-1.pyc \ $(BUILD_DIR)/ba_data/python/bauiv1lib/settings/__pycache__/pluginsettings.cpython-311.opt-1.pyc \