mirror of
https://github.com/bombsquad-community/plugin-manager.git
synced 2025-10-08 14:54:36 +00:00
updated character chooser , easy connect
This commit is contained in:
parent
018c962743
commit
eb205fe7b1
3 changed files with 314 additions and 295 deletions
|
|
@ -335,6 +335,7 @@
|
|||
}
|
||||
],
|
||||
"versions": {
|
||||
"2.0.0":null,
|
||||
"1.2.1": {
|
||||
"api_version": 7,
|
||||
"commit_sha": "64e8a5c",
|
||||
|
|
@ -436,6 +437,7 @@
|
|||
}
|
||||
],
|
||||
"versions": {
|
||||
"2.0.0": null,
|
||||
"1.0.0": {
|
||||
"api_version": 7,
|
||||
"commit_sha": "ff4de19",
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# ba_meta require api 7
|
||||
# ba_meta require api 8
|
||||
|
||||
'''
|
||||
Character Chooser by Mr.Smoothy
|
||||
|
|
@ -34,41 +34,42 @@ from __future__ import annotations
|
|||
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
import ba
|
||||
import _ba
|
||||
from bastd.actor.playerspaz import PlayerSpaz
|
||||
import babase
|
||||
import bauiv1 as bui
|
||||
import bascenev1 as bs
|
||||
import _babase
|
||||
from bascenev1lib.actor.playerspaz import PlayerSpaz
|
||||
|
||||
|
||||
from ba._error import print_exception, print_error, NotFoundError
|
||||
from ba._gameutils import animate, animate_array
|
||||
from ba._language import Lstr
|
||||
from ba._generated.enums import SpecialChar, InputType
|
||||
from ba._profile import get_player_profile_colors
|
||||
from babase._error import print_exception, print_error, NotFoundError
|
||||
|
||||
from babase._language import Lstr
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Any, Type, List, Dict, Tuple, Union, Sequence, Optional
|
||||
import weakref
|
||||
import os
|
||||
import json
|
||||
from ba import _lobby
|
||||
from bastd.actor.spazappearance import *
|
||||
from ba._lobby import ChangeMessage
|
||||
from ba._lobby import PlayerReadyMessage
|
||||
from bascenev1._lobby import ChangeMessage, PlayerReadyMessage
|
||||
from bascenev1 import _lobby
|
||||
from bascenev1lib.actor.spazappearance import *
|
||||
|
||||
|
||||
def __init__(self, vpos: float, sessionplayer: _ba.SessionPlayer,
|
||||
|
||||
def __init__(self, vpos: float, sessionplayer: bs.SessionPlayer,
|
||||
lobby: 'Lobby') -> None:
|
||||
self._deek_sound = _ba.getsound('deek')
|
||||
self._click_sound = _ba.getsound('click01')
|
||||
self._punchsound = _ba.getsound('punch01')
|
||||
self._swish_sound = _ba.getsound('punchSwish')
|
||||
self._errorsound = _ba.getsound('error')
|
||||
self._mask_texture = _ba.gettexture('characterIconMask')
|
||||
self._deek_sound = bs.getsound('deek')
|
||||
self._click_sound = bs.getsound('click01')
|
||||
self._punchsound = bs.getsound('punch01')
|
||||
self._swish_sound = bs.getsound('punchSwish')
|
||||
self._errorsound = bs.getsound('error')
|
||||
self._mask_texture = bs.gettexture('characterIconMask')
|
||||
self._vpos = vpos
|
||||
self._lobby = weakref.ref(lobby)
|
||||
self._sessionplayer = sessionplayer
|
||||
self._inited = False
|
||||
self._dead = False
|
||||
self._text_node: Optional[ba.Node] = None
|
||||
self._text_node: Optional[bs.Node] = None
|
||||
self._profilename = ''
|
||||
self._profilenames: List[str] = []
|
||||
self._ready: bool = False
|
||||
|
|
@ -76,7 +77,7 @@ def __init__(self, vpos: float, sessionplayer: _ba.SessionPlayer,
|
|||
self._last_change: Sequence[Union[float, int]] = (0, 0)
|
||||
self._profiles: Dict[str, Dict[str, Any]] = {}
|
||||
|
||||
app = _ba.app
|
||||
app = babase.app
|
||||
|
||||
self.bakwas_chars = ["Lee", "Todd McBurton", "Zola", "Butch", "Witch", "warrior",
|
||||
"Middle-Man", "Alien", "OldLady", "Gladiator", "Wrestler", "Gretel", "Robot"]
|
||||
|
|
@ -84,7 +85,7 @@ def __init__(self, vpos: float, sessionplayer: _ba.SessionPlayer,
|
|||
# Load available player profiles either from the local config or
|
||||
# from the remote device.
|
||||
self.reload_profiles()
|
||||
for name in _ba.app.spaz_appearances:
|
||||
for name in bs.app.classic.spaz_appearances:
|
||||
if name not in self._character_names and name not in self.bakwas_chars:
|
||||
self._character_names.append(name)
|
||||
# Note: this is just our local index out of available teams; *not*
|
||||
|
|
@ -96,12 +97,12 @@ def __init__(self, vpos: float, sessionplayer: _ba.SessionPlayer,
|
|||
# it. This will give a persistent character for them between games
|
||||
# and will distribute characters nicely if everyone is random.
|
||||
self._random_color, self._random_highlight = (
|
||||
get_player_profile_colors(None))
|
||||
bs.get_player_profile_colors(None))
|
||||
|
||||
# To calc our random character we pick a random one out of our
|
||||
# unlocked list and then locate that character's index in the full
|
||||
# list.
|
||||
char_index_offset = app.lobby_random_char_index_offset
|
||||
char_index_offset = app.classic.lobby_random_char_index_offset
|
||||
self._random_character_index = (
|
||||
(sessionplayer.inputdevice.id + char_index_offset) %
|
||||
len(self._character_names))
|
||||
|
|
@ -111,7 +112,7 @@ def __init__(self, vpos: float, sessionplayer: _ba.SessionPlayer,
|
|||
self._profileindex = self._select_initial_profile()
|
||||
self._profilename = self._profilenames[self._profileindex]
|
||||
|
||||
self._text_node = _ba.newnode('text',
|
||||
self._text_node = bs.newnode('text',
|
||||
delegate=self,
|
||||
attrs={
|
||||
'position': (-100, self._vpos),
|
||||
|
|
@ -122,8 +123,8 @@ def __init__(self, vpos: float, sessionplayer: _ba.SessionPlayer,
|
|||
'v_align': 'center',
|
||||
'v_attach': 'top'
|
||||
})
|
||||
animate(self._text_node, 'scale', {0: 0, 0.1: 1.0})
|
||||
self.icon = _ba.newnode('image',
|
||||
bs.animate(self._text_node, 'scale', {0: 0, 0.1: 1.0})
|
||||
self.icon = bs.newnode('image',
|
||||
owner=self._text_node,
|
||||
attrs={
|
||||
'position': (-130, self._vpos + 20),
|
||||
|
|
@ -132,7 +133,7 @@ def __init__(self, vpos: float, sessionplayer: _ba.SessionPlayer,
|
|||
'attach': 'topCenter'
|
||||
})
|
||||
|
||||
animate_array(self.icon, 'scale', 2, {0: (0, 0), 0.1: (45, 45)})
|
||||
bs.animate_array(self.icon, 'scale', 2, {0: (0, 0), 0.1: (45, 45)})
|
||||
|
||||
# Set our initial name to '<choosing player>' in case anyone asks.
|
||||
self._sessionplayer.setname(
|
||||
|
|
@ -154,39 +155,39 @@ def __init__(self, vpos: float, sessionplayer: _ba.SessionPlayer,
|
|||
def _set_ready(self, ready: bool) -> None:
|
||||
|
||||
# pylint: disable=cyclic-import
|
||||
from bastd.ui.profile import browser as pbrowser
|
||||
from ba._general import Call
|
||||
from bauiv1lib.profile import browser as pbrowser
|
||||
from babase._general import Call
|
||||
profilename = self._profilenames[self._profileindex]
|
||||
|
||||
# Handle '_edit' as a special case.
|
||||
if profilename == '_edit' and ready:
|
||||
with _ba.Context('ui'):
|
||||
with _babase.Context('ui'):
|
||||
pbrowser.ProfileBrowserWindow(in_main_menu=False)
|
||||
|
||||
# Give their input-device UI ownership too
|
||||
# (prevent someone else from snatching it in crowded games)
|
||||
_ba.set_ui_input_device(self._sessionplayer.inputdevice)
|
||||
_babase.set_ui_input_device(self._sessionplayer.inputdevice)
|
||||
return
|
||||
|
||||
if ready == False:
|
||||
self._sessionplayer.assigninput(
|
||||
InputType.LEFT_PRESS,
|
||||
babase.InputType.LEFT_PRESS,
|
||||
Call(self.handlemessage, ChangeMessage('team', -1)))
|
||||
self._sessionplayer.assigninput(
|
||||
InputType.RIGHT_PRESS,
|
||||
babase.InputType.RIGHT_PRESS,
|
||||
Call(self.handlemessage, ChangeMessage('team', 1)))
|
||||
self._sessionplayer.assigninput(
|
||||
InputType.BOMB_PRESS,
|
||||
babase.InputType.BOMB_PRESS,
|
||||
Call(self.handlemessage, ChangeMessage('character', 1)))
|
||||
self._sessionplayer.assigninput(
|
||||
InputType.UP_PRESS,
|
||||
babase.InputType.UP_PRESS,
|
||||
Call(self.handlemessage, ChangeMessage('profileindex', -1)))
|
||||
self._sessionplayer.assigninput(
|
||||
InputType.DOWN_PRESS,
|
||||
babase.InputType.DOWN_PRESS,
|
||||
Call(self.handlemessage, ChangeMessage('profileindex', 1)))
|
||||
self._sessionplayer.assigninput(
|
||||
(InputType.JUMP_PRESS, InputType.PICK_UP_PRESS,
|
||||
InputType.PUNCH_PRESS),
|
||||
(babase.InputType.JUMP_PRESS, babase.InputType.PICK_UP_PRESS,
|
||||
babase.InputType.PUNCH_PRESS),
|
||||
Call(self.handlemessage, ChangeMessage('ready', 1)))
|
||||
self._ready = False
|
||||
self._update_text()
|
||||
|
|
@ -194,26 +195,26 @@ def _set_ready(self, ready: bool) -> None:
|
|||
elif ready == True:
|
||||
self.characterchooser = True
|
||||
self._sessionplayer.assigninput(
|
||||
(InputType.LEFT_PRESS, InputType.RIGHT_PRESS,
|
||||
InputType.UP_PRESS, InputType.DOWN_PRESS,
|
||||
InputType.JUMP_PRESS, InputType.BOMB_PRESS,
|
||||
InputType.PICK_UP_PRESS), self._do_nothing)
|
||||
(babase.InputType.LEFT_PRESS, babase.InputType.RIGHT_PRESS,
|
||||
babase.InputType.UP_PRESS, babase.InputType.DOWN_PRESS,
|
||||
babase.InputType.JUMP_PRESS, babase.InputType.BOMB_PRESS,
|
||||
babase.InputType.PICK_UP_PRESS), self._do_nothing)
|
||||
self._sessionplayer.assigninput(
|
||||
(InputType.UP_PRESS), Call(self.handlemessage, ChangeMessage('characterchooser', -1)))
|
||||
(babase.InputType.UP_PRESS), Call(self.handlemessage, ChangeMessage('characterchooser', -1)))
|
||||
self._sessionplayer.assigninput(
|
||||
(InputType.DOWN_PRESS), Call(self.handlemessage, ChangeMessage('characterchooser', 1)))
|
||||
(babase.InputType.DOWN_PRESS), Call(self.handlemessage, ChangeMessage('characterchooser', 1)))
|
||||
self._sessionplayer.assigninput(
|
||||
(InputType.BOMB_PRESS), Call(self.handlemessage, ChangeMessage('ready', 0)))
|
||||
(babase.InputType.BOMB_PRESS), Call(self.handlemessage, ChangeMessage('ready', 0)))
|
||||
|
||||
self._sessionplayer.assigninput(
|
||||
(InputType.JUMP_PRESS, InputType.PICK_UP_PRESS, InputType.PUNCH_PRESS),
|
||||
(babase.InputType.JUMP_PRESS, babase.InputType.PICK_UP_PRESS, babase.InputType.PUNCH_PRESS),
|
||||
Call(self.handlemessage, ChangeMessage('ready', 2)))
|
||||
|
||||
# Store the last profile picked by this input for reuse.
|
||||
input_device = self._sessionplayer.inputdevice
|
||||
name = input_device.name
|
||||
unique_id = input_device.unique_identifier
|
||||
device_profiles = _ba.app.config.setdefault(
|
||||
device_profiles = _babase.app.config.setdefault(
|
||||
'Default Player Profiles', {})
|
||||
|
||||
# Make an exception if we have no custom profiles and are set
|
||||
|
|
@ -229,7 +230,7 @@ def _set_ready(self, ready: bool) -> None:
|
|||
del device_profiles[profilekey]
|
||||
else:
|
||||
device_profiles[profilekey] = profilename
|
||||
_ba.app.config.commit()
|
||||
_babase.app.config.commit()
|
||||
|
||||
# Set this player's short and full name.
|
||||
self._sessionplayer.setname(self._getname(),
|
||||
|
|
@ -240,7 +241,7 @@ def _set_ready(self, ready: bool) -> None:
|
|||
else:
|
||||
|
||||
# Inform the session that this player is ready.
|
||||
_ba.getsession().handlemessage(PlayerReadyMessage(self))
|
||||
bs.getsession().handlemessage(PlayerReadyMessage(self))
|
||||
|
||||
|
||||
def handlemessage(self, msg: Any) -> Any:
|
||||
|
|
@ -258,7 +259,7 @@ def handlemessage(self, msg: Any) -> Any:
|
|||
print_error('got ChangeMessage after nodes died')
|
||||
return
|
||||
if msg.what == 'characterchooser':
|
||||
_ba.playsound(self._click_sound)
|
||||
self._click_sound.play()
|
||||
# update our index in our local list of characters
|
||||
self._character_index = ((self._character_index + msg.value) %
|
||||
len(self._character_names))
|
||||
|
|
@ -268,7 +269,7 @@ def handlemessage(self, msg: Any) -> Any:
|
|||
if msg.what == 'team':
|
||||
sessionteams = self.lobby.sessionteams
|
||||
if len(sessionteams) > 1:
|
||||
_ba.playsound(self._swish_sound)
|
||||
self._swish_sound.play()
|
||||
self._selected_team_index = (
|
||||
(self._selected_team_index + msg.value) %
|
||||
len(sessionteams))
|
||||
|
|
@ -281,18 +282,18 @@ def handlemessage(self, msg: Any) -> Any:
|
|||
|
||||
# This should be pretty hard to hit now with
|
||||
# automatic local accounts.
|
||||
_ba.playsound(_ba.getsound('error'))
|
||||
bui.getsound('error').play()
|
||||
else:
|
||||
|
||||
# Pick the next player profile and assign our name
|
||||
# and character based on that.
|
||||
_ba.playsound(self._deek_sound)
|
||||
self._deek_sound.play()
|
||||
self._profileindex = ((self._profileindex + msg.value) %
|
||||
len(self._profilenames))
|
||||
self.update_from_profile()
|
||||
|
||||
elif msg.what == 'character':
|
||||
_ba.playsound(self._click_sound)
|
||||
self._click_sound.play()
|
||||
self.characterchooser = True
|
||||
# update our index in our local list of characters
|
||||
self._character_index = ((self._character_index + msg.value) %
|
||||
|
|
@ -327,9 +328,9 @@ def _update_text(self) -> None:
|
|||
can_switch_teams = len(self.lobby.sessionteams) > 1
|
||||
|
||||
# Flash as we're coming in.
|
||||
fin_color = _ba.safecolor(self.get_color()) + (1, )
|
||||
fin_color = _babase.safecolor(self.get_color()) + (1, )
|
||||
if not self._inited:
|
||||
animate_array(self._text_node, 'color', 4, {
|
||||
bs.animate_array(self._text_node, 'color', 4, {
|
||||
0.15: fin_color,
|
||||
0.25: (2, 2, 2, 1),
|
||||
0.35: fin_color
|
||||
|
|
@ -338,7 +339,7 @@ def _update_text(self) -> None:
|
|||
|
||||
# Blend if we're in teams mode; switch instantly otherwise.
|
||||
if can_switch_teams:
|
||||
animate_array(self._text_node, 'color', 4, {
|
||||
bs.animate_array(self._text_node, 'color', 4, {
|
||||
0: self._text_node.color,
|
||||
0.1: fin_color
|
||||
})
|
||||
|
|
@ -350,7 +351,7 @@ def _update_text(self) -> None:
|
|||
# ba_meta export plugin
|
||||
|
||||
|
||||
class HeySmoothy(ba.Plugin):
|
||||
class HeySmoothy(babase.Plugin):
|
||||
|
||||
def __init__(self):
|
||||
_lobby.Chooser.__init__ = __init__
|
||||
|
|
|
|||
|
|
@ -1,50 +1,48 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# ba_meta require api 7
|
||||
|
||||
# ===============================================
|
||||
# EasyConnect by Mr.Smoothy |
|
||||
# verion 1.2 |
|
||||
# https://discord.gg/ucyaesh |
|
||||
# Serverconnector X IPPORTRevealer |
|
||||
# for bombsquad v1.7 + |
|
||||
# ===============================================
|
||||
# ba_meta require api 8
|
||||
|
||||
''' ===========================================
|
||||
EasyConnect by Mr.Smoothy |
|
||||
verion 1.7 |
|
||||
https://discord.gg/ucyaesh |
|
||||
Serverconnector X IPPORTRevealer |
|
||||
for bombsquad v1.7.20+ |
|
||||
==============================================
|
||||
'''
|
||||
|
||||
# .................___________________________________________
|
||||
# WATCH IN ACTION https://www.youtube.com/watch?v=jwi2wKwZblQ
|
||||
# .................___________________________________________
|
||||
|
||||
# Have any idea/suggestion/bug report > send message on discord mr.smoothy#5824
|
||||
|
||||
# Download modshttps://bombsquad-community.web.app/mods
|
||||
# Discord:-
|
||||
# mr.smoothy#5824
|
||||
|
||||
|
||||
# DONT EDIT ANYTHING WITHOUT PERMISSION
|
||||
|
||||
# join Bombspot - bombsquad biggest modding community .... open for everyone https://discord.gg/2RKd9QQdQY
|
||||
# join Bombsquad Consultancy Service - for more mods, modding help ------- for all modders and server owners
|
||||
# join Bombsquad Community Server -
|
||||
|
||||
# https://discord.gg/2RKd9QQdQY
|
||||
# https://discord.gg/ucyaesh
|
||||
|
||||
# REQUIREMENTS
|
||||
# built for bs 1.7 and above
|
||||
# built for bs 1.7.20 and above
|
||||
|
||||
# by Mr.Smoothy for Bombsquad version 1.7
|
||||
# by Mr.Smoothy for Bombsquad version 1.7.20+
|
||||
|
||||
import _ba
|
||||
import ba
|
||||
import bastd
|
||||
import _babase
|
||||
import babase
|
||||
import bauiv1 as bui
|
||||
import bascenev1 as bs
|
||||
import threading
|
||||
from bastd.ui.gather import manualtab, publictab
|
||||
from bastd.ui import popup
|
||||
from bauiv1lib.gather import manualtab, publictab
|
||||
from bauiv1lib import popup
|
||||
from dataclasses import dataclass
|
||||
import random
|
||||
from enum import Enum
|
||||
from bastd.ui.popup import PopupMenuWindow, PopupWindow
|
||||
from typing import Any, Optional, Dict, List, Tuple, Type, Union, Callable
|
||||
from bastd.ui.gather.publictab import PublicGatherTab
|
||||
from bauiv1lib.popup import PopupMenuWindow, PopupWindow
|
||||
from typing import Any, Optional, Callable
|
||||
from bauiv1lib.gather.publictab import PublicGatherTab
|
||||
import json
|
||||
import urllib.request
|
||||
import time
|
||||
|
|
@ -61,7 +59,7 @@ Report such case on community discord channels
|
|||
https://discord.gg/ucyaesh
|
||||
https://ballistica.net/discord
|
||||
"""
|
||||
BCSURL = 'https://bcsserver.bombsquad.ga/bannedservers'
|
||||
BCSURL = 'https://bcs.ballistica.workers.dev/bannedservers'
|
||||
|
||||
|
||||
def is_game_version_lower_than(version):
|
||||
|
|
@ -70,24 +68,21 @@ def is_game_version_lower_than(version):
|
|||
version is lower than the passed version. Useful for addressing
|
||||
any breaking changes within game versions.
|
||||
"""
|
||||
game_version = tuple(map(int, ba.app.version.split(".")))
|
||||
game_version = tuple(map(int, babase.app.version.split(".")))
|
||||
version = tuple(map(int, version.split(".")))
|
||||
return game_version < version
|
||||
|
||||
|
||||
if is_game_version_lower_than("1.7.7"):
|
||||
ba_internal = _ba
|
||||
else:
|
||||
ba_internal = ba.internal
|
||||
|
||||
|
||||
def updateBannedServersCache():
|
||||
response = None
|
||||
config = ba.app.config
|
||||
config = babase.app.config
|
||||
if not isinstance(config.get('Banned Servers'), list):
|
||||
config['Banned Servers'] = []
|
||||
try:
|
||||
response = urllib.request.urlopen(BCSURL).read()
|
||||
req = urllib.request.Request(BCSURL, headers={
|
||||
"User-Agent": f'BS{_babase.env().get("build_number", 0)}', "Accept-Language": "en-US,en;q=0.9", })
|
||||
response = urllib.request.urlopen(req).read()
|
||||
data = json.loads(response.decode('utf-8'))
|
||||
bannedlist = []
|
||||
for server in data["servers"]:
|
||||
|
|
@ -116,133 +111,133 @@ class _HostLookupThread(threading.Thread):
|
|||
result = socket.gethostbyname(self._name)
|
||||
except Exception:
|
||||
result = None
|
||||
ba.pushcall(lambda: self._call(result, self._port),
|
||||
babase.pushcall(lambda: self._call(result, self._port),
|
||||
from_other_thread=True)
|
||||
|
||||
|
||||
def new_build_favorites_tab(self, region_height: float) -> None:
|
||||
def newbuild_favorites_tab(self, region_height: float) -> None:
|
||||
c_height = region_height - 20
|
||||
v = c_height - 35 - 25 - 30
|
||||
self.retry_inter = 0.0
|
||||
uiscale = ba.app.ui.uiscale
|
||||
self._width = 1240 if uiscale is ba.UIScale.SMALL else 1040
|
||||
x_inset = 100 if uiscale is ba.UIScale.SMALL else 0
|
||||
self._height = (578 if uiscale is ba.UIScale.SMALL else
|
||||
670 if uiscale is ba.UIScale.MEDIUM else 800)
|
||||
uiscale = bui.app.ui_v1.uiscale
|
||||
self._width = 1240 if uiscale is babase.UIScale.SMALL else 1040
|
||||
x_inset = 100 if uiscale is babase.UIScale.SMALL else 0
|
||||
self._height = (578 if uiscale is babase.UIScale.SMALL else
|
||||
670 if uiscale is babase.UIScale.MEDIUM else 800)
|
||||
|
||||
self._scroll_width = self._width - 130 + 2 * x_inset
|
||||
self._scroll_height = self._height - 180
|
||||
x_inset = 100 if uiscale is ba.UIScale.SMALL else 0
|
||||
x_inset = 100 if uiscale is babase.UIScale.SMALL else 0
|
||||
|
||||
c_height = self._scroll_height - 20
|
||||
sub_scroll_height = c_height - 63
|
||||
self._favorites_scroll_width = sub_scroll_width = (
|
||||
680 if uiscale is ba.UIScale.SMALL else 640)
|
||||
680 if uiscale is babase.UIScale.SMALL else 640)
|
||||
|
||||
v = c_height - 30
|
||||
|
||||
b_width = 140 if uiscale is ba.UIScale.SMALL else 178
|
||||
b_height = (90 if uiscale is ba.UIScale.SMALL else
|
||||
142 if uiscale is ba.UIScale.MEDIUM else 130)
|
||||
b_space_extra = (0 if uiscale is ba.UIScale.SMALL else
|
||||
-2 if uiscale is ba.UIScale.MEDIUM else -5)
|
||||
b_width = 140 if uiscale is babase.UIScale.SMALL else 178
|
||||
b_height = (90 if uiscale is babase.UIScale.SMALL else
|
||||
142 if uiscale is babase.UIScale.MEDIUM else 130)
|
||||
b_space_extra = (0 if uiscale is babase.UIScale.SMALL else
|
||||
-2 if uiscale is babase.UIScale.MEDIUM else -5)
|
||||
|
||||
btnv = (c_height - (48 if uiscale is ba.UIScale.SMALL else
|
||||
45 if uiscale is ba.UIScale.MEDIUM else 40) -
|
||||
btnv = (c_height - (48 if uiscale is babase.UIScale.SMALL else
|
||||
45 if uiscale is babase.UIScale.MEDIUM else 40) -
|
||||
b_height)
|
||||
# ================= smoothy =============
|
||||
|
||||
ba.textwidget(parent=self._container,
|
||||
position=(90 if uiscale is ba.UIScale.SMALL else 120, btnv +
|
||||
120 if uiscale is ba.UIScale.SMALL else btnv+90),
|
||||
bui.textwidget(parent=self._container,
|
||||
position=(90 if uiscale is babase.UIScale.SMALL else 120, btnv +
|
||||
120 if uiscale is babase.UIScale.SMALL else btnv+90),
|
||||
size=(0, 0),
|
||||
h_align='center',
|
||||
color=(0.8, 0.8, 0.8),
|
||||
v_align='top',
|
||||
text="Auto")
|
||||
btnv += 50 if uiscale is ba.UIScale.SMALL else 0
|
||||
btnv += 50 if uiscale is babase.UIScale.SMALL else 0
|
||||
|
||||
ba.buttonwidget(parent=self._container,
|
||||
bui.buttonwidget(parent=self._container,
|
||||
size=(30, 30),
|
||||
position=(25 if uiscale is ba.UIScale.SMALL else 40,
|
||||
position=(25 if uiscale is babase.UIScale.SMALL else 40,
|
||||
btnv+10),
|
||||
|
||||
color=(0.6, 0.53, 0.63),
|
||||
textcolor=(0.75, 0.7, 0.8),
|
||||
on_activate_call=self.auto_retry_dec,
|
||||
text_scale=1.3 if uiscale is ba.UIScale.SMALL else 1.2,
|
||||
text_scale=1.3 if uiscale is babase.UIScale.SMALL else 1.2,
|
||||
label="-",
|
||||
autoselect=True)
|
||||
self.retry_inter_text = ba.textwidget(parent=self._container,
|
||||
self.retry_inter_text = bui.textwidget(parent=self._container,
|
||||
position=(
|
||||
90 if uiscale is ba.UIScale.SMALL else 120, btnv+25),
|
||||
90 if uiscale is babase.UIScale.SMALL else 120, btnv+25),
|
||||
size=(0, 0),
|
||||
h_align='center',
|
||||
color=(0.8, 0.8, 0.8),
|
||||
v_align='center',
|
||||
text=str(self.retry_inter) if self.retry_inter > 0.0 else 'off')
|
||||
ba.buttonwidget(parent=self._container,
|
||||
bui.buttonwidget(parent=self._container,
|
||||
size=(30, 30),
|
||||
position=(125 if uiscale is ba.UIScale.SMALL else 155,
|
||||
position=(125 if uiscale is babase.UIScale.SMALL else 155,
|
||||
btnv+10),
|
||||
|
||||
color=(0.6, 0.53, 0.63),
|
||||
textcolor=(0.75, 0.7, 0.8),
|
||||
on_activate_call=self.auto_retry_inc,
|
||||
text_scale=1.3 if uiscale is ba.UIScale.SMALL else 1.2,
|
||||
text_scale=1.3 if uiscale is babase.UIScale.SMALL else 1.2,
|
||||
label="+",
|
||||
autoselect=True)
|
||||
|
||||
btnv -= b_height + b_space_extra
|
||||
|
||||
self._favorites_connect_button = btn1 = ba.buttonwidget(
|
||||
self._favorites_connect_button = btn1 = bui.buttonwidget(
|
||||
parent=self._container,
|
||||
size=(b_width, b_height),
|
||||
position=(25 if uiscale is ba.UIScale.SMALL else 40, btnv),
|
||||
position=(25 if uiscale is babase.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_favorites_connect_press,
|
||||
text_scale=1.0 if uiscale is ba.UIScale.SMALL else 1.2,
|
||||
label=ba.Lstr(resource='gatherWindow.manualConnectText'),
|
||||
text_scale=1.0 if uiscale is babase.UIScale.SMALL else 1.2,
|
||||
label=babase.Lstr(resource='gatherWindow.manualConnectText'),
|
||||
autoselect=True)
|
||||
if uiscale is ba.UIScale.SMALL and ba.app.ui.use_toolbars:
|
||||
ba.widget(edit=btn1,
|
||||
left_widget=ba_internal.get_special_widget('back_button'))
|
||||
if uiscale is babase.UIScale.SMALL and bui.app.ui_v1.use_toolbars:
|
||||
bui.widget(edit=btn1,
|
||||
left_widget=bui.get_special_widget('back_button'))
|
||||
btnv -= b_height + b_space_extra
|
||||
ba.buttonwidget(parent=self._container,
|
||||
bui.buttonwidget(parent=self._container,
|
||||
size=(b_width, b_height),
|
||||
position=(25 if uiscale is ba.UIScale.SMALL else 40,
|
||||
position=(25 if uiscale is babase.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_favorites_edit_press,
|
||||
text_scale=1.0 if uiscale is ba.UIScale.SMALL else 1.2,
|
||||
label=ba.Lstr(resource='editText'),
|
||||
text_scale=1.0 if uiscale is babase.UIScale.SMALL else 1.2,
|
||||
label=babase.Lstr(resource='editText'),
|
||||
autoselect=True)
|
||||
btnv -= b_height + b_space_extra
|
||||
ba.buttonwidget(parent=self._container,
|
||||
bui.buttonwidget(parent=self._container,
|
||||
size=(b_width, b_height),
|
||||
position=(25 if uiscale is ba.UIScale.SMALL else 40,
|
||||
position=(25 if uiscale is babase.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_favorite_delete_press,
|
||||
text_scale=1.0 if uiscale is ba.UIScale.SMALL else 1.2,
|
||||
label=ba.Lstr(resource='deleteText'),
|
||||
text_scale=1.0 if uiscale is babase.UIScale.SMALL else 1.2,
|
||||
label=babase.Lstr(resource='deleteText'),
|
||||
autoselect=True)
|
||||
|
||||
v -= sub_scroll_height + 23
|
||||
self._scrollwidget = scrlw = ba.scrollwidget(
|
||||
self._scrollwidget = scrlw = bui.scrollwidget(
|
||||
parent=self._container,
|
||||
position=(190 if uiscale is ba.UIScale.SMALL else 225, v),
|
||||
position=(190 if uiscale is babase.UIScale.SMALL else 225, v),
|
||||
size=(sub_scroll_width, sub_scroll_height),
|
||||
claims_left_right=True)
|
||||
ba.widget(edit=self._favorites_connect_button,
|
||||
bui.widget(edit=self._favorites_connect_button,
|
||||
right_widget=self._scrollwidget)
|
||||
self._columnwidget = ba.columnwidget(parent=scrlw,
|
||||
self._columnwidget = bui.columnwidget(parent=scrlw,
|
||||
left_border=10,
|
||||
border=2,
|
||||
margin=0,
|
||||
|
|
@ -257,22 +252,22 @@ def new_on_favorites_connect_press(self) -> None:
|
|||
self._no_favorite_selected_error()
|
||||
|
||||
else:
|
||||
config = ba.app.config['Saved Servers'][self._favorite_selected]
|
||||
config = babase.app.config['Saved Servers'][self._favorite_selected]
|
||||
_HostLookupThread(name=config['addr'],
|
||||
port=config['port'],
|
||||
call=ba.WeakCall(
|
||||
call=bs.WeakCall(
|
||||
self._host_lookup_result)).start()
|
||||
|
||||
if self.retry_inter > 0 and (ba_internal.get_connection_to_host_info() == {} or ba_internal.get_connection_to_host_info()['build_number'] == 0):
|
||||
ba.screenmessage("Server full or unreachable, Retrying....")
|
||||
self._retry_timer = ba.Timer(self.retry_inter, ba.Call(
|
||||
self._on_favorites_connect_press), timetype=ba.TimeType.REAL)
|
||||
if self.retry_inter > 0 and (bs.get_connection_to_host_info() == {} or bs.get_connection_to_host_info()['build_number'] == 0):
|
||||
bui.screenmessage("Server full or unreachable, Retrying....")
|
||||
self._retry_timer = bs.AppTimer(self.retry_inter, babase.Call(
|
||||
self._on_favorites_connect_press))
|
||||
|
||||
|
||||
def auto_retry_inc(self):
|
||||
|
||||
self.retry_inter += 0.5
|
||||
ba.textwidget(edit=self.retry_inter_text, text='%.1f' % self.retry_inter)
|
||||
bui.textwidget(edit=self.retry_inter_text, text='%.1f' % self.retry_inter)
|
||||
|
||||
|
||||
def auto_retry_dec(self):
|
||||
|
|
@ -280,9 +275,9 @@ def auto_retry_dec(self):
|
|||
self.retry_inter -= 0.5
|
||||
|
||||
if self.retry_inter == 0.0:
|
||||
ba.textwidget(edit=self.retry_inter_text, text='off')
|
||||
bui.textwidget(edit=self.retry_inter_text, text='off')
|
||||
else:
|
||||
ba.textwidget(edit=self.retry_inter_text, text='%.1f' % self.retry_inter)
|
||||
bui.textwidget(edit=self.retry_inter_text, text='%.1f' % self.retry_inter)
|
||||
|
||||
|
||||
@dataclass
|
||||
|
|
@ -328,83 +323,98 @@ def _clear(self) -> None:
|
|||
self._stats_button
|
||||
]:
|
||||
if widget:
|
||||
try:
|
||||
|
||||
widget.delete()
|
||||
except:
|
||||
pass
|
||||
|
||||
|
||||
|
||||
def update(self, index: int, party: PartyEntry, sub_scroll_width: float,
|
||||
sub_scroll_height: float, lineheight: float,
|
||||
columnwidget: ba.Widget, join_text: ba.Widget,
|
||||
filter_text: ba.Widget, existing_selection: Optional[Selection],
|
||||
columnwidget: bui.Widget, join_text: bui.Widget,
|
||||
filter_text: bui.Widget, existing_selection: Optional[Selection],
|
||||
tab: PublicGatherTab) -> None:
|
||||
"""Update for the given data."""
|
||||
# pylint: disable=too-many-locals
|
||||
|
||||
# Quick-out: if we've been marked clean for a certain index and
|
||||
# we're still at that index, we're done.
|
||||
plus = bui.app.plus
|
||||
assert plus is not None
|
||||
|
||||
# Quick-out: if we've been marked clean for a certain index and
|
||||
# we're still at that index, we're done.
|
||||
if party.clean_display_index == index:
|
||||
return
|
||||
|
||||
ping_good = ba_internal.get_v1_account_misc_read_val('pingGood', 100)
|
||||
ping_med = ba_internal.get_v1_account_misc_read_val('pingMed', 500)
|
||||
ping_good = plus.get_v1_account_misc_read_val('pingGood', 100)
|
||||
ping_med = plus.get_v1_account_misc_read_val('pingMed', 500)
|
||||
|
||||
self._clear()
|
||||
hpos = 20
|
||||
vpos = sub_scroll_height - lineheight * index - 50
|
||||
self._name_widget = ba.textwidget(
|
||||
text=ba.Lstr(value=party.name),
|
||||
self._name_widget = bui.textwidget(
|
||||
text=bui.Lstr(value=party.name),
|
||||
parent=columnwidget,
|
||||
size=(sub_scroll_width * 0.63, 20),
|
||||
position=(0 + hpos, 4 + vpos),
|
||||
selectable=True,
|
||||
on_select_call=ba.WeakCall(
|
||||
on_select_call=bui.WeakCall(
|
||||
tab.set_public_party_selection,
|
||||
Selection(party.get_key(), SelectionComponent.NAME)),
|
||||
on_activate_call=ba.WeakCall(tab.on_public_party_activate, party),
|
||||
Selection(party.get_key(), SelectionComponent.NAME),
|
||||
),
|
||||
on_activate_call=bui.WeakCall(tab.on_public_party_activate, party),
|
||||
click_activate=True,
|
||||
maxwidth=sub_scroll_width * 0.45,
|
||||
corner_scale=1.4,
|
||||
autoselect=True,
|
||||
color=(1, 1, 1, 0.3 if party.ping is None else 1.0),
|
||||
h_align='left',
|
||||
v_align='center')
|
||||
ba.widget(edit=self._name_widget,
|
||||
v_align='center',
|
||||
)
|
||||
bui.widget(
|
||||
edit=self._name_widget,
|
||||
left_widget=join_text,
|
||||
show_buffer_top=64.0,
|
||||
show_buffer_bottom=64.0)
|
||||
if existing_selection == Selection(party.get_key(),
|
||||
SelectionComponent.NAME):
|
||||
ba.containerwidget(edit=columnwidget,
|
||||
selected_child=self._name_widget)
|
||||
show_buffer_bottom=64.0,
|
||||
)
|
||||
if existing_selection == Selection(
|
||||
party.get_key(), SelectionComponent.NAME
|
||||
):
|
||||
bui.containerwidget(
|
||||
edit=columnwidget, selected_child=self._name_widget
|
||||
)
|
||||
if party.stats_addr or True:
|
||||
url = party.stats_addr.replace(
|
||||
'${ACCOUNT}',
|
||||
ba_internal.get_v1_account_misc_read_val_2('resolvedAccountID',
|
||||
'UNKNOWN'))
|
||||
self._stats_button = ba.buttonwidget(
|
||||
color=(0.5, 0.8, 0.8),
|
||||
plus.get_v1_account_misc_read_val_2(
|
||||
'resolvedAccountID', 'UNKNOWN'
|
||||
),
|
||||
)
|
||||
self._stats_button = bui.buttonwidget(
|
||||
color=(0.3, 0.6, 0.94),
|
||||
textcolor=(1.0, 1.0, 1.0),
|
||||
label='....',
|
||||
parent=columnwidget,
|
||||
autoselect=True,
|
||||
|
||||
on_select_call=ba.WeakCall(
|
||||
on_activate_call=bui.Call(bui.open_url, url),
|
||||
on_select_call=bui.WeakCall(
|
||||
tab.set_public_party_selection,
|
||||
Selection(party.get_key(),
|
||||
SelectionComponent.STATS_BUTTON)),
|
||||
size=(100, 40),
|
||||
Selection(party.get_key(), SelectionComponent.STATS_BUTTON),
|
||||
),
|
||||
size=(120, 40),
|
||||
position=(sub_scroll_width * 0.66 + hpos, 1 + vpos),
|
||||
scale=0.9)
|
||||
ba.buttonwidget(edit=self._stats_button, on_activate_call=ba.Call(
|
||||
scale=0.9,
|
||||
)
|
||||
bui.buttonwidget(edit=self._stats_button, on_activate_call=bui.WeakCall(
|
||||
self.on_stats_click, self._stats_button, party))
|
||||
if existing_selection == Selection(
|
||||
party.get_key(), SelectionComponent.STATS_BUTTON):
|
||||
ba.containerwidget(edit=columnwidget,
|
||||
selected_child=self._stats_button)
|
||||
party.get_key(), SelectionComponent.STATS_BUTTON
|
||||
):
|
||||
bui.containerwidget(
|
||||
edit=columnwidget, selected_child=self._stats_button
|
||||
)
|
||||
|
||||
self._size_widget = ba.textwidget(
|
||||
self._size_widget = bui.textwidget(
|
||||
text=str(party.size) + '/' + str(party.size_max),
|
||||
parent=columnwidget,
|
||||
size=(0, 0),
|
||||
|
|
@ -412,37 +422,43 @@ def update(self, index: int, party: PartyEntry, sub_scroll_width: float,
|
|||
scale=0.7,
|
||||
color=(0.8, 0.8, 0.8),
|
||||
h_align='right',
|
||||
v_align='center')
|
||||
v_align='center',
|
||||
)
|
||||
|
||||
if index == 0:
|
||||
ba.widget(edit=self._name_widget, up_widget=filter_text)
|
||||
bui.widget(edit=self._name_widget, up_widget=filter_text)
|
||||
if self._stats_button:
|
||||
ba.widget(edit=self._stats_button, up_widget=filter_text)
|
||||
bui.widget(edit=self._stats_button, up_widget=filter_text)
|
||||
|
||||
self._ping_widget = ba.textwidget(parent=columnwidget,
|
||||
self._ping_widget = bui.textwidget(
|
||||
parent=columnwidget,
|
||||
size=(0, 0),
|
||||
position=(sub_scroll_width * 0.94 +
|
||||
hpos, 20 + vpos),
|
||||
position=(sub_scroll_width * 0.94 + hpos, 20 + vpos),
|
||||
scale=0.7,
|
||||
h_align='right',
|
||||
v_align='center')
|
||||
v_align='center',
|
||||
)
|
||||
if party.ping is None:
|
||||
ba.textwidget(edit=self._ping_widget,
|
||||
text='-',
|
||||
color=(0.5, 0.5, 0.5))
|
||||
bui.textwidget(
|
||||
edit=self._ping_widget, text='-', color=(0.5, 0.5, 0.5)
|
||||
)
|
||||
else:
|
||||
ba.textwidget(edit=self._ping_widget,
|
||||
bui.textwidget(
|
||||
edit=self._ping_widget,
|
||||
text=str(int(party.ping)),
|
||||
color=(0, 1, 0) if party.ping <= ping_good else
|
||||
(1, 1, 0) if party.ping <= ping_med else (1, 0, 0))
|
||||
color=(0, 1, 0)
|
||||
if party.ping <= ping_good
|
||||
else (1, 1, 0)
|
||||
if party.ping <= ping_med
|
||||
else (1, 0, 0),
|
||||
)
|
||||
|
||||
party.clean_display_index = index
|
||||
|
||||
|
||||
def _get_popup_window_scale() -> float:
|
||||
uiscale = ba.app.ui.uiscale
|
||||
return (2.3 if uiscale is ba.UIScale.SMALL else
|
||||
1.65 if uiscale is ba.UIScale.MEDIUM else 1.23)
|
||||
uiscale = bui.app.ui_v1.uiscale
|
||||
return (2.3 if uiscale is babase.UIScale.SMALL else
|
||||
1.65 if uiscale is babase.UIScale.MEDIUM else 1.23)
|
||||
|
||||
|
||||
_party = None
|
||||
|
|
@ -452,8 +468,8 @@ def on_stats_click(self, widget, party):
|
|||
global _party
|
||||
_party = party
|
||||
choices = ['connect', 'copyqueue', "save"]
|
||||
DisChoices = [ba.Lstr(resource="ipp", fallback_value="Connect by IP"), ba.Lstr(
|
||||
resource="copy id", fallback_value="Copy Queue ID"), ba.Lstr(value="Save")]
|
||||
DisChoices = [babase.Lstr(resource="ipp", fallback_value="Connect by IP"), babase.Lstr(
|
||||
resource="copy id", fallback_value="Copy Queue ID"), babase.Lstr(value="Save")]
|
||||
if party.stats_addr:
|
||||
choices.append('stats')
|
||||
if 'discord' in party.stats_addr:
|
||||
|
|
@ -462,7 +478,7 @@ def on_stats_click(self, widget, party):
|
|||
txt = "Youtube"
|
||||
else:
|
||||
txt = party.stats_addr[0:13]
|
||||
DisChoices.append(ba.Lstr(value=txt))
|
||||
DisChoices.append(babase.Lstr(value=txt))
|
||||
PopupMenuWindow(
|
||||
position=widget.get_screen_space_center(),
|
||||
scale=_get_popup_window_scale(),
|
||||
|
|
@ -480,17 +496,17 @@ def popup_menu_selected_choice(self, window: popup.PopupMenu,
|
|||
choice: str) -> None:
|
||||
"""Called when a menu entry is selected."""
|
||||
# Unused arg.
|
||||
|
||||
plus = babase.app.plus
|
||||
if choice == 'stats':
|
||||
url = _party.stats_addr.replace(
|
||||
'${ACCOUNT}',
|
||||
ba_internal.get_v1_account_misc_read_val_2('resolvedAccountID',
|
||||
plus.get_v1_account_misc_read_val_2('resolvedAccountID',
|
||||
'UNKNOWN'))
|
||||
ba.open_url(url)
|
||||
bui.open_url(url)
|
||||
elif choice == 'connect':
|
||||
PartyQuickConnect(_party.address, _party.port)
|
||||
elif choice == 'save':
|
||||
config = ba.app.config
|
||||
config = babase.app.config
|
||||
ip_add = _party.address
|
||||
p_port = _party.port
|
||||
title = _party.name
|
||||
|
|
@ -502,18 +518,19 @@ def popup_menu_selected_choice(self, window: popup.PopupMenu,
|
|||
'name': title
|
||||
}
|
||||
config.commit()
|
||||
ba.screenmessage("Server saved to manual")
|
||||
ba.playsound(ba.getsound('gunCocking'))
|
||||
bui.screenmessage("Server saved to manual")
|
||||
bui.getsound('gunCocking').play()
|
||||
elif choice == "copyqueue":
|
||||
ba.clipboard_set_text(_party.queue)
|
||||
ba.playsound(ba.getsound('gunCocking'))
|
||||
babase.clipboard_set_text(_party.queue)
|
||||
bui.getsound('gunCocking').play()
|
||||
|
||||
|
||||
def _update_party_lists(self) -> None:
|
||||
if not self._party_lists_dirty:
|
||||
return
|
||||
starttime = time.time()
|
||||
config = ba.app.config
|
||||
config = babase.app.config
|
||||
plus = babase.app.plus
|
||||
bannedservers = config.get('Banned Servers', [])
|
||||
assert len(self._parties_sorted) == len(self._parties)
|
||||
|
||||
|
|
@ -526,7 +543,7 @@ def _update_party_lists(self) -> None:
|
|||
|
||||
# If signed out or errored, show no parties.
|
||||
if (
|
||||
ba.internal.get_v1_account_state() != 'signed_in'
|
||||
plus.get_v1_account_state() != 'signed_in'
|
||||
or not self._have_valid_server_list
|
||||
):
|
||||
self._parties_displayed = {}
|
||||
|
|
@ -568,7 +585,7 @@ def _update_party_lists(self) -> None:
|
|||
|
||||
|
||||
def replace():
|
||||
manualtab.ManualGatherTab._build_favorites_tab = new_build_favorites_tab
|
||||
manualtab.ManualGatherTab._build_favorites_tab = newbuild_favorites_tab
|
||||
manualtab.ManualGatherTab._on_favorites_connect_press = new_on_favorites_connect_press
|
||||
manualtab.ManualGatherTab.auto_retry_dec = auto_retry_dec
|
||||
manualtab.ManualGatherTab.auto_retry_inc = auto_retry_inc
|
||||
|
|
@ -577,26 +594,26 @@ def replace():
|
|||
publictab.UIRow.on_stats_click = on_stats_click
|
||||
publictab.UIRow.popup_menu_closing = popup_menu_closing
|
||||
publictab.UIRow.popup_menu_selected_choice = popup_menu_selected_choice
|
||||
publictab.PublicGatherTab._update_party_lists = _update_party_lists
|
||||
# publictab.PublicGatherTab._update_party_lists = _update_party_lists
|
||||
|
||||
|
||||
class PartyQuickConnect(ba.Window):
|
||||
class PartyQuickConnect(bui.Window):
|
||||
def __init__(self, address: str, port: int):
|
||||
self._width = 800
|
||||
self._height = 400
|
||||
self._white_tex = ba.gettexture('white')
|
||||
self.lineup_tex = ba.gettexture('playerLineup')
|
||||
self.lineup_1_transparent_model = ba.getmodel(
|
||||
self._white_tex = bui.gettexture('white')
|
||||
self.lineup_tex = bui.gettexture('playerLineup')
|
||||
self.lineup_1_transparent_mesh = bui.getmesh(
|
||||
'playerLineup1Transparent')
|
||||
self.eyes_model = ba.getmodel('plasticEyesTransparent')
|
||||
uiscale = ba.app.ui.uiscale
|
||||
super().__init__(root_widget=ba.containerwidget(
|
||||
self.eyes_mesh = bui.getmesh('plasticEyesTransparent')
|
||||
uiscale = bui.app.ui_v1.uiscale
|
||||
super().__init__(root_widget=bui.containerwidget(
|
||||
size=(self._width, self._height),
|
||||
color=(0.45, 0.63, 0.15),
|
||||
transition='in_scale',
|
||||
scale=(1.4 if uiscale is ba.UIScale.SMALL else
|
||||
1.2 if uiscale is ba.UIScale.MEDIUM else 1.0)))
|
||||
self._cancel_button = ba.buttonwidget(parent=self._root_widget,
|
||||
scale=(1.4 if uiscale is babase.UIScale.SMALL else
|
||||
1.2 if uiscale is babase.UIScale.MEDIUM else 1.0)))
|
||||
self._cancel_button = bui.buttonwidget(parent=self._root_widget,
|
||||
scale=1.0,
|
||||
position=(60, self._height - 80),
|
||||
size=(50, 50),
|
||||
|
|
@ -604,12 +621,12 @@ class PartyQuickConnect(ba.Window):
|
|||
on_activate_call=self.close,
|
||||
autoselect=True,
|
||||
color=(0.45, 0.63, 0.15),
|
||||
icon=ba.gettexture('crossOut'),
|
||||
icon=bui.gettexture('crossOut'),
|
||||
iconscale=1.2)
|
||||
ba.containerwidget(edit=self._root_widget,
|
||||
bui.containerwidget(edit=self._root_widget,
|
||||
cancel_button=self._cancel_button)
|
||||
|
||||
self.IP = ba.textwidget(
|
||||
self.IP = bui.textwidget(
|
||||
parent=self._root_widget,
|
||||
position=(self._width * 0.5, self._height * 0.55 + 60),
|
||||
size=(0, 0),
|
||||
|
|
@ -619,7 +636,7 @@ class PartyQuickConnect(ba.Window):
|
|||
v_align='center',
|
||||
text="IP: "+address + " PORT: "+str(port),
|
||||
maxwidth=self._width * 0.65)
|
||||
self._title_text = ba.textwidget(
|
||||
self._title_text = bui.textwidget(
|
||||
parent=self._root_widget,
|
||||
position=(self._width * 0.5, self._height * 0.55),
|
||||
size=(0, 0),
|
||||
|
|
@ -629,7 +646,7 @@ class PartyQuickConnect(ba.Window):
|
|||
v_align='center',
|
||||
text="Retrying....",
|
||||
maxwidth=self._width * 0.65)
|
||||
self._line_image = ba.imagewidget(
|
||||
self._line_image = bui.imagewidget(
|
||||
parent=self._root_widget,
|
||||
color=(0.0, 0.0, 0.0),
|
||||
opacity=0.2,
|
||||
|
|
@ -637,39 +654,38 @@ class PartyQuickConnect(ba.Window):
|
|||
size=(800-190+80, 4.0),
|
||||
texture=self._white_tex)
|
||||
self.dude_x = 60
|
||||
self._body_image_target = ba.buttonwidget(
|
||||
self._body_image_target = bui.buttonwidget(
|
||||
parent=self._root_widget,
|
||||
size=(1 * 60, 1 * 80),
|
||||
color=(random.random(), random.random(), random.random()),
|
||||
label='',
|
||||
texture=self.lineup_tex,
|
||||
position=(40, 110),
|
||||
model_transparent=self.lineup_1_transparent_model)
|
||||
self._eyes_image = ba.imagewidget(
|
||||
mesh_transparent=self.lineup_1_transparent_mesh)
|
||||
self._eyes_image = bui.imagewidget(
|
||||
parent=self._root_widget,
|
||||
size=(1 * 36, 1 * 18),
|
||||
texture=self.lineup_tex,
|
||||
color=(1, 1, 1),
|
||||
position=(40, 165),
|
||||
model_transparent=self.eyes_model)
|
||||
# self._body_image_target2 = ba.imagewidget(
|
||||
mesh_transparent=self.eyes_mesh)
|
||||
# self._body_image_target2 = bui.imagewidget(
|
||||
# parent=self._root_widget,
|
||||
# size=(1* 60, 1 * 80),
|
||||
# color=(1,0.3,0.4),
|
||||
# texture=self.lineup_tex,
|
||||
# position=(700,130),
|
||||
# model_transparent=self.lineup_1_transparent_model)
|
||||
# mesh_transparent=self.lineup_1_transparent_mesh)
|
||||
self.closed = False
|
||||
self.retry_count = 1
|
||||
self.direction = "right"
|
||||
self.connect(address, port)
|
||||
self.move_R = ba.Timer(0.01, ba.Call(self.move_right),
|
||||
timetype=ba.TimeType.REAL, repeat=True)
|
||||
self.move_R = bs.AppTimer(0.01, babase.Call(self.move_right), repeat=True)
|
||||
|
||||
def move_right(self):
|
||||
if self._body_image_target and self._eyes_image:
|
||||
ba.buttonwidget(edit=self._body_image_target, position=(self.dude_x, 110))
|
||||
ba.imagewidget(edit=self._eyes_image, position=(self.dude_x+10, 165))
|
||||
bui.buttonwidget(edit=self._body_image_target, position=(self.dude_x, 110))
|
||||
bui.imagewidget(edit=self._eyes_image, position=(self.dude_x+10, 165))
|
||||
else:
|
||||
self.move_R = None
|
||||
if self.direction == "right":
|
||||
|
|
@ -682,23 +698,23 @@ class PartyQuickConnect(ba.Window):
|
|||
self.direction = "right"
|
||||
|
||||
def connect(self, address, port):
|
||||
if not self.closed and (ba_internal.get_connection_to_host_info() == {} or ba_internal.get_connection_to_host_info()['build_number'] == 0):
|
||||
ba.textwidget(edit=self._title_text, text="Retrying....("+str(self.retry_count)+")")
|
||||
if not self.closed and (bs.get_connection_to_host_info() == {} or bs.get_connection_to_host_info()['build_number'] == 0):
|
||||
bui.textwidget(edit=self._title_text, text="Retrying....("+str(self.retry_count)+")")
|
||||
self.retry_count += 1
|
||||
ba_internal.connect_to_party(address, port=port)
|
||||
self._retry_timer = ba.Timer(1.5, ba.Call(
|
||||
self.connect, address, port), timetype=ba.TimeType.REAL)
|
||||
bs.connect_to_party(address, port=port)
|
||||
self._retry_timer = bs.AppTimer(1.5, babase.Call(
|
||||
self.connect, address, port))
|
||||
|
||||
def close(self) -> None:
|
||||
"""Close the ui."""
|
||||
self.closed = True
|
||||
ba.containerwidget(edit=self._root_widget, transition='out_scale')
|
||||
bui.containerwidget(edit=self._root_widget, transition='out_scale')
|
||||
|
||||
|
||||
# ba_meta export plugin
|
||||
class InitalRun(ba.Plugin):
|
||||
class InitalRun(babase.Plugin):
|
||||
def __init__(self):
|
||||
replace()
|
||||
config = ba.app.config
|
||||
config = babase.app.config
|
||||
if config["launchCount"] % 5 == 0:
|
||||
updateBannedServersCache()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue