diff --git a/.efrocachemap b/.efrocachemap index a1fcdb21..7e92d38c 100644 --- a/.efrocachemap +++ b/.efrocachemap @@ -420,7 +420,7 @@ "assets/build/ba_data/audio/zoeOw.ogg": "https://files.ballistica.net/cache/ba1/a9/71/9286d55c45c37877f3267850f90b", "assets/build/ba_data/audio/zoePickup01.ogg": "https://files.ballistica.net/cache/ba1/2f/09/36e691de67eb8f155449a7170861", "assets/build/ba_data/audio/zoeScream01.ogg": "https://files.ballistica.net/cache/ba1/fd/a8/ad50785ce206e8dc3dcc7358b173", - "assets/build/ba_data/data/langdata.json": "https://files.ballistica.net/cache/ba1/77/bb/ada7258b8b7c30c2c99e6f485408", + "assets/build/ba_data/data/langdata.json": "https://files.ballistica.net/cache/ba1/1d/b8/8a6b3aa09cbb1ec005607fb4c70f", "assets/build/ba_data/data/languages/arabic.json": "https://files.ballistica.net/cache/ba1/cc/0c/0c8b20a584f607bec508d48c3ffa", "assets/build/ba_data/data/languages/belarussian.json": "https://files.ballistica.net/cache/ba1/44/ed/5b972fa848cffb73723533c2ccb7", "assets/build/ba_data/data/languages/chinese.json": "https://files.ballistica.net/cache/ba1/69/cc/f8bdd1e83162481c6bf2a78cb5e0", @@ -429,11 +429,11 @@ "assets/build/ba_data/data/languages/czech.json": "https://files.ballistica.net/cache/ba1/ce/de/b0f462205cdf687a875abc6f39bd", "assets/build/ba_data/data/languages/danish.json": "https://files.ballistica.net/cache/ba1/3f/46/e4da3c1d2b0ebf916df55c608b28", "assets/build/ba_data/data/languages/dutch.json": "https://files.ballistica.net/cache/ba1/d1/07/37b7adc3dbec7328d26c5325f212", - "assets/build/ba_data/data/languages/english.json": "https://files.ballistica.net/cache/ba1/3b/0d/eb66b073295cacde00e5d054dbae", + "assets/build/ba_data/data/languages/english.json": "https://files.ballistica.net/cache/ba1/3f/ee/72767c1e922d3f2cf668147ef143", "assets/build/ba_data/data/languages/esperanto.json": "https://files.ballistica.net/cache/ba1/6e/fd/685a4e1da031474d47a1d9eb2731", "assets/build/ba_data/data/languages/french.json": "https://files.ballistica.net/cache/ba1/18/b2/9c1f6e3ca6e18d6a6fdbdb14e224", "assets/build/ba_data/data/languages/german.json": "https://files.ballistica.net/cache/ba1/19/ba/b12493cfaa28d27f9bfee0459e20", - "assets/build/ba_data/data/languages/gibberish.json": "https://files.ballistica.net/cache/ba1/93/31/66df9784a606600b7933bcb8ffa1", + "assets/build/ba_data/data/languages/gibberish.json": "https://files.ballistica.net/cache/ba1/82/9f/bdcff3ac022c125a7232a412568e", "assets/build/ba_data/data/languages/greek.json": "https://files.ballistica.net/cache/ba1/51/31/64479524c0ee990b3e97ffdca068", "assets/build/ba_data/data/languages/hindi.json": "https://files.ballistica.net/cache/ba1/ed/98/37d9457755f7e86e2f2875e3b055", "assets/build/ba_data/data/languages/hungarian.json": "https://files.ballistica.net/cache/ba1/87/2d/027aa239eb66ea8f496562f4fd83", @@ -447,7 +447,7 @@ "assets/build/ba_data/data/languages/russian.json": "https://files.ballistica.net/cache/ba1/38/0e/808588bf5140deae5107b61f1df7", "assets/build/ba_data/data/languages/serbian.json": "https://files.ballistica.net/cache/ba1/05/5b/910b8963f48cd494dc01d5a18a5c", "assets/build/ba_data/data/languages/slovak.json": "https://files.ballistica.net/cache/ba1/b7/0a/fab820b96e7aa587ee56427ecdc2", - "assets/build/ba_data/data/languages/spanish.json": "https://files.ballistica.net/cache/ba1/67/7b/e4c6c03f889b6e1bcf39345fa197", + "assets/build/ba_data/data/languages/spanish.json": "https://files.ballistica.net/cache/ba1/64/f2/0dff1a6c21fb71ba51c9011f1413", "assets/build/ba_data/data/languages/swedish.json": "https://files.ballistica.net/cache/ba1/50/9f/be006ba19be6a69a57837eb6dca0", "assets/build/ba_data/data/languages/turkish.json": "https://files.ballistica.net/cache/ba1/19/fe/c97df315575d999ad2bb63478b5f", "assets/build/ba_data/data/languages/ukrainian.json": "https://files.ballistica.net/cache/ba1/66/b0/e1d71e57673a6fc78e0ea181b76b", diff --git a/.idea/dictionaries/ericf.xml b/.idea/dictionaries/ericf.xml index 7ed9fbec..fd2e442c 100644 --- a/.idea/dictionaries/ericf.xml +++ b/.idea/dictionaries/ericf.xml @@ -1108,6 +1108,7 @@ langs langtarget langval + larmbeast lasthash lastline lastplayer @@ -1912,6 +1913,7 @@ smag smallscale smlh + smoothy smtpd smtplib smush diff --git a/assets/src/ba_data/python/bastd/ui/gather/__init__.py b/assets/src/ba_data/python/bastd/ui/gather/__init__.py index 3d69ce04..8501a6d7 100644 --- a/assets/src/ba_data/python/bastd/ui/gather/__init__.py +++ b/assets/src/ba_data/python/bastd/ui/gather/__init__.py @@ -116,12 +116,12 @@ class GatherWindow(ba.Window): ] if _ba.get_account_misc_read_val('enablePublicParties', True): tabdefs.append((self.TabID.INTERNET, - ba.Lstr(resource=self._r + '.internetText'))) + ba.Lstr(resource=self._r + '.publicText'))) if platform == 'android' and subplatform == 'google': tabdefs.append((self.TabID.GOOGLE_PLAY, ba.Lstr(resource=self._r + '.googlePlayText'))) tabdefs.append((self.TabID.LOCAL_NETWORK, - ba.Lstr(resource=self._r + '.localNetworkText'))) + ba.Lstr(resource=self._r + '.nearbyText'))) tabdefs.append( (self.TabID.MANUAL, ba.Lstr(resource=self._r + '.manualText'))) diff --git a/assets/src/ba_data/python/bastd/ui/gather/manualtab.py b/assets/src/ba_data/python/bastd/ui/gather/manualtab.py index 169f997e..e5de8fac 100644 --- a/assets/src/ba_data/python/bastd/ui/gather/manualtab.py +++ b/assets/src/ba_data/python/bastd/ui/gather/manualtab.py @@ -51,14 +51,14 @@ class _HostLookupThread(threading.Thread): class SubTabType(Enum): """Available sub-tabs.""" - NEW = 'new' - SAVED = 'saved' + JOIN_BY_ADDRESS = 'join_by_address' + FAVORITES = 'favorites' @dataclass class State: """State saved/restored only while the app is running.""" - sub_tab: SubTabType = SubTabType.NEW + sub_tab: SubTabType = SubTabType.JOIN_BY_ADDRESS class ManualGatherTab(GatherTab): @@ -69,26 +69,26 @@ class ManualGatherTab(GatherTab): self._check_button: Optional[ba.Widget] = None self._doing_access_check: Optional[bool] = None self._access_check_count: Optional[int] = None - self._sub_tab: SubTabType = SubTabType.NEW + self._sub_tab: SubTabType = SubTabType.JOIN_BY_ADDRESS self._t_addr: Optional[ba.Widget] = None self._t_accessible: Optional[ba.Widget] = None self._t_accessible_extra: Optional[ba.Widget] = None self._access_check_timer: Optional[ba.Timer] = None self._checking_state_text: Optional[ba.Widget] = None self._container: Optional[ba.Widget] = None - self._join_new_party_text: Optional[ba.Widget] = None - self._join_saved_party_text: Optional[ba.Widget] = None + self._join_by_address_text: Optional[ba.Widget] = None + self._favorites_text: Optional[ba.Widget] = None self._width: Optional[int] = None self._height: Optional[int] = None self._scroll_width: Optional[int] = None self._scroll_height: Optional[int] = None - self._my_parties_scroll_width: Optional[int] = None - self._my_saved_party_connect_button: Optional[ba.Widget] = None + self._favorites_scroll_width: Optional[int] = None + self._favorites_connect_button: Optional[ba.Widget] = None self._scrollwidget: Optional[ba.Widget] = None self._columnwidget: Optional[ba.Widget] = None - self._my_saved_party_selected: Optional[str] = None - self._my_saved_party_rename_window: Optional[ba.Widget] = None - self._my_party_rename_text: Optional[ba.Widget] = None + self._favorite_selected: Optional[str] = None + self._favorite_rename_window: Optional[ba.Widget] = None + self._party_rename_text: Optional[ba.Widget] = None def on_activate( self, @@ -111,51 +111,51 @@ class ManualGatherTab(GatherTab): background=False, selection_loops_to_parent=True) v = c_height - 30 - self._join_new_party_text = ba.textwidget( + self._join_by_address_text = ba.textwidget( parent=self._container, position=(c_width * 0.5 - 245, v - 13), color=(0.6, 1.0, 0.6), scale=1.3, size=(200, 30), maxwidth=250, - h_align='left', + h_align='center', v_align='center', click_activate=True, selectable=True, autoselect=True, on_activate_call=lambda: self._set_sub_tab( - SubTabType.NEW, + SubTabType.JOIN_BY_ADDRESS, region_width, region_height, playsound=True, ), - text='Join By Address') - self._join_saved_party_text = ba.textwidget( + text=ba.Lstr(resource='gatherWindow.manualJoinSectionText')) + self._favorites_text = ba.textwidget( parent=self._container, position=(c_width * 0.5 + 45, v - 13), color=(0.6, 1.0, 0.6), scale=1.3, size=(200, 30), maxwidth=250, - h_align='left', + h_align='center', v_align='center', click_activate=True, selectable=True, autoselect=True, on_activate_call=lambda: self._set_sub_tab( - SubTabType.SAVED, + SubTabType.FAVORITES, region_width, region_height, playsound=True, ), - text='Join Saved Party') - ba.widget(edit=self._join_new_party_text, up_widget=tab_button) - ba.widget(edit=self._join_saved_party_text, - left_widget=self._join_new_party_text, + text=ba.Lstr(resource='gatherWindow.favoritesText')) + ba.widget(edit=self._join_by_address_text, up_widget=tab_button) + ba.widget(edit=self._favorites_text, + left_widget=self._join_by_address_text, up_widget=tab_button) - ba.widget(edit=tab_button, down_widget=self._join_saved_party_text) - ba.widget(edit=self._join_new_party_text, - right_widget=self._join_saved_party_text) + ba.widget(edit=tab_button, down_widget=self._favorites_text) + ba.widget(edit=self._join_by_address_text, + right_widget=self._favorites_text) self._set_sub_tab(self._sub_tab, region_width, region_height) return self._container @@ -183,29 +183,29 @@ class ManualGatherTab(GatherTab): self._sub_tab = value active_color = (0.6, 1.0, 0.6) inactive_color = (0.5, 0.4, 0.5) - ba.textwidget( - edit=self._join_new_party_text, - color=active_color if value is SubTabType.NEW else inactive_color) - ba.textwidget(edit=self._join_saved_party_text, + ba.textwidget(edit=self._join_by_address_text, + color=active_color if value is SubTabType.JOIN_BY_ADDRESS + else inactive_color) + ba.textwidget(edit=self._favorites_text, color=active_color - if value is SubTabType.SAVED else inactive_color) + if value is SubTabType.FAVORITES else inactive_color) # Clear anything existing in the old sub-tab. for widget in self._container.get_children(): if widget and widget not in { - self._join_saved_party_text, self._join_new_party_text + self._favorites_text, self._join_by_address_text }: widget.delete() - if value is SubTabType.NEW: - self._build_new_party_tab(region_width, region_height) + if value is SubTabType.JOIN_BY_ADDRESS: + self._build_join_by_address_tab(region_width, region_height) - if value is SubTabType.SAVED: - self._build_saved_party_tab(region_height) + if value is SubTabType.FAVORITES: + self._build_favorites_tab(region_height) # The old manual tab - def _build_new_party_tab(self, region_width: float, - region_height: float) -> None: + def _build_join_by_address_tab(self, region_width: float, + region_height: float) -> None: c_width = region_width c_height = region_height - 20 last_addr = ba.app.config.get('Last Manual Party Connect Address', '') @@ -231,8 +231,8 @@ class ManualGatherTab(GatherTab): v_align='center', scale=1.0, size=(420, 60)) - ba.widget(edit=self._join_new_party_text, down_widget=txt) - ba.widget(edit=self._join_saved_party_text, down_widget=txt) + ba.widget(edit=self._join_by_address_text, down_widget=txt) + ba.widget(edit=self._favorites_text, down_widget=txt) ba.textwidget(parent=self._container, position=(c_width * 0.5 - 260 + 490, v), color=(0.6, 1.0, 0.6), @@ -268,7 +268,7 @@ class ManualGatherTab(GatherTab): savebutton = ba.buttonwidget( parent=self._container, size=(300, 70), - label='Save', + label=ba.Lstr(resource='gatherWindow.favoritesSaveText'), position=(c_width * 0.5 - 240 + 490 - 200, v), autoselect=True, on_activate_call=ba.Call(self._save_server, txt, txt2)) @@ -295,8 +295,8 @@ class ManualGatherTab(GatherTab): self._container, c_width)) ba.widget(edit=self._check_button, up_widget=btn) - # Tab containing saved parties - def _build_saved_party_tab(self, region_height: float) -> None: + # Tab containing saved favorite addresses + def _build_favorites_tab(self, region_height: float) -> None: c_height = region_height - 20 v = c_height - 35 - 25 - 30 @@ -313,7 +313,7 @@ class ManualGatherTab(GatherTab): c_height = self._scroll_height - 20 sub_scroll_height = c_height - 63 - self._my_parties_scroll_width = sub_scroll_width = ( + self._favorites_scroll_width = sub_scroll_width = ( 680 if uiscale is ba.UIScale.SMALL else 640) v = c_height - 30 @@ -328,16 +328,16 @@ class ManualGatherTab(GatherTab): 45 if uiscale is ba.UIScale.MEDIUM else 40) - b_height) - self._my_saved_party_connect_button = btn1 = ba.buttonwidget( + self._favorites_connect_button = btn1 = ba.buttonwidget( parent=self._container, size=(b_width, b_height), position=(40 if uiscale is ba.UIScale.SMALL else 40, btnv), button_type='square', color=(0.6, 0.53, 0.63), textcolor=(0.75, 0.7, 0.8), - on_activate_call=self._on_my_saved_party_press, + on_activate_call=self._on_favorites_connect_press, text_scale=1.0 if uiscale is ba.UIScale.SMALL else 1.2, - label='Connect', + label=ba.Lstr(resource='gatherWindow.manualConnectText'), autoselect=True) if uiscale is ba.UIScale.SMALL and ba.app.ui.use_toolbars: ba.widget(edit=btn1, @@ -350,9 +350,9 @@ class ManualGatherTab(GatherTab): button_type='square', color=(0.6, 0.53, 0.63), textcolor=(0.75, 0.7, 0.8), - on_activate_call=self._on_my_saved_party_rename_press, + on_activate_call=self._on_favorites_rename_press, text_scale=1.0 if uiscale is ba.UIScale.SMALL else 1.2, - label='Rename', + label=ba.Lstr(resource='renameText'), autoselect=True) btnv -= b_height + b_space_extra ba.buttonwidget(parent=self._container, @@ -362,9 +362,9 @@ class ManualGatherTab(GatherTab): button_type='square', color=(0.6, 0.53, 0.63), textcolor=(0.75, 0.7, 0.8), - on_activate_call=self._on_my_saved_party_delete_press, + on_activate_call=self._on_favorite_delete_press, text_scale=1.0 if uiscale is ba.UIScale.SMALL else 1.2, - label='Delete', + label=ba.Lstr(resource='deleteText'), autoselect=True) v -= sub_scroll_height + 23 @@ -373,44 +373,42 @@ class ManualGatherTab(GatherTab): position=(190 if uiscale is ba.UIScale.SMALL else 225, v), size=(sub_scroll_width, sub_scroll_height), claims_left_right=True) - ba.widget(edit=self._my_saved_party_connect_button, + ba.widget(edit=self._favorites_connect_button, right_widget=self._scrollwidget) - ba.containerwidget(edit=self._container, selected_child=scrlw) self._columnwidget = ba.columnwidget(parent=scrlw, left_border=10, border=2, margin=0, claims_left_right=True) - self._my_saved_party_selected = None - self._refresh_my_saved_parties() + self._favorite_selected = None + self._refresh_favorites() - def _no_saved_party_selected_error(self) -> None: + def _no_favorite_selected_error(self) -> None: ba.screenmessage(ba.Lstr(resource='nothingIsSelectedErrorText'), color=(1, 0, 0)) ba.playsound(ba.getsound('error')) - def _on_my_saved_party_press(self) -> None: - if self._my_saved_party_selected is None: - self._no_saved_party_selected_error() + def _on_favorites_connect_press(self) -> None: + if self._favorite_selected is None: + self._no_favorite_selected_error() else: - config = ba.app.config['Saved Servers'][ - self._my_saved_party_selected] + config = ba.app.config['Saved Servers'][self._favorite_selected] _HostLookupThread(name=config['addr'], port=config['port'], call=ba.WeakCall( self._host_lookup_result)).start() - def _on_my_saved_party_rename_press(self) -> None: - if self._my_saved_party_selected is None: - self._no_saved_party_selected_error() + def _on_favorites_rename_press(self) -> None: + if self._favorite_selected is None: + self._no_favorite_selected_error() return c_width = 600 c_height = 250 uiscale = ba.app.ui.uiscale - self._my_saved_party_rename_window = cnt = ba.containerwidget( + self._favorite_rename_window = cnt = ba.containerwidget( scale=(1.8 if uiscale is ba.UIScale.SMALL else 1.55 if uiscale is ba.UIScale.MEDIUM else 1.0), size=(c_width, c_height), @@ -423,13 +421,13 @@ class ManualGatherTab(GatherTab): text='Enter Name of Party', maxwidth=c_width * 0.8, position=(c_width * 0.5, c_height - 60)) - self._my_party_rename_text = txt = ba.textwidget( + self._party_rename_text = txt = ba.textwidget( parent=cnt, size=(c_width * 0.8, 40), h_align='left', v_align='center', text=ba.app.config['Saved Servers'][ - self._my_saved_party_selected]['name'], + self._favorite_selected]['name'], editable=True, description='Server name text', position=(c_width * 0.1, c_height - 140), @@ -459,49 +457,47 @@ class ManualGatherTab(GatherTab): def _rename_saved_party(self) -> None: - server = self._my_saved_party_selected - if self._my_saved_party_selected is None: - self._no_saved_party_selected_error() + server = self._favorite_selected + if self._favorite_selected is None: + self._no_favorite_selected_error() return - if not self._my_party_rename_text: + if not self._party_rename_text: return - new_name_raw = cast(str, - ba.textwidget(query=self._my_party_rename_text)) + new_name_raw = cast(str, ba.textwidget(query=self._party_rename_text)) ba.app.config['Saved Servers'][server]['name'] = new_name_raw ba.app.config.commit() - ba.screenmessage('Renamed Successfully', color=(0, 1, 0)) ba.playsound(ba.getsound('gunCocking')) - self._refresh_my_saved_parties() + self._refresh_favorites() - ba.containerwidget(edit=self._my_saved_party_rename_window, + ba.containerwidget(edit=self._favorite_rename_window, transition='out_scale') - def _on_my_saved_party_delete_press(self) -> None: + def _on_favorite_delete_press(self) -> None: from bastd.ui import confirm - if self._my_saved_party_selected is None: - self._no_saved_party_selected_error() + if self._favorite_selected is None: + self._no_favorite_selected_error() return confirm.ConfirmWindow( ba.Lstr(resource='gameListWindow.deleteConfirmText', subs=[('${LIST}', ba.app.config['Saved Servers'][ - self._my_saved_party_selected]['name'])]), + self._favorite_selected]['name'])]), self._delete_saved_party, 450, 150) def _delete_saved_party(self) -> None: - if self._my_saved_party_selected is None: - self._no_saved_party_selected_error() + if self._favorite_selected is None: + self._no_favorite_selected_error() return config = ba.app.config['Saved Servers'] - del config[self._my_saved_party_selected] - self._my_saved_party_selected = None + del config[self._favorite_selected] + self._favorite_selected = None ba.app.config.commit() ba.playsound(ba.getsound('shieldDown')) - self._refresh_my_saved_parties() + self._refresh_favorites() - def _on_my_saved_party_select(self, server: str) -> None: - self._my_saved_party_selected = server + def _on_favorite_select(self, server: str) -> None: + self._favorite_selected = server - def _refresh_my_saved_parties(self) -> None: + def _refresh_favorites(self) -> None: assert self._columnwidget is not None for child in self._columnwidget.get_children(): child.delete() @@ -514,17 +510,17 @@ class ManualGatherTab(GatherTab): else: servers = [] - assert self._my_parties_scroll_width is not None - assert self._my_saved_party_connect_button is not None + assert self._favorites_scroll_width is not None + assert self._favorites_connect_button is not None for i, server in enumerate(servers): txt = ba.textwidget( parent=self._columnwidget, - size=(self._my_parties_scroll_width / t_scale, 30), + size=(self._favorites_scroll_width / t_scale, 30), selectable=True, color=(1.0, 1, 0.4), always_highlight=True, - on_select_call=ba.Call(self._on_my_saved_party_select, server), - on_activate_call=self._my_saved_party_connect_button.activate, + on_select_call=ba.Call(self._on_favorite_select, server), + on_activate_call=self._favorites_connect_button.activate, text=(config['Saved Servers'][server]['name'] if config['Saved Servers'][server]['name'] != '' else config['Saved Servers'][server]['addr'] + ' ' + @@ -532,16 +528,20 @@ class ManualGatherTab(GatherTab): h_align='left', v_align='center', corner_scale=t_scale, - maxwidth=(self._my_parties_scroll_width / t_scale) * 0.93) + maxwidth=(self._favorites_scroll_width / t_scale) * 0.93) if i == 0: - ba.widget(edit=txt, up_widget=self._join_saved_party_text) + ba.widget(edit=txt, up_widget=self._favorites_text) ba.widget(edit=txt, - left_widget=self._my_saved_party_connect_button, + left_widget=self._favorites_connect_button, right_widget=txt) # If there's no servers, allow selecting out of the scroll area ba.containerwidget(edit=self._scrollwidget, - claims_left_right=bool(servers)) + claims_left_right=bool(servers), + claims_up_down=bool(servers)) + ba.widget(edit=self._scrollwidget, + up_widget=self._favorites_text, + left_widget=self._favorites_connect_button) def on_deactivate(self) -> None: self._access_check_timer = None @@ -598,7 +598,6 @@ class ManualGatherTab(GatherTab): 'name': addr } config.commit() - ba.screenmessage('Saved Successfully', color=(0, 1, 0)) ba.playsound(ba.getsound('gunCocking')) else: ba.screenmessage('Invalid Address', color=(1, 0, 0)) diff --git a/ballisticacore-cmake/.idea/dictionaries/ericf.xml b/ballisticacore-cmake/.idea/dictionaries/ericf.xml index 2a22a0bf..e0e5dd97 100644 --- a/ballisticacore-cmake/.idea/dictionaries/ericf.xml +++ b/ballisticacore-cmake/.idea/dictionaries/ericf.xml @@ -477,6 +477,7 @@ kxyz lantinga largeish + larmbeast lasti lastline lastvalid @@ -802,6 +803,7 @@ sixteenbits smoothering smoothstep + smoothy sndio snorm sockaddr