mirror of
https://github.com/RYDE-WORK/ballistica.git
synced 2026-01-31 03:39:04 +08:00
Python 3.8 -> 3.9
This commit is contained in:
parent
c8cf5b063f
commit
31ce93c5ad
1252
.efrocachemap
1252
.efrocachemap
File diff suppressed because it is too large
Load Diff
6
.github/workflows/ci.yml
vendored
6
.github/workflows/ci.yml
vendored
@ -20,7 +20,7 @@ jobs:
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
with:
|
||||
python-version: 3.8
|
||||
python-version: 3.9
|
||||
- name: Install dependencies
|
||||
run: tools/pcommand install_pip_reqs
|
||||
- name: Run checks and tests
|
||||
@ -35,7 +35,7 @@ jobs:
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
with:
|
||||
python-version: 3.8
|
||||
python-version: 3.9
|
||||
- name: Compile binary
|
||||
run: make _cmake-simple-ci-server-build
|
||||
|
||||
@ -51,7 +51,7 @@ jobs:
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v1
|
||||
with:
|
||||
python-version: 3.8
|
||||
python-version: 3.9
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
|
||||
2
.idea/ballisticacore.iml
generated
2
.idea/ballisticacore.iml
generated
@ -64,7 +64,7 @@
|
||||
<excludePattern pattern=".pytest_cache" />
|
||||
<excludePattern pattern=".editorconfig" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="jdk" jdkName="Python 3.9" jdkType="Python SDK" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
||||
24
.idea/dictionaries/ericf.xml
generated
24
.idea/dictionaries/ericf.xml
generated
@ -14,6 +14,7 @@
|
||||
<w>aaak</w>
|
||||
<w>aarch</w>
|
||||
<w>abcdefghijklmnopqrstuvwxyz</w>
|
||||
<w>abcdefghjkmnpqrtuvwxy</w>
|
||||
<w>abeb</w>
|
||||
<w>abishort</w>
|
||||
<w>abot</w>
|
||||
@ -81,6 +82,7 @@
|
||||
<w>apichanges</w>
|
||||
<w>apis</w>
|
||||
<w>apks</w>
|
||||
<w>apost</w>
|
||||
<w>appath</w>
|
||||
<w>appathout</w>
|
||||
<w>appcfg</w>
|
||||
@ -235,6 +237,7 @@
|
||||
<w>bombsquadgame</w>
|
||||
<w>bools</w>
|
||||
<w>bootlocale</w>
|
||||
<w>bootsubprocess</w>
|
||||
<w>borhani</w>
|
||||
<w>bot's</w>
|
||||
<w>botdist</w>
|
||||
@ -394,10 +397,12 @@
|
||||
<w>clrred</w>
|
||||
<w>cmakelists</w>
|
||||
<w>cmakeserver</w>
|
||||
<w>cmath</w>
|
||||
<w>cmathmodule</w>
|
||||
<w>cmds</w>
|
||||
<w>cmembers</w>
|
||||
<w>cmodel</w>
|
||||
<w>cmodules</w>
|
||||
<w>cmpf</w>
|
||||
<w>cnode</w>
|
||||
<w>codecsmodule</w>
|
||||
@ -564,6 +569,7 @@
|
||||
<w>distroot</w>
|
||||
<w>distros</w>
|
||||
<w>dline</w>
|
||||
<w>dliwk</w>
|
||||
<w>dlldir</w>
|
||||
<w>dlls</w>
|
||||
<w>dmake</w>
|
||||
@ -710,6 +716,7 @@
|
||||
<w>eventid</w>
|
||||
<w>ewww</w>
|
||||
<w>ewwww</w>
|
||||
<w>exargs</w>
|
||||
<w>excludepowerups</w>
|
||||
<w>excludetypes</w>
|
||||
<w>excstr</w>
|
||||
@ -745,6 +752,7 @@
|
||||
<w>fbase</w>
|
||||
<w>fclose</w>
|
||||
<w>fcmd</w>
|
||||
<w>fcntl</w>
|
||||
<w>fcntlmodule</w>
|
||||
<w>fcode</w>
|
||||
<w>fcontents</w>
|
||||
@ -977,6 +985,7 @@
|
||||
<w>gpsui</w>
|
||||
<w>gradlepath</w>
|
||||
<w>gradlew</w>
|
||||
<w>graphlib</w>
|
||||
<w>gravis</w>
|
||||
<w>grpentry</w>
|
||||
<w>grpkey</w>
|
||||
@ -1202,6 +1211,7 @@
|
||||
<w>lbits</w>
|
||||
<w>lbld</w>
|
||||
<w>lbval</w>
|
||||
<w>lbzip</w>
|
||||
<w>lcfg</w>
|
||||
<w>lcolor</w>
|
||||
<w>lcrypto</w>
|
||||
@ -1217,6 +1227,8 @@
|
||||
<w>lfull</w>
|
||||
<w>lfval</w>
|
||||
<w>libballisticacore</w>
|
||||
<w>libbz</w>
|
||||
<w>libbzip</w>
|
||||
<w>libcrypto</w>
|
||||
<w>libdir</w>
|
||||
<w>libegl</w>
|
||||
@ -1235,6 +1247,7 @@
|
||||
<w>libsdl</w>
|
||||
<w>libsqlite</w>
|
||||
<w>libssl</w>
|
||||
<w>libuuid</w>
|
||||
<w>libvorbi</w>
|
||||
<w>libvorbis</w>
|
||||
<w>libvorbisfile</w>
|
||||
@ -1313,6 +1326,7 @@
|
||||
<w>ltex</w>
|
||||
<w>ltypes</w>
|
||||
<w>lubyte</w>
|
||||
<w>luuid</w>
|
||||
<w>lzma</w>
|
||||
<w>lzmamodule</w>
|
||||
<w>macappstore</w>
|
||||
@ -1580,6 +1594,7 @@
|
||||
<w>ortho</w>
|
||||
<w>osascript</w>
|
||||
<w>osmusic</w>
|
||||
<w>ossaudiodev</w>
|
||||
<w>ostype</w>
|
||||
<w>osval</w>
|
||||
<w>otherplayer</w>
|
||||
@ -1695,6 +1710,7 @@
|
||||
<w>pogotron</w>
|
||||
<w>pointpos</w>
|
||||
<w>policybase</w>
|
||||
<w>popd</w>
|
||||
<w>popen</w>
|
||||
<w>poplib</w>
|
||||
<w>popupcolor</w>
|
||||
@ -2294,6 +2310,7 @@
|
||||
<w>testfull</w>
|
||||
<w>testhelpers</w>
|
||||
<w>testimportmultiple</w>
|
||||
<w>testinternalcapi</w>
|
||||
<w>testm</w>
|
||||
<w>testmagicmethods</w>
|
||||
<w>testmock</w>
|
||||
@ -2405,6 +2422,7 @@
|
||||
<w>typestr</w>
|
||||
<w>tzdiff</w>
|
||||
<w>tzinfos</w>
|
||||
<w>tzpath</w>
|
||||
<w>uadfc</w>
|
||||
<w>uber</w>
|
||||
<w>ucrtbased</w>
|
||||
@ -2463,6 +2481,7 @@
|
||||
<w>userfunctions</w>
|
||||
<w>utcnow</w>
|
||||
<w>utimensat</w>
|
||||
<w>uuidmodule</w>
|
||||
<w>uval</w>
|
||||
<w>valanntype</w>
|
||||
<w>validpgpkeys</w>
|
||||
@ -2521,6 +2540,7 @@
|
||||
<w>webbrowser</w>
|
||||
<w>webpage</w>
|
||||
<w>webpages</w>
|
||||
<w>weeeird</w>
|
||||
<w>whatevs</w>
|
||||
<w>wheee</w>
|
||||
<w>whos</w>
|
||||
@ -2593,7 +2613,10 @@
|
||||
<w>xval</w>
|
||||
<w>xxdiff</w>
|
||||
<w>xxhdpi</w>
|
||||
<w>xxlimited</w>
|
||||
<w>xxsubinterpreters</w>
|
||||
<w>xxsubtype</w>
|
||||
<w>xxtestfuzz</w>
|
||||
<w>xxxhdpi</w>
|
||||
<w>yach</w>
|
||||
<w>yapf</w>
|
||||
@ -2610,6 +2633,7 @@
|
||||
<w>zipapp</w>
|
||||
<w>zlib</w>
|
||||
<w>zlibmodule</w>
|
||||
<w>zoneinfo</w>
|
||||
<w>zoomtext</w>
|
||||
<w>zpos</w>
|
||||
<w>zval</w>
|
||||
|
||||
2
.idea/misc.xml
generated
2
.idea/misc.xml
generated
@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.8" project-jdk-type="Python SDK" />
|
||||
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.9" project-jdk-type="Python SDK" />
|
||||
<component name="PythonCompatibilityInspectionAdvertiser">
|
||||
<option name="version" value="3" />
|
||||
</component>
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
### 1.6.5 (20388)
|
||||
### 1.6.5 (20394)
|
||||
- Added co-op support to server builds (thanks Dliwk!)
|
||||
- Updated everything from Python 3.8 to Python 3.9. The biggest immediate impact to our code is that basic types such as list, dict, and tuple can be used in annotations, eliminating the need to import typing.Dict, typing.List, etc. See python.org for more changes.
|
||||
- Note: accessing mods on external storage on Android will not work in this release. This functionality has not been working in recent versions of Android due to increased security features anyway and I am in the process of replacing it with a cloud based system for installing mods. More on this soon.
|
||||
|
||||
### 1.6.4 (20382)
|
||||
- Some cleanups in the Favorites tab of the gather window.
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,68 +1,68 @@
|
||||
[
|
||||
"ba_data/python/ba/__init__.py",
|
||||
"ba_data/python/ba/__pycache__/__init__.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_account.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_achievement.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_activity.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_activitytypes.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_actor.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_ads.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_analytics.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_app.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_appconfig.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_appdelegate.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_appmode.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_apputils.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_assetmanager.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_asyncio.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_benchmark.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_campaign.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_collision.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_coopgame.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_coopsession.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_dependency.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_dualteamsession.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_error.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_freeforallsession.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_gameactivity.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_gameresults.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_gameutils.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_general.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_hooks.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_input.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_keyboard.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_language.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_level.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_lobby.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_map.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_math.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_messages.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_meta.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_multiteamsession.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_music.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_net.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_nodeactor.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_player.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_playlist.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_plugin.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_powerup.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_profile.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_score.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_servermode.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_session.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_settings.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_stats.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_store.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_team.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_teamgame.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_tips.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_tournament.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_ui.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/deprecated.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/internal.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/macmusicapp.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/modutils.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/osmusic.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/__init__.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_account.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_achievement.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_activity.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_activitytypes.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_actor.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_ads.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_analytics.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_app.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_appconfig.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_appdelegate.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_appmode.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_apputils.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_assetmanager.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_asyncio.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_benchmark.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_campaign.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_collision.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_coopgame.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_coopsession.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_dependency.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_dualteamsession.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_error.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_freeforallsession.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_gameactivity.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_gameresults.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_gameutils.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_general.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_hooks.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_input.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_keyboard.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_language.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_level.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_lobby.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_map.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_math.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_messages.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_meta.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_multiteamsession.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_music.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_net.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_nodeactor.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_player.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_playlist.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_plugin.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_powerup.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_profile.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_score.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_servermode.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_session.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_settings.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_stats.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_store.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_team.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_teamgame.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_tips.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_tournament.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/_ui.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/deprecated.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/internal.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/macmusicapp.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/modutils.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/__pycache__/osmusic.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/_account.py",
|
||||
"ba_data/python/ba/_achievement.py",
|
||||
"ba_data/python/ba/_activity.py",
|
||||
@ -91,8 +91,8 @@
|
||||
"ba_data/python/ba/_gameutils.py",
|
||||
"ba_data/python/ba/_general.py",
|
||||
"ba_data/python/ba/_generated/__init__.py",
|
||||
"ba_data/python/ba/_generated/__pycache__/__init__.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/_generated/__pycache__/enums.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/_generated/__pycache__/__init__.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/_generated/__pycache__/enums.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/ba/_generated/enums.py",
|
||||
"ba_data/python/ba/_hooks.py",
|
||||
"ba_data/python/ba/_input.py",
|
||||
@ -130,33 +130,33 @@
|
||||
"ba_data/python/ba/modutils.py",
|
||||
"ba_data/python/ba/osmusic.py",
|
||||
"ba_data/python/ba/ui/__init__.py",
|
||||
"ba_data/python/ba/ui/__pycache__/__init__.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/ba/ui/__pycache__/__init__.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bacommon/__init__.py",
|
||||
"ba_data/python/bacommon/__pycache__/__init__.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bacommon/__pycache__/assets.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bacommon/__pycache__/net.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bacommon/__pycache__/servermanager.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bacommon/__pycache__/__init__.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bacommon/__pycache__/assets.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bacommon/__pycache__/net.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bacommon/__pycache__/servermanager.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bacommon/assets.py",
|
||||
"ba_data/python/bacommon/net.py",
|
||||
"ba_data/python/bacommon/servermanager.py",
|
||||
"ba_data/python/bastd/__init__.py",
|
||||
"ba_data/python/bastd/__pycache__/__init__.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/__pycache__/appdelegate.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/__pycache__/gameutils.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/__pycache__/mainmenu.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/__pycache__/maps.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/__pycache__/stdmap.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/__pycache__/tutorial.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/__pycache__/__init__.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/__pycache__/appdelegate.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/__pycache__/gameutils.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/__pycache__/mainmenu.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/__pycache__/maps.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/__pycache__/stdmap.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/__pycache__/tutorial.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/activity/__init__.py",
|
||||
"ba_data/python/bastd/activity/__pycache__/__init__.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/activity/__pycache__/coopjoin.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/activity/__pycache__/coopscore.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/activity/__pycache__/drawscore.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/activity/__pycache__/dualteamscore.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/activity/__pycache__/freeforallvictory.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/activity/__pycache__/multiteamjoin.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/activity/__pycache__/multiteamscore.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/activity/__pycache__/multiteamvictory.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/activity/__pycache__/__init__.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/activity/__pycache__/coopjoin.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/activity/__pycache__/coopscore.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/activity/__pycache__/drawscore.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/activity/__pycache__/dualteamscore.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/activity/__pycache__/freeforallvictory.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/activity/__pycache__/multiteamjoin.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/activity/__pycache__/multiteamscore.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/activity/__pycache__/multiteamvictory.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/activity/coopjoin.py",
|
||||
"ba_data/python/bastd/activity/coopscore.py",
|
||||
"ba_data/python/bastd/activity/drawscore.py",
|
||||
@ -166,27 +166,27 @@
|
||||
"ba_data/python/bastd/activity/multiteamscore.py",
|
||||
"ba_data/python/bastd/activity/multiteamvictory.py",
|
||||
"ba_data/python/bastd/actor/__init__.py",
|
||||
"ba_data/python/bastd/actor/__pycache__/__init__.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/actor/__pycache__/background.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/actor/__pycache__/bomb.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/actor/__pycache__/controlsguide.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/actor/__pycache__/flag.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/actor/__pycache__/image.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/actor/__pycache__/onscreencountdown.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/actor/__pycache__/onscreentimer.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/actor/__pycache__/playerspaz.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/actor/__pycache__/popuptext.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/actor/__pycache__/powerupbox.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/actor/__pycache__/respawnicon.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/actor/__pycache__/scoreboard.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/actor/__pycache__/spawner.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/actor/__pycache__/spaz.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/actor/__pycache__/spazappearance.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/actor/__pycache__/spazbot.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/actor/__pycache__/spazfactory.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/actor/__pycache__/text.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/actor/__pycache__/tipstext.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/actor/__pycache__/zoomtext.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/actor/__pycache__/__init__.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/actor/__pycache__/background.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/actor/__pycache__/bomb.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/actor/__pycache__/controlsguide.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/actor/__pycache__/flag.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/actor/__pycache__/image.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/actor/__pycache__/onscreencountdown.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/actor/__pycache__/onscreentimer.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/actor/__pycache__/playerspaz.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/actor/__pycache__/popuptext.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/actor/__pycache__/powerupbox.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/actor/__pycache__/respawnicon.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/actor/__pycache__/scoreboard.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/actor/__pycache__/spawner.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/actor/__pycache__/spaz.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/actor/__pycache__/spazappearance.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/actor/__pycache__/spazbot.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/actor/__pycache__/spazfactory.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/actor/__pycache__/text.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/actor/__pycache__/tipstext.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/actor/__pycache__/zoomtext.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/actor/background.py",
|
||||
"ba_data/python/bastd/actor/bomb.py",
|
||||
"ba_data/python/bastd/actor/controlsguide.py",
|
||||
@ -209,25 +209,25 @@
|
||||
"ba_data/python/bastd/actor/zoomtext.py",
|
||||
"ba_data/python/bastd/appdelegate.py",
|
||||
"ba_data/python/bastd/game/__init__.py",
|
||||
"ba_data/python/bastd/game/__pycache__/__init__.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/game/__pycache__/assault.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/game/__pycache__/capturetheflag.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/game/__pycache__/chosenone.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/game/__pycache__/conquest.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/game/__pycache__/deathmatch.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/game/__pycache__/easteregghunt.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/game/__pycache__/elimination.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/game/__pycache__/football.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/game/__pycache__/hockey.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/game/__pycache__/keepaway.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/game/__pycache__/kingofthehill.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/game/__pycache__/meteorshower.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/game/__pycache__/ninjafight.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/game/__pycache__/onslaught.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/game/__pycache__/race.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/game/__pycache__/runaround.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/game/__pycache__/targetpractice.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/game/__pycache__/thelaststand.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/game/__pycache__/__init__.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/game/__pycache__/assault.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/game/__pycache__/capturetheflag.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/game/__pycache__/chosenone.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/game/__pycache__/conquest.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/game/__pycache__/deathmatch.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/game/__pycache__/easteregghunt.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/game/__pycache__/elimination.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/game/__pycache__/football.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/game/__pycache__/hockey.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/game/__pycache__/keepaway.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/game/__pycache__/kingofthehill.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/game/__pycache__/meteorshower.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/game/__pycache__/ninjafight.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/game/__pycache__/onslaught.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/game/__pycache__/race.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/game/__pycache__/runaround.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/game/__pycache__/targetpractice.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/game/__pycache__/thelaststand.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/game/assault.py",
|
||||
"ba_data/python/bastd/game/capturetheflag.py",
|
||||
"ba_data/python/bastd/game/chosenone.py",
|
||||
@ -248,29 +248,29 @@
|
||||
"ba_data/python/bastd/game/thelaststand.py",
|
||||
"ba_data/python/bastd/gameutils.py",
|
||||
"ba_data/python/bastd/keyboard/__init__.py",
|
||||
"ba_data/python/bastd/keyboard/__pycache__/__init__.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/keyboard/__pycache__/englishkeyboard.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/keyboard/__pycache__/__init__.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/keyboard/__pycache__/englishkeyboard.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/keyboard/englishkeyboard.py",
|
||||
"ba_data/python/bastd/mainmenu.py",
|
||||
"ba_data/python/bastd/mapdata/__init__.py",
|
||||
"ba_data/python/bastd/mapdata/__pycache__/__init__.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/mapdata/__pycache__/big_g.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/mapdata/__pycache__/bridgit.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/mapdata/__pycache__/courtyard.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/mapdata/__pycache__/crag_castle.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/mapdata/__pycache__/doom_shroom.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/mapdata/__pycache__/football_stadium.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/mapdata/__pycache__/happy_thoughts.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/mapdata/__pycache__/hockey_stadium.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/mapdata/__pycache__/lake_frigid.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/mapdata/__pycache__/monkey_face.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/mapdata/__pycache__/rampage.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/mapdata/__pycache__/roundabout.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/mapdata/__pycache__/step_right_up.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/mapdata/__pycache__/the_pad.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/mapdata/__pycache__/tip_top.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/mapdata/__pycache__/tower_d.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/mapdata/__pycache__/zig_zag.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/mapdata/__pycache__/__init__.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/mapdata/__pycache__/big_g.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/mapdata/__pycache__/bridgit.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/mapdata/__pycache__/courtyard.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/mapdata/__pycache__/crag_castle.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/mapdata/__pycache__/doom_shroom.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/mapdata/__pycache__/football_stadium.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/mapdata/__pycache__/happy_thoughts.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/mapdata/__pycache__/hockey_stadium.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/mapdata/__pycache__/lake_frigid.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/mapdata/__pycache__/monkey_face.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/mapdata/__pycache__/rampage.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/mapdata/__pycache__/roundabout.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/mapdata/__pycache__/step_right_up.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/mapdata/__pycache__/the_pad.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/mapdata/__pycache__/tip_top.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/mapdata/__pycache__/tower_d.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/mapdata/__pycache__/zig_zag.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/mapdata/big_g.py",
|
||||
"ba_data/python/bastd/mapdata/bridgit.py",
|
||||
"ba_data/python/bastd/mapdata/courtyard.py",
|
||||
@ -290,57 +290,57 @@
|
||||
"ba_data/python/bastd/mapdata/zig_zag.py",
|
||||
"ba_data/python/bastd/maps.py",
|
||||
"ba_data/python/bastd/session/__init__.py",
|
||||
"ba_data/python/bastd/session/__pycache__/__init__.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/session/__pycache__/__init__.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/stdmap.py",
|
||||
"ba_data/python/bastd/tutorial.py",
|
||||
"ba_data/python/bastd/ui/__init__.py",
|
||||
"ba_data/python/bastd/ui/__pycache__/__init__.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/achievements.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/appinvite.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/characterpicker.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/colorpicker.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/config.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/configerror.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/confirm.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/continues.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/creditslist.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/debug.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/feedback.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/fileselector.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/getcurrency.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/getremote.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/helpui.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/iconpicker.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/kiosk.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/mainmenu.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/onscreenkeyboard.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/party.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/partyqueue.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/play.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/playoptions.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/popup.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/promocode.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/purchase.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/qrcode.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/radiogroup.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/report.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/resourcetypeinfo.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/serverdialog.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/specialoffer.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/tabs.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/teamnamescolors.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/telnet.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/tournamententry.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/tournamentscores.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/trophies.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/url.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/watch.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/__init__.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/achievements.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/appinvite.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/characterpicker.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/colorpicker.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/config.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/configerror.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/confirm.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/continues.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/creditslist.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/debug.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/feedback.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/fileselector.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/getcurrency.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/getremote.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/helpui.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/iconpicker.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/kiosk.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/mainmenu.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/onscreenkeyboard.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/party.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/partyqueue.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/play.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/playoptions.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/popup.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/promocode.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/purchase.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/qrcode.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/radiogroup.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/report.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/resourcetypeinfo.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/serverdialog.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/specialoffer.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/tabs.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/teamnamescolors.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/telnet.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/tournamententry.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/tournamentscores.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/trophies.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/url.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/__pycache__/watch.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/account/__init__.py",
|
||||
"ba_data/python/bastd/ui/account/__pycache__/__init__.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/account/__pycache__/link.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/account/__pycache__/settings.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/account/__pycache__/unlink.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/account/__pycache__/viewer.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/account/__pycache__/__init__.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/account/__pycache__/link.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/account/__pycache__/settings.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/account/__pycache__/unlink.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/account/__pycache__/viewer.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/account/link.py",
|
||||
"ba_data/python/bastd/ui/account/settings.py",
|
||||
"ba_data/python/bastd/ui/account/unlink.py",
|
||||
@ -354,10 +354,10 @@
|
||||
"ba_data/python/bastd/ui/confirm.py",
|
||||
"ba_data/python/bastd/ui/continues.py",
|
||||
"ba_data/python/bastd/ui/coop/__init__.py",
|
||||
"ba_data/python/bastd/ui/coop/__pycache__/__init__.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/coop/__pycache__/browser.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/coop/__pycache__/gamebutton.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/coop/__pycache__/level.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/coop/__pycache__/__init__.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/coop/__pycache__/browser.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/coop/__pycache__/gamebutton.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/coop/__pycache__/level.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/coop/browser.py",
|
||||
"ba_data/python/bastd/ui/coop/gamebutton.py",
|
||||
"ba_data/python/bastd/ui/coop/level.py",
|
||||
@ -366,12 +366,12 @@
|
||||
"ba_data/python/bastd/ui/feedback.py",
|
||||
"ba_data/python/bastd/ui/fileselector.py",
|
||||
"ba_data/python/bastd/ui/gather/__init__.py",
|
||||
"ba_data/python/bastd/ui/gather/__pycache__/__init__.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/gather/__pycache__/abouttab.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/gather/__pycache__/manualtab.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/gather/__pycache__/nearbytab.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/gather/__pycache__/privatetab.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/gather/__pycache__/publictab.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/gather/__pycache__/__init__.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/gather/__pycache__/abouttab.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/gather/__pycache__/manualtab.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/gather/__pycache__/nearbytab.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/gather/__pycache__/privatetab.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/gather/__pycache__/publictab.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/gather/abouttab.py",
|
||||
"ba_data/python/bastd/ui/gather/manualtab.py",
|
||||
"ba_data/python/bastd/ui/gather/nearbytab.py",
|
||||
@ -383,9 +383,9 @@
|
||||
"ba_data/python/bastd/ui/iconpicker.py",
|
||||
"ba_data/python/bastd/ui/kiosk.py",
|
||||
"ba_data/python/bastd/ui/league/__init__.py",
|
||||
"ba_data/python/bastd/ui/league/__pycache__/__init__.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/league/__pycache__/rankbutton.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/league/__pycache__/rankwindow.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/league/__pycache__/__init__.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/league/__pycache__/rankbutton.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/league/__pycache__/rankwindow.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/league/rankbutton.py",
|
||||
"ba_data/python/bastd/ui/league/rankwindow.py",
|
||||
"ba_data/python/bastd/ui/mainmenu.py",
|
||||
@ -394,15 +394,15 @@
|
||||
"ba_data/python/bastd/ui/partyqueue.py",
|
||||
"ba_data/python/bastd/ui/play.py",
|
||||
"ba_data/python/bastd/ui/playlist/__init__.py",
|
||||
"ba_data/python/bastd/ui/playlist/__pycache__/__init__.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/playlist/__pycache__/addgame.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/playlist/__pycache__/browser.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/playlist/__pycache__/customizebrowser.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/playlist/__pycache__/edit.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/playlist/__pycache__/editcontroller.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/playlist/__pycache__/editgame.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/playlist/__pycache__/mapselect.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/playlist/__pycache__/share.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/playlist/__pycache__/__init__.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/playlist/__pycache__/addgame.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/playlist/__pycache__/browser.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/playlist/__pycache__/customizebrowser.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/playlist/__pycache__/edit.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/playlist/__pycache__/editcontroller.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/playlist/__pycache__/editgame.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/playlist/__pycache__/mapselect.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/playlist/__pycache__/share.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/playlist/addgame.py",
|
||||
"ba_data/python/bastd/ui/playlist/browser.py",
|
||||
"ba_data/python/bastd/ui/playlist/customizebrowser.py",
|
||||
@ -414,10 +414,10 @@
|
||||
"ba_data/python/bastd/ui/playoptions.py",
|
||||
"ba_data/python/bastd/ui/popup.py",
|
||||
"ba_data/python/bastd/ui/profile/__init__.py",
|
||||
"ba_data/python/bastd/ui/profile/__pycache__/__init__.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/profile/__pycache__/browser.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/profile/__pycache__/edit.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/profile/__pycache__/upgrade.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/profile/__pycache__/__init__.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/profile/__pycache__/browser.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/profile/__pycache__/edit.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/profile/__pycache__/upgrade.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/profile/browser.py",
|
||||
"ba_data/python/bastd/ui/profile/edit.py",
|
||||
"ba_data/python/bastd/ui/profile/upgrade.py",
|
||||
@ -429,25 +429,25 @@
|
||||
"ba_data/python/bastd/ui/resourcetypeinfo.py",
|
||||
"ba_data/python/bastd/ui/serverdialog.py",
|
||||
"ba_data/python/bastd/ui/settings/__init__.py",
|
||||
"ba_data/python/bastd/ui/settings/__pycache__/__init__.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/settings/__pycache__/advanced.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/settings/__pycache__/allsettings.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/settings/__pycache__/audio.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/settings/__pycache__/controls.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/settings/__pycache__/gamepad.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/settings/__pycache__/gamepadadvanced.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/settings/__pycache__/gamepadselect.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/settings/__pycache__/graphics.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/settings/__pycache__/keyboard.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/settings/__pycache__/nettesting.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/settings/__pycache__/plugins.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/settings/__pycache__/ps3controller.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/settings/__pycache__/remoteapp.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/settings/__pycache__/testing.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/settings/__pycache__/touchscreen.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/settings/__pycache__/vrtesting.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/settings/__pycache__/wiimote.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/settings/__pycache__/xbox360controller.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/settings/__pycache__/__init__.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/settings/__pycache__/advanced.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/settings/__pycache__/allsettings.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/settings/__pycache__/audio.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/settings/__pycache__/controls.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/settings/__pycache__/gamepad.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/settings/__pycache__/gamepadadvanced.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/settings/__pycache__/gamepadselect.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/settings/__pycache__/graphics.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/settings/__pycache__/keyboard.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/settings/__pycache__/nettesting.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/settings/__pycache__/plugins.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/settings/__pycache__/ps3controller.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/settings/__pycache__/remoteapp.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/settings/__pycache__/testing.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/settings/__pycache__/touchscreen.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/settings/__pycache__/vrtesting.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/settings/__pycache__/wiimote.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/settings/__pycache__/xbox360controller.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/settings/advanced.py",
|
||||
"ba_data/python/bastd/ui/settings/allsettings.py",
|
||||
"ba_data/python/bastd/ui/settings/audio.py",
|
||||
@ -467,21 +467,21 @@
|
||||
"ba_data/python/bastd/ui/settings/wiimote.py",
|
||||
"ba_data/python/bastd/ui/settings/xbox360controller.py",
|
||||
"ba_data/python/bastd/ui/soundtrack/__init__.py",
|
||||
"ba_data/python/bastd/ui/soundtrack/__pycache__/__init__.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/soundtrack/__pycache__/browser.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/soundtrack/__pycache__/edit.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/soundtrack/__pycache__/entrytypeselect.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/soundtrack/__pycache__/macmusicapp.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/soundtrack/__pycache__/__init__.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/soundtrack/__pycache__/browser.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/soundtrack/__pycache__/edit.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/soundtrack/__pycache__/entrytypeselect.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/soundtrack/__pycache__/macmusicapp.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/soundtrack/browser.py",
|
||||
"ba_data/python/bastd/ui/soundtrack/edit.py",
|
||||
"ba_data/python/bastd/ui/soundtrack/entrytypeselect.py",
|
||||
"ba_data/python/bastd/ui/soundtrack/macmusicapp.py",
|
||||
"ba_data/python/bastd/ui/specialoffer.py",
|
||||
"ba_data/python/bastd/ui/store/__init__.py",
|
||||
"ba_data/python/bastd/ui/store/__pycache__/__init__.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/store/__pycache__/browser.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/store/__pycache__/button.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/store/__pycache__/item.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/store/__pycache__/__init__.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/store/__pycache__/browser.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/store/__pycache__/button.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/store/__pycache__/item.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/bastd/ui/store/browser.py",
|
||||
"ba_data/python/bastd/ui/store/button.py",
|
||||
"ba_data/python/bastd/ui/store/item.py",
|
||||
@ -494,21 +494,21 @@
|
||||
"ba_data/python/bastd/ui/url.py",
|
||||
"ba_data/python/bastd/ui/watch.py",
|
||||
"ba_data/python/efro/__init__.py",
|
||||
"ba_data/python/efro/__pycache__/__init__.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/efro/__pycache__/call.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/efro/__pycache__/error.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/efro/__pycache__/message.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/efro/__pycache__/terminal.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/efro/__pycache__/util.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/efro/__pycache__/__init__.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/efro/__pycache__/call.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/efro/__pycache__/error.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/efro/__pycache__/message.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/efro/__pycache__/terminal.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/efro/__pycache__/util.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/efro/call.py",
|
||||
"ba_data/python/efro/dataclassio/__init__.py",
|
||||
"ba_data/python/efro/dataclassio/__pycache__/__init__.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/efro/dataclassio/__pycache__/_base.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/efro/dataclassio/__pycache__/_inputter.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/efro/dataclassio/__pycache__/_outputter.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/efro/dataclassio/__pycache__/_pathcapture.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/efro/dataclassio/__pycache__/_prep.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/efro/dataclassio/__pycache__/extras.cpython-38.opt-1.pyc",
|
||||
"ba_data/python/efro/dataclassio/__pycache__/__init__.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/efro/dataclassio/__pycache__/_base.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/efro/dataclassio/__pycache__/_inputter.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/efro/dataclassio/__pycache__/_outputter.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/efro/dataclassio/__pycache__/_pathcapture.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/efro/dataclassio/__pycache__/_prep.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/efro/dataclassio/__pycache__/extras.cpython-39.opt-1.pyc",
|
||||
"ba_data/python/efro/dataclassio/_base.py",
|
||||
"ba_data/python/efro/dataclassio/_inputter.py",
|
||||
"ba_data/python/efro/dataclassio/_outputter.py",
|
||||
@ -519,6 +519,6 @@
|
||||
"ba_data/python/efro/message.py",
|
||||
"ba_data/python/efro/terminal.py",
|
||||
"ba_data/python/efro/util.py",
|
||||
"server/__pycache__/ballisticacore_server.cpython-38.opt-1.pyc",
|
||||
"server/__pycache__/ballisticacore_server.cpython-39.opt-1.pyc",
|
||||
"server/ballisticacore_server.py"
|
||||
]
|
||||
4118
assets/Makefile
4118
assets/Makefile
File diff suppressed because it is too large
Load Diff
@ -1 +1 @@
|
||||
67151430861016518839485378649631062235
|
||||
291441930138756424684870937756526517762
|
||||
@ -37,8 +37,7 @@ from typing import TYPE_CHECKING, overload, Sequence, TypeVar
|
||||
from ba._generated.enums import TimeFormat, TimeType
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import (Any, Dict, Callable, Tuple, List, Optional, Union,
|
||||
List, Type, Literal)
|
||||
from typing import Any, Callable, Optional, Union, Literal
|
||||
from ba._app import App
|
||||
import ba
|
||||
|
||||
@ -386,9 +385,9 @@ class Material:
|
||||
label: str
|
||||
|
||||
def add_actions(self,
|
||||
actions: Tuple,
|
||||
conditions: Optional[Tuple] = None) -> None:
|
||||
"""add_actions(actions: Tuple, conditions: Optional[Tuple] = None)
|
||||
actions: tuple,
|
||||
conditions: Optional[tuple] = None) -> None:
|
||||
"""add_actions(actions: tuple, conditions: Optional[tuple] = None)
|
||||
-> None
|
||||
|
||||
Add one or more actions to the material, optionally with conditions.
|
||||
@ -724,16 +723,16 @@ class Node:
|
||||
# Show that ur return type varies based on "doraise" value:
|
||||
@overload
|
||||
def getdelegate(self,
|
||||
type: Type[_T],
|
||||
type: type[_T],
|
||||
doraise: Literal[False] = False) -> Optional[_T]:
|
||||
...
|
||||
|
||||
@overload
|
||||
def getdelegate(self, type: Type[_T], doraise: Literal[True]) -> _T:
|
||||
def getdelegate(self, type: type[_T], doraise: Literal[True]) -> _T:
|
||||
...
|
||||
|
||||
def getdelegate(self, type: Any, doraise: bool = False) -> Any:
|
||||
"""getdelegate(type: Type, doraise: bool = False) -> <varies>
|
||||
"""getdelegate(type: type, doraise: bool = False) -> <varies>
|
||||
|
||||
Return the node's current delegate object if it matches a certain type.
|
||||
|
||||
@ -849,9 +848,9 @@ class SessionPlayer:
|
||||
character: str
|
||||
activityplayer: Optional[ba.Player]
|
||||
|
||||
def assigninput(self, type: Union[ba.InputType, Tuple[ba.InputType, ...]],
|
||||
def assigninput(self, type: Union[ba.InputType, tuple[ba.InputType, ...]],
|
||||
call: Callable) -> None:
|
||||
"""assigninput(type: Union[ba.InputType, Tuple[ba.InputType, ...]],
|
||||
"""assigninput(type: Union[ba.InputType, tuple[ba.InputType, ...]],
|
||||
call: Callable) -> None
|
||||
|
||||
Set the python callable to be run for one or more types of input.
|
||||
@ -877,15 +876,15 @@ class SessionPlayer:
|
||||
"""
|
||||
return str()
|
||||
|
||||
def get_icon(self) -> Dict[str, Any]:
|
||||
"""get_icon() -> Dict[str, Any]
|
||||
def get_icon(self) -> dict[str, Any]:
|
||||
"""get_icon() -> dict[str, Any]
|
||||
|
||||
Returns the character's icon (images, colors, etc contained in a dict)
|
||||
"""
|
||||
return {'foo': 'bar'}
|
||||
|
||||
def get_icon_info(self) -> Dict[str, Any]:
|
||||
"""get_icon_info() -> Dict[str, Any]
|
||||
def get_icon_info(self) -> dict[str, Any]:
|
||||
"""get_icon_info() -> dict[str, Any]
|
||||
|
||||
(internal)
|
||||
"""
|
||||
@ -1203,15 +1202,15 @@ class Widget:
|
||||
"""
|
||||
return bool()
|
||||
|
||||
def get_children(self) -> List[ba.Widget]:
|
||||
"""get_children() -> List[ba.Widget]
|
||||
def get_children(self) -> list[ba.Widget]:
|
||||
"""get_children() -> list[ba.Widget]
|
||||
|
||||
Returns any child Widgets of this Widget.
|
||||
"""
|
||||
return [Widget()]
|
||||
|
||||
def get_screen_space_center(self) -> Tuple[float, float]:
|
||||
"""get_screen_space_center() -> Tuple[float, float]
|
||||
def get_screen_space_center(self) -> tuple[float, float]:
|
||||
"""get_screen_space_center() -> tuple[float, float]
|
||||
|
||||
Returns the coords of the Widget center relative to the center of the
|
||||
screen. This can be useful for placing pop-up windows and other special
|
||||
@ -1993,8 +1992,8 @@ def get_account_type() -> str:
|
||||
return str()
|
||||
|
||||
|
||||
def get_appconfig_builtin_keys() -> List[str]:
|
||||
"""get_appconfig_builtin_keys() -> List[str]
|
||||
def get_appconfig_builtin_keys() -> list[str]:
|
||||
"""get_appconfig_builtin_keys() -> list[str]
|
||||
|
||||
(internal)
|
||||
"""
|
||||
@ -2009,8 +2008,8 @@ def get_appconfig_default_value(key: str) -> Any:
|
||||
return _uninferrable()
|
||||
|
||||
|
||||
def get_chat_messages() -> List[str]:
|
||||
"""get_chat_messages() -> List[str]
|
||||
def get_chat_messages() -> list[str]:
|
||||
"""get_chat_messages() -> list[str]
|
||||
|
||||
(internal)
|
||||
"""
|
||||
@ -2050,8 +2049,8 @@ def get_connection_to_host_info() -> dict:
|
||||
return dict()
|
||||
|
||||
|
||||
def get_display_resolution() -> Optional[Tuple[int, int]]:
|
||||
"""get_display_resolution() -> Optional[Tuple[int, int]]
|
||||
def get_display_resolution() -> Optional[tuple[int, int]]:
|
||||
"""get_display_resolution() -> Optional[tuple[int, int]]
|
||||
|
||||
(internal)
|
||||
|
||||
@ -2095,8 +2094,8 @@ def get_game_port() -> int:
|
||||
return int()
|
||||
|
||||
|
||||
def get_game_roster() -> List[Dict[str, Any]]:
|
||||
"""get_game_roster() -> List[Dict[str, Any]]
|
||||
def get_game_roster() -> list[dict[str, Any]]:
|
||||
"""get_game_roster() -> list[dict[str, Any]]
|
||||
|
||||
(internal)
|
||||
"""
|
||||
@ -2895,8 +2894,8 @@ def mac_music_app_get_library_source() -> None:
|
||||
return None
|
||||
|
||||
|
||||
def mac_music_app_get_playlists() -> List[str]:
|
||||
"""mac_music_app_get_playlists() -> List[str]
|
||||
def mac_music_app_get_playlists() -> list[str]:
|
||||
"""mac_music_app_get_playlists() -> list[str]
|
||||
|
||||
(internal)
|
||||
"""
|
||||
@ -3001,9 +3000,9 @@ def music_player_stop() -> None:
|
||||
return None
|
||||
|
||||
|
||||
def new_host_session(sessiontype: Type[ba.Session],
|
||||
def new_host_session(sessiontype: type[ba.Session],
|
||||
benchmark_type: str = None) -> None:
|
||||
"""new_host_session(sessiontype: Type[ba.Session],
|
||||
"""new_host_session(sessiontype: type[ba.Session],
|
||||
benchmark_type: str = None) -> None
|
||||
|
||||
(internal)
|
||||
@ -3019,9 +3018,9 @@ def new_replay_session(file_name: str) -> None:
|
||||
return None
|
||||
|
||||
|
||||
def newactivity(activity_type: Type[ba.Activity],
|
||||
def newactivity(activity_type: type[ba.Activity],
|
||||
settings: dict = None) -> ba.Activity:
|
||||
"""newactivity(activity_type: Type[ba.Activity],
|
||||
"""newactivity(activity_type: type[ba.Activity],
|
||||
settings: dict = None) -> ba.Activity
|
||||
|
||||
Instantiates a ba.Activity given a type object.
|
||||
@ -3370,9 +3369,9 @@ def run_transactions() -> None:
|
||||
|
||||
|
||||
def safecolor(color: Sequence[float],
|
||||
target_intensity: float = 0.6) -> Tuple[float, ...]:
|
||||
target_intensity: float = 0.6) -> tuple[float, ...]:
|
||||
"""safecolor(color: Sequence[float], target_intensity: float = 0.6)
|
||||
-> Tuple[float, ...]
|
||||
-> tuple[float, ...]
|
||||
|
||||
Given a color tuple, return a color safe to display as text.
|
||||
|
||||
@ -3387,13 +3386,13 @@ def safecolor(color: Sequence[float],
|
||||
def screenmessage(message: Union[str, ba.Lstr],
|
||||
color: Sequence[float] = None,
|
||||
top: bool = False,
|
||||
image: Dict[str, Any] = None,
|
||||
image: dict[str, Any] = None,
|
||||
log: bool = False,
|
||||
clients: Sequence[int] = None,
|
||||
transient: bool = False) -> None:
|
||||
"""screenmessage(message: Union[str, ba.Lstr],
|
||||
color: Sequence[float] = None, top: bool = False,
|
||||
image: Dict[str, Any] = None, log: bool = False,
|
||||
image: dict[str, Any] = None, log: bool = False,
|
||||
clients: Sequence[int] = None, transient: bool = False) -> None
|
||||
|
||||
Print a message to the local client's screen, in a given color.
|
||||
@ -3456,8 +3455,8 @@ def scrollwidget(edit: ba.Widget = None,
|
||||
return ba.Widget()
|
||||
|
||||
|
||||
def set_admins(admins: List[str]) -> None:
|
||||
"""set_admins(admins: List[str]) -> None
|
||||
def set_admins(admins: list[str]) -> None:
|
||||
"""set_admins(admins: list[str]) -> None
|
||||
|
||||
(internal)
|
||||
"""
|
||||
@ -3513,10 +3512,10 @@ def set_have_mods(have_mods: bool) -> None:
|
||||
|
||||
|
||||
def set_internal_language_keys(
|
||||
listobj: List[Tuple[str, str]],
|
||||
random_names_list: List[Tuple[str, str]]) -> None:
|
||||
"""set_internal_language_keys(listobj: List[Tuple[str, str]],
|
||||
random_names_list: List[Tuple[str, str]]) -> None
|
||||
listobj: list[tuple[str, str]],
|
||||
random_names_list: list[tuple[str, str]]) -> None:
|
||||
"""set_internal_language_keys(listobj: list[tuple[str, str]],
|
||||
random_names_list: list[tuple[str, str]]) -> None
|
||||
|
||||
(internal)
|
||||
"""
|
||||
@ -3532,8 +3531,8 @@ def set_low_level_config_value(key: str, value: int) -> None:
|
||||
|
||||
|
||||
def set_map_bounds(
|
||||
bounds: Tuple[float, float, float, float, float, float]) -> None:
|
||||
"""set_map_bounds(bounds: Tuple[float, float, float, float, float, float])
|
||||
bounds: tuple[float, float, float, float, float, float]) -> None:
|
||||
"""set_map_bounds(bounds: tuple[float, float, float, float, float, float])
|
||||
-> None
|
||||
|
||||
(internal)
|
||||
@ -4020,18 +4019,18 @@ def timer(time: float,
|
||||
return None
|
||||
|
||||
|
||||
def tournament_query(callback: Callable[[Optional[Dict]], None],
|
||||
args: Dict) -> None:
|
||||
"""tournament_query(callback: Callable[[Optional[Dict]], None],
|
||||
args: Dict) -> None
|
||||
def tournament_query(callback: Callable[[Optional[dict]], None],
|
||||
args: dict) -> None:
|
||||
"""tournament_query(callback: Callable[[Optional[dict]], None],
|
||||
args: dict) -> None
|
||||
|
||||
(internal)
|
||||
"""
|
||||
return None
|
||||
|
||||
|
||||
def uibounds() -> Tuple[float, float, float, float]:
|
||||
"""uibounds() -> Tuple[float, float, float, float]
|
||||
def uibounds() -> tuple[float, float, float, float]:
|
||||
"""uibounds() -> tuple[float, float, float, float]
|
||||
|
||||
(internal)
|
||||
|
||||
|
||||
@ -11,7 +11,7 @@ from typing import TYPE_CHECKING
|
||||
import _ba
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Any, Optional, Dict, List, Tuple
|
||||
from typing import Any, Optional
|
||||
import ba
|
||||
|
||||
|
||||
@ -24,16 +24,16 @@ class AccountSubsystem:
|
||||
"""
|
||||
|
||||
def __init__(self) -> None:
|
||||
self.account_tournament_list: Optional[Tuple[int, List[str]]] = None
|
||||
self.account_tournament_list: Optional[tuple[int, list[str]]] = None
|
||||
|
||||
# FIXME: should abstract/structure these.
|
||||
self.tournament_info: Dict = {}
|
||||
self.league_rank_cache: Dict = {}
|
||||
self.tournament_info: dict = {}
|
||||
self.league_rank_cache: dict = {}
|
||||
self.last_post_purchase_message_time: Optional[float] = None
|
||||
|
||||
# If we try to run promo-codes due to launch-args/etc we might
|
||||
# not be signed in yet; go ahead and queue them up in that case.
|
||||
self.pending_promo_codes: List[str] = []
|
||||
self.pending_promo_codes: list[str] = []
|
||||
|
||||
def on_app_launch(self) -> None:
|
||||
"""Called when the app is done bootstrapping."""
|
||||
@ -74,7 +74,7 @@ class AccountSubsystem:
|
||||
return self.league_rank_cache.get('info', None)
|
||||
|
||||
def get_league_rank_points(self,
|
||||
data: Optional[Dict[str, Any]],
|
||||
data: Optional[dict[str, Any]],
|
||||
subset: str = None) -> int:
|
||||
"""(internal)"""
|
||||
if data is None:
|
||||
@ -132,7 +132,7 @@ class AccountSubsystem:
|
||||
TimeFormat.MILLISECONDS)
|
||||
cache_entry['valid'] = True
|
||||
|
||||
def get_purchased_icons(self) -> List[str]:
|
||||
def get_purchased_icons(self) -> list[str]:
|
||||
"""(internal)"""
|
||||
# pylint: disable=cyclic-import
|
||||
from ba import _store
|
||||
|
||||
@ -9,7 +9,7 @@ import _ba
|
||||
from ba._error import print_exception
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Any, Sequence, List, Dict, Union, Optional, Tuple, Set
|
||||
from typing import Any, Sequence, Union, Optional
|
||||
import ba
|
||||
|
||||
# This could use some cleanup.
|
||||
@ -71,11 +71,11 @@ class AchievementSubsystem:
|
||||
"""
|
||||
|
||||
def __init__(self) -> None:
|
||||
self.achievements: List[Achievement] = []
|
||||
self.achievements_to_display: (List[Tuple[ba.Achievement, bool]]) = []
|
||||
self.achievements: list[Achievement] = []
|
||||
self.achievements_to_display: (list[tuple[ba.Achievement, bool]]) = []
|
||||
self.achievement_display_timer: Optional[_ba.Timer] = None
|
||||
self.last_achievement_display_time: float = 0.0
|
||||
self.achievement_completion_banner_slots: Set[int] = set()
|
||||
self.achievement_completion_banner_slots: set[int] = set()
|
||||
self._init_achievements()
|
||||
|
||||
def _init_achievements(self) -> None:
|
||||
@ -374,7 +374,7 @@ class AchievementSubsystem:
|
||||
return achs[0]
|
||||
|
||||
def achievements_for_coop_level(self,
|
||||
level_name: str) -> List[Achievement]:
|
||||
level_name: str) -> list[Achievement]:
|
||||
"""Given a level name, return achievements available for it."""
|
||||
|
||||
# For the Easy campaign we return achievements for the Default
|
||||
@ -612,7 +612,7 @@ class Achievement:
|
||||
delay: float,
|
||||
outdelay: float = None,
|
||||
color: Sequence[float] = None,
|
||||
style: str = 'post_game') -> List[ba.Actor]:
|
||||
style: str = 'post_game') -> list[ba.Actor]:
|
||||
"""Create a display for the Achievement.
|
||||
|
||||
Shows the Achievement icon, name, and description.
|
||||
@ -663,7 +663,7 @@ class Achievement:
|
||||
print_exception('Error determining campaign.')
|
||||
hmo = False
|
||||
|
||||
objs: List[ba.Actor]
|
||||
objs: list[ba.Actor]
|
||||
|
||||
if in_game_colors:
|
||||
objs = []
|
||||
@ -898,12 +898,12 @@ class Achievement:
|
||||
transition_out_delay=None).autoretain())
|
||||
return objs
|
||||
|
||||
def _getconfig(self) -> Dict[str, Any]:
|
||||
def _getconfig(self) -> dict[str, Any]:
|
||||
"""
|
||||
Return the sub-dict in settings where this achievement's
|
||||
state is stored, creating it if need be.
|
||||
"""
|
||||
val: Dict[str, Any] = (_ba.app.config.setdefault(
|
||||
val: dict[str, Any] = (_ba.app.config.setdefault(
|
||||
'Achievements', {}).setdefault(self._name, {'Complete': False}))
|
||||
assert isinstance(val, dict)
|
||||
return val
|
||||
@ -971,7 +971,7 @@ class Achievement:
|
||||
i += 1
|
||||
assert self._completion_banner_slot is not None
|
||||
y_offs = 110 * self._completion_banner_slot
|
||||
objs: List[ba.Actor] = []
|
||||
objs: list[ba.Actor] = []
|
||||
obj = Image(_ba.gettexture('shadow'),
|
||||
position=(-30, 30 + y_offs),
|
||||
front=True,
|
||||
|
||||
@ -16,8 +16,7 @@ from ba._general import Call, verify_object_death
|
||||
from ba._messages import UNHANDLED
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from weakref import ReferenceType
|
||||
from typing import Optional, Type, Any, Dict, List
|
||||
from typing import Optional, Any
|
||||
import ba
|
||||
from bastd.actor.respawnicon import RespawnIcon
|
||||
|
||||
@ -58,9 +57,9 @@ class Activity(DependencyComponent, Generic[PlayerType, TeamType]):
|
||||
# pylint: disable=too-many-public-methods
|
||||
|
||||
# Annotating attr types at the class level lets us introspect at runtime.
|
||||
settings_raw: Dict[str, Any]
|
||||
teams: List[TeamType]
|
||||
players: List[PlayerType]
|
||||
settings_raw: dict[str, Any]
|
||||
teams: list[TeamType]
|
||||
players: list[PlayerType]
|
||||
|
||||
# Whether to print every time a player dies. This can be pertinent
|
||||
# in games such as Death-Match but can be annoying in games where it
|
||||
@ -150,8 +149,8 @@ class Activity(DependencyComponent, Generic[PlayerType, TeamType]):
|
||||
|
||||
# Player/Team types should have been specified as type args;
|
||||
# grab those.
|
||||
self._playertype: Type[PlayerType]
|
||||
self._teamtype: Type[TeamType]
|
||||
self._playertype: type[PlayerType]
|
||||
self._teamtype: type[TeamType]
|
||||
self._setup_player_and_team_types()
|
||||
|
||||
# FIXME: Relocate or remove the need for this stuff.
|
||||
@ -160,7 +159,7 @@ class Activity(DependencyComponent, Generic[PlayerType, TeamType]):
|
||||
self._session = weakref.ref(_ba.getsession())
|
||||
|
||||
# Preloaded data for actors, maps, etc; indexed by type.
|
||||
self.preloads: Dict[Type, Any] = {}
|
||||
self.preloads: dict[type, Any] = {}
|
||||
|
||||
# Hopefully can eventually kill this; activities should
|
||||
# validate/store whatever settings they need at init time
|
||||
@ -172,17 +171,17 @@ class Activity(DependencyComponent, Generic[PlayerType, TeamType]):
|
||||
self._has_ended = False
|
||||
self._activity_death_check_timer: Optional[ba.Timer] = None
|
||||
self._expired = False
|
||||
self._delay_delete_players: List[PlayerType] = []
|
||||
self._delay_delete_teams: List[TeamType] = []
|
||||
self._players_that_left: List[ReferenceType[PlayerType]] = []
|
||||
self._teams_that_left: List[ReferenceType[TeamType]] = []
|
||||
self._delay_delete_players: list[PlayerType] = []
|
||||
self._delay_delete_teams: list[TeamType] = []
|
||||
self._players_that_left: list[weakref.ref[PlayerType]] = []
|
||||
self._teams_that_left: list[weakref.ref[TeamType]] = []
|
||||
self._transitioning_out = False
|
||||
|
||||
# A handy place to put most actors; this list is pruned of dead
|
||||
# actors regularly and these actors are insta-killed as the activity
|
||||
# is dying.
|
||||
self._actor_refs: List[ba.Actor] = []
|
||||
self._actor_weak_refs: List[ReferenceType[ba.Actor]] = []
|
||||
self._actor_refs: list[ba.Actor] = []
|
||||
self._actor_weak_refs: list[weakref.ref[ba.Actor]] = []
|
||||
self._last_prune_dead_actors_time = _ba.time()
|
||||
self._prune_dead_actors_timer: Optional[ba.Timer] = None
|
||||
|
||||
@ -262,12 +261,12 @@ class Activity(DependencyComponent, Generic[PlayerType, TeamType]):
|
||||
return self._expired
|
||||
|
||||
@property
|
||||
def playertype(self) -> Type[PlayerType]:
|
||||
def playertype(self) -> type[PlayerType]:
|
||||
"""The type of ba.Player this Activity is using."""
|
||||
return self._playertype
|
||||
|
||||
@property
|
||||
def teamtype(self) -> Type[TeamType]:
|
||||
def teamtype(self) -> type[TeamType]:
|
||||
"""The type of ba.Team this Activity is using."""
|
||||
return self._teamtype
|
||||
|
||||
@ -709,8 +708,8 @@ class Activity(DependencyComponent, Generic[PlayerType, TeamType]):
|
||||
assert issubclass(self._teamtype, Team)
|
||||
|
||||
@classmethod
|
||||
def _check_activity_death(cls, activity_ref: ReferenceType[Activity],
|
||||
counter: List[int]) -> None:
|
||||
def _check_activity_death(cls, activity_ref: weakref.ref[Activity],
|
||||
counter: list[int]) -> None:
|
||||
"""Sanity check to make sure an Activity was destroyed properly.
|
||||
|
||||
Receives a weakref to a ba.Activity which should have torn itself
|
||||
|
||||
@ -14,7 +14,7 @@ from ba._player import EmptyPlayer # pylint: disable=W0611
|
||||
from ba._team import EmptyTeam # pylint: disable=W0611
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Any, Dict, Optional
|
||||
from typing import Optional
|
||||
import ba
|
||||
from ba._lobby import JoinInfo
|
||||
|
||||
|
||||
@ -21,7 +21,7 @@ from ba._net import NetworkSubsystem
|
||||
if TYPE_CHECKING:
|
||||
import ba
|
||||
from bastd.actor import spazappearance
|
||||
from typing import Optional, Dict, Set, Any, Type, Tuple, Callable, List
|
||||
from typing import Optional, Any, Callable
|
||||
|
||||
|
||||
class App:
|
||||
@ -167,7 +167,7 @@ class App:
|
||||
return self._env['vr_mode']
|
||||
|
||||
@property
|
||||
def ui_bounds(self) -> Tuple[float, float, float, float]:
|
||||
def ui_bounds(self) -> tuple[float, float, float, float]:
|
||||
"""Bounds of the 'safe' screen area in ui space.
|
||||
|
||||
This tuple contains: (x-min, x-max, y-min, y-max)
|
||||
@ -208,7 +208,7 @@ class App:
|
||||
self.allow_ticket_purchases: bool = not self.iircade_mode
|
||||
|
||||
# Misc.
|
||||
self.tips: List[str] = []
|
||||
self.tips: list[str] = []
|
||||
self.stress_test_reset_timer: Optional[ba.Timer] = None
|
||||
self.did_weak_call_warning = False
|
||||
|
||||
@ -225,7 +225,7 @@ class App:
|
||||
self.input_map_hash: Optional[str] = None
|
||||
|
||||
# Co-op Campaigns.
|
||||
self.campaigns: Dict[str, ba.Campaign] = {}
|
||||
self.campaigns: dict[str, ba.Campaign] = {}
|
||||
|
||||
# Server Mode.
|
||||
self.server: Optional[ba.ServerController] = None
|
||||
@ -250,27 +250,27 @@ class App:
|
||||
self.main_menu_last_news_fetch_time: Optional[float] = None
|
||||
|
||||
# Spaz.
|
||||
self.spaz_appearances: Dict[str, spazappearance.Appearance] = {}
|
||||
self.spaz_appearances: dict[str, spazappearance.Appearance] = {}
|
||||
self.last_spaz_turbo_warn_time: float = -99999.0
|
||||
|
||||
# Maps.
|
||||
self.maps: Dict[str, Type[ba.Map]] = {}
|
||||
self.maps: dict[str, type[ba.Map]] = {}
|
||||
|
||||
# Gameplay.
|
||||
self.teams_series_length = 7
|
||||
self.ffa_series_length = 24
|
||||
self.coop_session_args: Dict = {}
|
||||
self.coop_session_args: dict = {}
|
||||
|
||||
self.value_test_defaults: dict = {}
|
||||
self.first_main_menu = True # FIXME: Move to mainmenu class.
|
||||
self.did_menu_intro = False # FIXME: Move to mainmenu class.
|
||||
self.main_menu_window_refresh_check_count = 0 # FIXME: Mv to mainmenu.
|
||||
self.main_menu_resume_callbacks: list = [] # Can probably go away.
|
||||
self.special_offer: Optional[Dict] = None
|
||||
self.special_offer: Optional[dict] = None
|
||||
self.ping_thread_count = 0
|
||||
self.invite_confirm_windows: List[Any] = [] # FIXME: Don't use Any.
|
||||
self.store_layout: Optional[Dict[str, List[Dict[str, Any]]]] = None
|
||||
self.store_items: Optional[Dict[str, Dict]] = None
|
||||
self.invite_confirm_windows: list[Any] = [] # FIXME: Don't use Any.
|
||||
self.store_layout: Optional[dict[str, list[dict[str, Any]]]] = None
|
||||
self.store_items: Optional[dict[str, dict]] = None
|
||||
self.pro_sale_start_time: Optional[int] = None
|
||||
self.pro_sale_start_val: Optional[int] = None
|
||||
|
||||
@ -518,7 +518,7 @@ class App:
|
||||
def launch_coop_game(self,
|
||||
game: str,
|
||||
force: bool = False,
|
||||
args: Dict = None) -> bool:
|
||||
args: dict = None) -> bool:
|
||||
"""High level way to launch a local co-op session."""
|
||||
# pylint: disable=cyclic-import
|
||||
from ba._campaign import getcampaign
|
||||
|
||||
@ -8,7 +8,7 @@ from typing import TYPE_CHECKING
|
||||
import _ba
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Any, List, Tuple
|
||||
from typing import Any
|
||||
|
||||
|
||||
class AppConfig(dict):
|
||||
@ -57,7 +57,7 @@ class AppConfig(dict):
|
||||
"""
|
||||
return _ba.get_appconfig_default_value(key)
|
||||
|
||||
def builtin_keys(self) -> List[str]:
|
||||
def builtin_keys(self) -> list[str]:
|
||||
"""Return the list of valid key names recognized by ba.AppConfig.
|
||||
|
||||
This set of keys can be used with resolve(), default_value(), etc.
|
||||
@ -93,7 +93,7 @@ class AppConfig(dict):
|
||||
self.commit()
|
||||
|
||||
|
||||
def read_config() -> Tuple[AppConfig, bool]:
|
||||
def read_config() -> tuple[AppConfig, bool]:
|
||||
"""Read the game config."""
|
||||
import os
|
||||
import json
|
||||
|
||||
@ -6,7 +6,7 @@ from __future__ import annotations
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Type, Optional, Any, Dict, Callable
|
||||
from typing import Optional, Callable
|
||||
import ba
|
||||
|
||||
|
||||
@ -17,8 +17,8 @@ class AppDelegate:
|
||||
"""
|
||||
|
||||
def create_default_game_settings_ui(
|
||||
self, gameclass: Type[ba.GameActivity],
|
||||
sessiontype: Type[ba.Session], settings: Optional[dict],
|
||||
self, gameclass: type[ba.GameActivity],
|
||||
sessiontype: type[ba.Session], settings: Optional[dict],
|
||||
completion_call: Callable[[Optional[dict]], None]) -> None:
|
||||
"""Launch a UI to configure the given game config.
|
||||
|
||||
|
||||
@ -10,7 +10,7 @@ from typing import TYPE_CHECKING
|
||||
import _ba
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import List, Any, Callable, Optional
|
||||
from typing import Any
|
||||
import ba
|
||||
|
||||
|
||||
@ -186,9 +186,9 @@ def print_live_object_warnings(when: Any,
|
||||
from ba._actor import Actor
|
||||
from ba._activity import Activity
|
||||
|
||||
sessions: List[ba.Session] = []
|
||||
activities: List[ba.Activity] = []
|
||||
actors: List[ba.Actor] = []
|
||||
sessions: list[ba.Session] = []
|
||||
activities: list[ba.Activity] = []
|
||||
actors: list[ba.Actor] = []
|
||||
|
||||
# Once we come across leaked stuff, printing again is probably
|
||||
# redundant.
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import TYPE_CHECKING, Dict
|
||||
from typing import TYPE_CHECKING, Annotated
|
||||
from dataclasses import dataclass, field
|
||||
from pathlib import Path
|
||||
import threading
|
||||
@ -15,14 +15,11 @@ import time
|
||||
import os
|
||||
import sys
|
||||
|
||||
from typing_extensions import Annotated
|
||||
|
||||
from efro.dataclassio import (ioprepped, IOAttrs, dataclass_from_json,
|
||||
dataclass_to_json)
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from bacommon.assets import AssetPackageFlavor
|
||||
from typing import List
|
||||
|
||||
|
||||
@ioprepped
|
||||
@ -36,7 +33,7 @@ class FileValue:
|
||||
class State:
|
||||
"""Holds all persistent state for the asset-manager."""
|
||||
|
||||
files: Annotated[Dict[str, FileValue],
|
||||
files: Annotated[dict[str, FileValue],
|
||||
IOAttrs('files')] = field(default_factory=dict)
|
||||
|
||||
|
||||
@ -63,7 +60,7 @@ class AssetManager:
|
||||
|
||||
def launch_gather(
|
||||
self,
|
||||
packages: List[str],
|
||||
packages: list[str],
|
||||
flavor: AssetPackageFlavor,
|
||||
account_token: str,
|
||||
) -> AssetGather:
|
||||
|
||||
@ -9,7 +9,7 @@ from typing import TYPE_CHECKING
|
||||
import _ba
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Dict, Any, Sequence
|
||||
from typing import Any, Sequence
|
||||
import ba
|
||||
|
||||
|
||||
@ -88,7 +88,7 @@ def stop_stress_test() -> None:
|
||||
_ba.app.stress_test_reset_timer = None
|
||||
|
||||
|
||||
def start_stress_test(args: Dict[str, Any]) -> None:
|
||||
def start_stress_test(args: dict[str, Any]) -> None:
|
||||
"""(internal)"""
|
||||
from ba._general import Call
|
||||
from ba._dualteamsession import DualTeamSession
|
||||
@ -125,7 +125,7 @@ def start_stress_test(args: Dict[str, Any]) -> None:
|
||||
timeformat=TimeFormat.MILLISECONDS)
|
||||
|
||||
|
||||
def _reset_stress_test(args: Dict[str, Any]) -> None:
|
||||
def _reset_stress_test(args: dict[str, Any]) -> None:
|
||||
from ba._general import Call
|
||||
from ba._generated.enums import TimeType
|
||||
_ba.set_stress_testing(False, args['player_count'])
|
||||
|
||||
@ -8,7 +8,7 @@ from typing import TYPE_CHECKING
|
||||
import _ba
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Any, List, Dict
|
||||
from typing import Any
|
||||
import ba
|
||||
|
||||
|
||||
@ -30,7 +30,7 @@ class Campaign:
|
||||
|
||||
def __init__(self, name: str, sequential: bool = True):
|
||||
self._name = name
|
||||
self._levels: List[ba.Level] = []
|
||||
self._levels: list[ba.Level] = []
|
||||
self._sequential = sequential
|
||||
|
||||
@property
|
||||
@ -51,7 +51,7 @@ class Campaign:
|
||||
self._levels.append(level)
|
||||
|
||||
@property
|
||||
def levels(self) -> List[ba.Level]:
|
||||
def levels(self) -> list[ba.Level]:
|
||||
"""The list of ba.Levels in the Campaign."""
|
||||
return self._levels
|
||||
|
||||
@ -80,9 +80,9 @@ class Campaign:
|
||||
return self.configdict.get('Selection', self._levels[0].name)
|
||||
|
||||
@property
|
||||
def configdict(self) -> Dict[str, Any]:
|
||||
def configdict(self) -> dict[str, Any]:
|
||||
"""Return the live config dict for this campaign."""
|
||||
val: Dict[str, Any] = (_ba.app.config.setdefault('Campaigns',
|
||||
val: dict[str, Any] = (_ba.app.config.setdefault('Campaigns',
|
||||
{}).setdefault(
|
||||
self._name, {}))
|
||||
assert isinstance(val, dict)
|
||||
|
||||
@ -10,7 +10,7 @@ from ba._gameactivity import GameActivity
|
||||
from ba._general import WeakCall
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Type, Dict, Any, Set, List, Sequence, Optional
|
||||
from typing import Any, Sequence, Optional
|
||||
from bastd.actor.playerspaz import PlayerSpaz
|
||||
import ba
|
||||
|
||||
@ -28,7 +28,7 @@ class CoopGameActivity(GameActivity[PlayerType, TeamType]):
|
||||
session: ba.CoopSession
|
||||
|
||||
@classmethod
|
||||
def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool:
|
||||
def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool:
|
||||
from ba._coopsession import CoopSession
|
||||
return issubclass(sessiontype, CoopSession)
|
||||
|
||||
@ -36,7 +36,7 @@ class CoopGameActivity(GameActivity[PlayerType, TeamType]):
|
||||
super().__init__(settings)
|
||||
|
||||
# Cache these for efficiency.
|
||||
self._achievements_awarded: Set[str] = set()
|
||||
self._achievements_awarded: set[str] = set()
|
||||
|
||||
self._life_warning_beep: Optional[ba.Actor] = None
|
||||
self._life_warning_beep_timer: Optional[ba.Timer] = None
|
||||
@ -62,11 +62,11 @@ class CoopGameActivity(GameActivity[PlayerType, TeamType]):
|
||||
_ba.get_scores_to_beat(levelname, config_str,
|
||||
WeakCall(self._on_got_scores_to_beat))
|
||||
|
||||
def _on_got_scores_to_beat(self, scores: List[Dict[str, Any]]) -> None:
|
||||
def _on_got_scores_to_beat(self, scores: list[dict[str, Any]]) -> None:
|
||||
pass
|
||||
|
||||
def _show_standard_scores_to_beat_ui(self,
|
||||
scores: List[Dict[str, Any]]) -> None:
|
||||
scores: list[dict[str, Any]]) -> None:
|
||||
from efro.util import asserttype
|
||||
from ba._gameutils import timestring, animate
|
||||
from ba._nodeactor import NodeActor
|
||||
|
||||
@ -9,7 +9,7 @@ import _ba
|
||||
from ba._session import Session
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Any, List, Dict, Optional, Callable, Sequence
|
||||
from typing import Any, Optional, Callable, Sequence
|
||||
import ba
|
||||
|
||||
TEAM_COLORS = [(0.2, 0.4, 1.6)]
|
||||
@ -77,7 +77,7 @@ class CoopSession(Session):
|
||||
|
||||
self._ran_tutorial_activity = False
|
||||
self._tutorial_activity: Optional[ba.Activity] = None
|
||||
self._custom_menu_ui: List[Dict[str, Any]] = []
|
||||
self._custom_menu_ui: list[dict[str, Any]] = []
|
||||
|
||||
# Start our joining screen.
|
||||
self.setactivity(_ba.newactivity(CoopJoinActivity))
|
||||
@ -159,7 +159,7 @@ class CoopSession(Session):
|
||||
from bastd.tutorial import TutorialActivity
|
||||
self._tutorial_activity = _ba.newactivity(TutorialActivity)
|
||||
|
||||
def get_custom_menu_entries(self) -> List[Dict[str, Any]]:
|
||||
def get_custom_menu_entries(self) -> list[dict[str, Any]]:
|
||||
return self._custom_menu_ui
|
||||
|
||||
def on_player_leave(self, sessionplayer: ba.SessionPlayer) -> None:
|
||||
@ -341,7 +341,7 @@ class CoopSession(Session):
|
||||
self.setactivity(_ba.newactivity(TransitionActivity))
|
||||
else:
|
||||
|
||||
playerinfos: List[ba.PlayerInfo]
|
||||
playerinfos: list[ba.PlayerInfo]
|
||||
|
||||
# Generic team games.
|
||||
if isinstance(results, GameResults):
|
||||
|
||||
@ -10,8 +10,7 @@ from typing import (Generic, TypeVar, TYPE_CHECKING)
|
||||
import _ba
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Optional, Any, Dict, List, Set, Type
|
||||
from weakref import ReferenceType
|
||||
from typing import Optional, Any
|
||||
import ba
|
||||
|
||||
T = TypeVar('T', bound='DependencyComponent')
|
||||
@ -32,13 +31,13 @@ class Dependency(Generic[T]):
|
||||
methods via self.floofcls().
|
||||
"""
|
||||
|
||||
def __init__(self, cls: Type[T], config: Any = None):
|
||||
def __init__(self, cls: type[T], config: Any = None):
|
||||
"""Instantiate a Dependency given a ba.DependencyComponent type.
|
||||
|
||||
Optionally, an arbitrary object can be passed as 'config' to
|
||||
influence dependency calculation for the target class.
|
||||
"""
|
||||
self.cls: Type[T] = cls
|
||||
self.cls: type[T] = cls
|
||||
self.config = config
|
||||
self._hash: Optional[int] = None
|
||||
|
||||
@ -91,7 +90,7 @@ class DependencyComponent:
|
||||
category: Dependency Classes
|
||||
"""
|
||||
|
||||
_dep_entry: ReferenceType[DependencyEntry]
|
||||
_dep_entry: weakref.ref[DependencyEntry]
|
||||
|
||||
def __init__(self) -> None:
|
||||
"""Instantiate a DependencyComponent."""
|
||||
@ -110,7 +109,7 @@ class DependencyComponent:
|
||||
return True
|
||||
|
||||
@classmethod
|
||||
def get_dynamic_deps(cls, config: Any = None) -> List[Dependency]:
|
||||
def get_dynamic_deps(cls, config: Any = None) -> list[Dependency]:
|
||||
"""Return any dynamically-calculated deps for this component/config.
|
||||
|
||||
Deps declared statically as part of the class do not need to be
|
||||
@ -180,7 +179,7 @@ class DependencySet(Generic[T]):
|
||||
self._loaded = False
|
||||
|
||||
# Dependency data indexed by hash.
|
||||
self.entries: Dict[int, DependencyEntry] = {}
|
||||
self.entries: dict[int, DependencyEntry] = {}
|
||||
|
||||
# def __del__(self) -> None:
|
||||
# print("~DepSet()")
|
||||
@ -220,12 +219,12 @@ class DependencySet(Generic[T]):
|
||||
"""Whether this set has been successfully resolved."""
|
||||
return self._resolved
|
||||
|
||||
def get_asset_package_ids(self) -> Set[str]:
|
||||
def get_asset_package_ids(self) -> set[str]:
|
||||
"""Return the set of asset-package-ids required by this dep-set.
|
||||
|
||||
Must be called on a resolved dep-set.
|
||||
"""
|
||||
ids: Set[str] = set()
|
||||
ids: set[str] = set()
|
||||
if not self._resolved:
|
||||
raise Exception('Must be called on a resolved dep-set.')
|
||||
for entry in self.entries.values():
|
||||
|
||||
@ -9,7 +9,7 @@ from typing import TYPE_CHECKING
|
||||
import _ba
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Any, List
|
||||
from typing import Any
|
||||
import ba
|
||||
|
||||
|
||||
@ -21,12 +21,12 @@ class DependencyError(Exception):
|
||||
(this will generally be missing assets).
|
||||
"""
|
||||
|
||||
def __init__(self, deps: List[ba.Dependency]):
|
||||
def __init__(self, deps: list[ba.Dependency]):
|
||||
super().__init__()
|
||||
self._deps = deps
|
||||
|
||||
@property
|
||||
def deps(self) -> List[ba.Dependency]:
|
||||
def deps(self) -> list[ba.Dependency]:
|
||||
"""The list of missing dependencies causing this error."""
|
||||
return self._deps
|
||||
|
||||
|
||||
@ -10,7 +10,6 @@ import _ba
|
||||
from ba._multiteamsession import MultiTeamSession
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Dict
|
||||
import ba
|
||||
|
||||
|
||||
@ -25,12 +24,12 @@ class FreeForAllSession(MultiTeamSession):
|
||||
_playlist_randomize_var = 'Free-for-All Playlist Randomize'
|
||||
_playlists_var = 'Free-for-All Playlists'
|
||||
|
||||
def get_ffa_point_awards(self) -> Dict[int, int]:
|
||||
def get_ffa_point_awards(self) -> dict[int, int]:
|
||||
"""Return the number of points awarded for different rankings.
|
||||
|
||||
This is based on the current number of players.
|
||||
"""
|
||||
point_awards: Dict[int, int]
|
||||
point_awards: dict[int, int]
|
||||
if len(self.sessionplayers) == 1:
|
||||
point_awards = {}
|
||||
elif len(self.sessionplayers) == 2:
|
||||
|
||||
@ -19,8 +19,7 @@ from ba._player import PlayerInfo
|
||||
from ba import _map
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import (List, Optional, Dict, Type, Any, Callable, Sequence,
|
||||
Tuple, Union)
|
||||
from typing import Optional, Any, Callable, Sequence, Union
|
||||
from bastd.actor.playerspaz import PlayerSpaz
|
||||
from bastd.actor.bomb import TNTSpawner
|
||||
import ba
|
||||
@ -37,7 +36,7 @@ class GameActivity(Activity[PlayerType, TeamType]):
|
||||
# pylint: disable=too-many-public-methods
|
||||
|
||||
# Tips to be presented to the user at the start of the game.
|
||||
tips: List[Union[str, ba.GameTip]] = []
|
||||
tips: list[Union[str, ba.GameTip]] = []
|
||||
|
||||
# Default getname() will return this if not None.
|
||||
name: Optional[str] = None
|
||||
@ -46,7 +45,7 @@ class GameActivity(Activity[PlayerType, TeamType]):
|
||||
description: Optional[str] = None
|
||||
|
||||
# Default get_available_settings() will return this if not None.
|
||||
available_settings: Optional[List[ba.Setting]] = None
|
||||
available_settings: Optional[list[ba.Setting]] = None
|
||||
|
||||
# Default getscoreconfig() will return this if not None.
|
||||
scoreconfig: Optional[ba.ScoreConfig] = None
|
||||
@ -65,7 +64,7 @@ class GameActivity(Activity[PlayerType, TeamType]):
|
||||
@classmethod
|
||||
def create_settings_ui(
|
||||
cls,
|
||||
sessiontype: Type[ba.Session],
|
||||
sessiontype: type[ba.Session],
|
||||
settings: Optional[dict],
|
||||
completion_call: Callable[[Optional[dict]], None],
|
||||
) -> None:
|
||||
@ -104,7 +103,7 @@ class GameActivity(Activity[PlayerType, TeamType]):
|
||||
return cls.name if cls.name is not None else 'Untitled Game'
|
||||
|
||||
@classmethod
|
||||
def get_display_string(cls, settings: Optional[Dict] = None) -> ba.Lstr:
|
||||
def get_display_string(cls, settings: Optional[dict] = None) -> ba.Lstr:
|
||||
"""Return a descriptive name for this game/settings combo.
|
||||
|
||||
Subclasses should override getname(); not this.
|
||||
@ -130,7 +129,7 @@ class GameActivity(Activity[PlayerType, TeamType]):
|
||||
return Lstr(translate=('teamNames', name))
|
||||
|
||||
@classmethod
|
||||
def get_description(cls, sessiontype: Type[ba.Session]) -> str:
|
||||
def get_description(cls, sessiontype: type[ba.Session]) -> str:
|
||||
"""Get a str description of this game type.
|
||||
|
||||
The default implementation simply returns the 'description' class var.
|
||||
@ -142,7 +141,7 @@ class GameActivity(Activity[PlayerType, TeamType]):
|
||||
|
||||
@classmethod
|
||||
def get_description_display_string(
|
||||
cls, sessiontype: Type[ba.Session]) -> ba.Lstr:
|
||||
cls, sessiontype: type[ba.Session]) -> ba.Lstr:
|
||||
"""Return a translated version of get_description().
|
||||
|
||||
Sub-classes should override get_description(); not this.
|
||||
@ -152,7 +151,7 @@ class GameActivity(Activity[PlayerType, TeamType]):
|
||||
|
||||
@classmethod
|
||||
def get_available_settings(
|
||||
cls, sessiontype: Type[ba.Session]) -> List[ba.Setting]:
|
||||
cls, sessiontype: type[ba.Session]) -> list[ba.Setting]:
|
||||
"""Return a list of settings relevant to this game type when
|
||||
running under the provided session type.
|
||||
"""
|
||||
@ -160,7 +159,7 @@ class GameActivity(Activity[PlayerType, TeamType]):
|
||||
return [] if cls.available_settings is None else cls.available_settings
|
||||
|
||||
@classmethod
|
||||
def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]:
|
||||
def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]:
|
||||
"""
|
||||
Called by the default ba.GameActivity.create_settings_ui()
|
||||
implementation; should return a list of map names valid
|
||||
@ -170,7 +169,7 @@ class GameActivity(Activity[PlayerType, TeamType]):
|
||||
return _map.getmaps('melee')
|
||||
|
||||
@classmethod
|
||||
def get_settings_display_string(cls, config: Dict[str, Any]) -> ba.Lstr:
|
||||
def get_settings_display_string(cls, config: dict[str, Any]) -> ba.Lstr:
|
||||
"""Given a game config dict, return a short description for it.
|
||||
|
||||
This is used when viewing game-lists or showing what game
|
||||
@ -200,7 +199,7 @@ class GameActivity(Activity[PlayerType, TeamType]):
|
||||
return sval
|
||||
|
||||
@classmethod
|
||||
def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool:
|
||||
def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool:
|
||||
"""Return whether this game supports the provided Session type."""
|
||||
from ba._multiteamsession import MultiTeamSession
|
||||
|
||||
@ -213,7 +212,7 @@ class GameActivity(Activity[PlayerType, TeamType]):
|
||||
|
||||
# Holds some flattened info about the player set at the point
|
||||
# when on_begin() is called.
|
||||
self.initialplayerinfos: Optional[List[ba.PlayerInfo]] = None
|
||||
self.initialplayerinfos: Optional[list[ba.PlayerInfo]] = None
|
||||
|
||||
# Go ahead and get our map loading.
|
||||
self._map_type = _map.get_map_class(self._calc_map_name(settings))
|
||||
@ -222,7 +221,7 @@ class GameActivity(Activity[PlayerType, TeamType]):
|
||||
self._map_type.preload()
|
||||
self._map: Optional[ba.Map] = None
|
||||
self._powerup_drop_timer: Optional[ba.Timer] = None
|
||||
self._tnt_spawners: Optional[Dict[int, TNTSpawner]] = None
|
||||
self._tnt_spawners: Optional[dict[int, TNTSpawner]] = None
|
||||
self._tnt_drop_timer: Optional[ba.Timer] = None
|
||||
self._game_scoreboard_name_text: Optional[ba.Actor] = None
|
||||
self._game_scoreboard_description_text: Optional[ba.Actor] = None
|
||||
@ -235,7 +234,7 @@ class GameActivity(Activity[PlayerType, TeamType]):
|
||||
self._tournament_time_limit_title_text: Optional[ba.NodeActor] = None
|
||||
self._tournament_time_limit_text: Optional[ba.NodeActor] = None
|
||||
self._tournament_time_limit_text_input: Optional[ba.NodeActor] = None
|
||||
self._zoom_message_times: Dict[int, float] = {}
|
||||
self._zoom_message_times: dict[int, float] = {}
|
||||
self._is_waiting_for_continue = False
|
||||
|
||||
self._continue_cost = _ba.get_account_misc_read_val(
|
||||
@ -459,7 +458,7 @@ class GameActivity(Activity[PlayerType, TeamType]):
|
||||
callback=WeakCall(self._on_tournament_query_response),
|
||||
)
|
||||
|
||||
def _on_tournament_query_response(self, data: Optional[Dict[str,
|
||||
def _on_tournament_query_response(self, data: Optional[dict[str,
|
||||
Any]]) -> None:
|
||||
if data is not None:
|
||||
data_t = data['t'] # This used to be the whole payload.
|
||||
@ -1154,7 +1153,7 @@ class GameActivity(Activity[PlayerType, TeamType]):
|
||||
# If settings doesn't specify a map, pick a random one from the
|
||||
# list of supported ones.
|
||||
unowned_maps = _map.get_unowned_maps()
|
||||
valid_maps: List[str] = [
|
||||
valid_maps: list[str] = [
|
||||
m for m in self.get_supported_maps(type(self.session))
|
||||
if m not in unowned_maps
|
||||
]
|
||||
|
||||
@ -12,8 +12,7 @@ from efro.util import asserttype
|
||||
from ba._team import Team, SessionTeam
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from weakref import ReferenceType
|
||||
from typing import Sequence, Tuple, Any, Optional, Dict, List, Union
|
||||
from typing import Sequence, Optional
|
||||
import ba
|
||||
|
||||
|
||||
@ -36,11 +35,10 @@ class GameResults:
|
||||
|
||||
def __init__(self) -> None:
|
||||
self._game_set = False
|
||||
self._scores: Dict[int, Tuple[ReferenceType[ba.SessionTeam],
|
||||
self._scores: dict[int, tuple[weakref.ref[ba.SessionTeam],
|
||||
Optional[int]]] = {}
|
||||
self._sessionteams: Optional[List[ReferenceType[
|
||||
ba.SessionTeam]]] = None
|
||||
self._playerinfos: Optional[List[ba.PlayerInfo]] = None
|
||||
self._sessionteams: Optional[list[weakref.ref[ba.SessionTeam]]] = None
|
||||
self._playerinfos: Optional[list[ba.PlayerInfo]] = None
|
||||
self._lower_is_better: Optional[bool] = None
|
||||
self._score_label: Optional[str] = None
|
||||
self._none_is_winner: Optional[bool] = None
|
||||
@ -83,7 +81,7 @@ class GameResults:
|
||||
return None
|
||||
|
||||
@property
|
||||
def sessionteams(self) -> List[ba.SessionTeam]:
|
||||
def sessionteams(self) -> list[ba.SessionTeam]:
|
||||
"""Return all ba.SessionTeams in the results."""
|
||||
if not self._game_set:
|
||||
raise RuntimeError("Can't get teams until game is set.")
|
||||
@ -127,7 +125,7 @@ class GameResults:
|
||||
return Lstr(value='-')
|
||||
|
||||
@property
|
||||
def playerinfos(self) -> List[ba.PlayerInfo]:
|
||||
def playerinfos(self) -> list[ba.PlayerInfo]:
|
||||
"""Get info about the players represented by the results."""
|
||||
if not self._game_set:
|
||||
raise RuntimeError("Can't get player-info until game is set.")
|
||||
@ -169,13 +167,13 @@ class GameResults:
|
||||
return None
|
||||
|
||||
@property
|
||||
def winnergroups(self) -> List[WinnerGroup]:
|
||||
def winnergroups(self) -> list[WinnerGroup]:
|
||||
"""Get an ordered list of winner groups."""
|
||||
if not self._game_set:
|
||||
raise RuntimeError("Can't get winners until game is set.")
|
||||
|
||||
# Group by best scoring teams.
|
||||
winners: Dict[int, List[ba.SessionTeam]] = {}
|
||||
winners: dict[int, list[ba.SessionTeam]] = {}
|
||||
scores = [
|
||||
score for score in self._scores.values()
|
||||
if score[0]() is not None and score[1] is not None
|
||||
@ -186,13 +184,13 @@ class GameResults:
|
||||
team = score[0]()
|
||||
assert team is not None
|
||||
sval.append(team)
|
||||
results: List[Tuple[Optional[int],
|
||||
List[ba.SessionTeam]]] = list(winners.items())
|
||||
results: list[tuple[Optional[int],
|
||||
list[ba.SessionTeam]]] = list(winners.items())
|
||||
results.sort(reverse=not self._lower_is_better,
|
||||
key=lambda x: asserttype(x[0], int))
|
||||
|
||||
# Also group the 'None' scores.
|
||||
none_sessionteams: List[ba.SessionTeam] = []
|
||||
none_sessionteams: list[ba.SessionTeam] = []
|
||||
for score in self._scores.values():
|
||||
scoreteam = score[0]()
|
||||
if scoreteam is not None and score[1] is None:
|
||||
@ -201,7 +199,7 @@ class GameResults:
|
||||
# Add the Nones to the list (either as winners or losers
|
||||
# depending on the rules).
|
||||
if none_sessionteams:
|
||||
nones: List[Tuple[Optional[int], List[ba.SessionTeam]]] = [
|
||||
nones: list[tuple[Optional[int], list[ba.SessionTeam]]] = [
|
||||
(None, none_sessionteams)
|
||||
]
|
||||
if self._none_is_winner:
|
||||
|
||||
@ -12,7 +12,7 @@ from ba._generated.enums import TimeType, TimeFormat, SpecialChar, UIScale
|
||||
from ba._error import ActivityNotFoundError
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Any, Dict, Sequence, Optional
|
||||
from typing import Sequence, Optional
|
||||
import ba
|
||||
|
||||
TROPHY_CHARS = {
|
||||
@ -45,7 +45,7 @@ def get_trophy_string(trophy_id: str) -> str:
|
||||
|
||||
def animate(node: ba.Node,
|
||||
attr: str,
|
||||
keys: Dict[float, float],
|
||||
keys: dict[float, float],
|
||||
loop: bool = False,
|
||||
offset: float = 0,
|
||||
timetype: ba.TimeType = TimeType.SIM,
|
||||
@ -119,7 +119,7 @@ def animate(node: ba.Node,
|
||||
def animate_array(node: ba.Node,
|
||||
attr: str,
|
||||
size: int,
|
||||
keys: Dict[float, Sequence[float]],
|
||||
keys: dict[float, Sequence[float]],
|
||||
loop: bool = False,
|
||||
offset: float = 0,
|
||||
timetype: ba.TimeType = TimeType.SIM,
|
||||
|
||||
@ -17,9 +17,8 @@ from ba._generated.enums import TimeType
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from types import FrameType
|
||||
from typing import Any, Type, Optional
|
||||
from typing import Any, Optional
|
||||
from efro.call import Call as Call # 'as Call' so we re-export.
|
||||
from weakref import ReferenceType
|
||||
|
||||
|
||||
class Existable(Protocol):
|
||||
@ -57,7 +56,7 @@ def existing(obj: Optional[ExistableType]) -> Optional[ExistableType]:
|
||||
return obj if obj is not None and obj.exists() else None
|
||||
|
||||
|
||||
def getclass(name: str, subclassof: Type[T]) -> Type[T]:
|
||||
def getclass(name: str, subclassof: type[T]) -> type[T]:
|
||||
"""Given a full class name such as foo.bar.MyClass, return the class.
|
||||
|
||||
Category: General Utility Functions
|
||||
@ -70,7 +69,7 @@ def getclass(name: str, subclassof: Type[T]) -> Type[T]:
|
||||
modulename = '.'.join(splits[:-1])
|
||||
classname = splits[-1]
|
||||
module = importlib.import_module(modulename)
|
||||
cls: Type = getattr(module, classname)
|
||||
cls: type = getattr(module, classname)
|
||||
|
||||
if not issubclass(cls, subclassof):
|
||||
raise TypeError(f'{name} is not a subclass of {subclassof}.')
|
||||
@ -133,7 +132,7 @@ def print_refs(obj: Any) -> None:
|
||||
i += 1
|
||||
|
||||
|
||||
def get_type_name(cls: Type) -> str:
|
||||
def get_type_name(cls: type) -> str:
|
||||
"""Return a full type name including module for a class."""
|
||||
return cls.__module__ + '.' + cls.__name__
|
||||
|
||||
@ -343,7 +342,7 @@ def print_active_refs(obj: Any) -> None:
|
||||
f' {ref4}{Clr.RST}')
|
||||
|
||||
|
||||
def _verify_object_death(wref: ReferenceType) -> None:
|
||||
def _verify_object_death(wref: weakref.ref) -> None:
|
||||
obj = wref()
|
||||
if obj is None:
|
||||
return
|
||||
|
||||
@ -18,7 +18,7 @@ from typing import TYPE_CHECKING
|
||||
import _ba
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import List, Sequence, Optional, Dict, Any
|
||||
from typing import Sequence, Optional, Any
|
||||
import ba
|
||||
|
||||
|
||||
@ -339,7 +339,7 @@ def local_chat_message(msg: str) -> None:
|
||||
_ba.app.ui.party_window().on_chat_message(msg)
|
||||
|
||||
|
||||
def get_player_icon(sessionplayer: ba.SessionPlayer) -> Dict[str, Any]:
|
||||
def get_player_icon(sessionplayer: ba.SessionPlayer) -> dict[str, Any]:
|
||||
info = sessionplayer.get_icon_info()
|
||||
return {
|
||||
'texture': _ba.gettexture(info['texture']),
|
||||
|
||||
@ -8,7 +8,7 @@ from typing import TYPE_CHECKING
|
||||
import _ba
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Any, Dict, Tuple
|
||||
from typing import Any
|
||||
import ba
|
||||
|
||||
|
||||
@ -601,14 +601,14 @@ def get_input_map_hash(inputdevice: ba.InputDevice) -> str:
|
||||
|
||||
|
||||
def get_input_device_config(device: ba.InputDevice,
|
||||
default: bool) -> Tuple[Dict, str]:
|
||||
default: bool) -> tuple[dict, str]:
|
||||
"""Given an input device, return its config dict in the app config.
|
||||
|
||||
The dict will be created if it does not exist.
|
||||
"""
|
||||
cfg = _ba.app.config
|
||||
name = device.name
|
||||
ccfgs: Dict[str, Any] = cfg.setdefault('Controllers', {})
|
||||
ccfgs: dict[str, Any] = cfg.setdefault('Controllers', {})
|
||||
ccfgs.setdefault(name, {})
|
||||
unique_id = device.unique_identifier
|
||||
if default:
|
||||
|
||||
@ -7,7 +7,7 @@ from __future__ import annotations
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import List, Tuple, Dict
|
||||
pass
|
||||
|
||||
|
||||
class Keyboard:
|
||||
@ -30,6 +30,6 @@ class Keyboard:
|
||||
"""
|
||||
|
||||
name: str
|
||||
chars: List[Tuple[str, ...]]
|
||||
pages: Dict[str, Tuple[str, ...]]
|
||||
nums: Tuple[str, ...]
|
||||
chars: list[tuple[str, ...]]
|
||||
pages: dict[str, tuple[str, ...]]
|
||||
nums: tuple[str, ...]
|
||||
|
||||
@ -11,7 +11,7 @@ import _ba
|
||||
|
||||
if TYPE_CHECKING:
|
||||
import ba
|
||||
from typing import Any, Dict, List, Optional, Tuple, Union, Sequence
|
||||
from typing import Any, Optional, Union, Sequence
|
||||
|
||||
|
||||
class LanguageSubsystem:
|
||||
@ -109,7 +109,7 @@ class LanguageSubsystem:
|
||||
return _ba.app.config.get('Lang', self.default_language)
|
||||
|
||||
@property
|
||||
def available_languages(self) -> List[str]:
|
||||
def available_languages(self) -> list[str]:
|
||||
"""A list of all available languages.
|
||||
|
||||
Note that languages that may be present in game assets but which
|
||||
@ -402,7 +402,7 @@ class Lstr:
|
||||
resource: str,
|
||||
fallback_resource: str = '',
|
||||
fallback_value: str = '',
|
||||
subs: Sequence[Tuple[str, Union[str, Lstr]]] = []) -> None:
|
||||
subs: Sequence[tuple[str, Union[str, Lstr]]] = []) -> None:
|
||||
"""Create an Lstr from a string resource."""
|
||||
...
|
||||
|
||||
@ -410,8 +410,8 @@ class Lstr:
|
||||
@overload
|
||||
def __init__(self,
|
||||
*,
|
||||
translate: Tuple[str, str],
|
||||
subs: Sequence[Tuple[str, Union[str, Lstr]]] = []) -> None:
|
||||
translate: tuple[str, str],
|
||||
subs: Sequence[tuple[str, Union[str, Lstr]]] = []) -> None:
|
||||
"""Create an Lstr by translating a string in a category."""
|
||||
...
|
||||
|
||||
@ -420,7 +420,7 @@ class Lstr:
|
||||
def __init__(self,
|
||||
*,
|
||||
value: str,
|
||||
subs: Sequence[Tuple[str, Union[str, Lstr]]] = []) -> None:
|
||||
subs: Sequence[tuple[str, Union[str, Lstr]]] = []) -> None:
|
||||
"""Create an Lstr from a raw string value."""
|
||||
...
|
||||
|
||||
@ -531,7 +531,7 @@ class Lstr:
|
||||
return lstr
|
||||
|
||||
|
||||
def _add_to_attr_dict(dst: AttrDict, src: Dict) -> None:
|
||||
def _add_to_attr_dict(dst: AttrDict, src: dict) -> None:
|
||||
for key, value in list(src.items()):
|
||||
if isinstance(value, dict):
|
||||
try:
|
||||
|
||||
@ -10,8 +10,7 @@ from typing import TYPE_CHECKING
|
||||
import _ba
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from weakref import ReferenceType
|
||||
from typing import Type, Any, Dict, Optional
|
||||
from typing import Any, Optional
|
||||
import ba
|
||||
|
||||
|
||||
@ -23,7 +22,7 @@ class Level:
|
||||
|
||||
def __init__(self,
|
||||
name: str,
|
||||
gametype: Type[ba.GameActivity],
|
||||
gametype: type[ba.GameActivity],
|
||||
settings: dict,
|
||||
preview_texture_name: str,
|
||||
displayname: str = None):
|
||||
@ -32,7 +31,7 @@ class Level:
|
||||
self._settings = settings
|
||||
self._preview_texture_name = preview_texture_name
|
||||
self._displayname = displayname
|
||||
self._campaign: Optional[ReferenceType[ba.Campaign]] = None
|
||||
self._campaign: Optional[weakref.ref[ba.Campaign]] = None
|
||||
self._index: Optional[int] = None
|
||||
self._score_version_string: Optional[str] = None
|
||||
|
||||
@ -45,7 +44,7 @@ class Level:
|
||||
"""The unique name for this Level."""
|
||||
return self._name
|
||||
|
||||
def get_settings(self) -> Dict[str, Any]:
|
||||
def get_settings(self) -> dict[str, Any]:
|
||||
"""Returns the settings for this Level."""
|
||||
settings = copy.deepcopy(self._settings)
|
||||
|
||||
@ -74,7 +73,7 @@ class Level:
|
||||
self._gametype.get_display_string(self._settings))])
|
||||
|
||||
@property
|
||||
def gametype(self) -> Type[ba.GameActivity]:
|
||||
def gametype(self) -> type[ba.GameActivity]:
|
||||
"""The type of game used for this Level."""
|
||||
return self._gametype
|
||||
|
||||
@ -117,7 +116,7 @@ class Level:
|
||||
return {}
|
||||
return copy.deepcopy(config[high_scores_key])
|
||||
|
||||
def set_high_scores(self, high_scores: Dict) -> None:
|
||||
def set_high_scores(self, high_scores: dict) -> None:
|
||||
"""Set high scores for this level."""
|
||||
config = self._get_config_dict()
|
||||
high_scores_key = 'High Scores' + self.get_score_version_string()
|
||||
@ -148,7 +147,7 @@ class Level:
|
||||
config = self._get_config_dict()
|
||||
config['Rating'] = max(old_rating, rating)
|
||||
|
||||
def _get_config_dict(self) -> Dict[str, Any]:
|
||||
def _get_config_dict(self) -> dict[str, Any]:
|
||||
"""Return/create the persistent state dict for this level.
|
||||
|
||||
The referenced dict exists under the game's config dict and
|
||||
@ -157,7 +156,7 @@ class Level:
|
||||
if campaign is None:
|
||||
raise RuntimeError('Level is not in a campaign.')
|
||||
configdict = campaign.configdict
|
||||
val: Dict[str, Any] = configdict.setdefault(self._name, {
|
||||
val: dict[str, Any] = configdict.setdefault(self._name, {
|
||||
'Rating': 0.0,
|
||||
'Complete': False
|
||||
})
|
||||
|
||||
@ -16,7 +16,7 @@ from ba._generated.enums import SpecialChar, InputType
|
||||
from ba._profile import get_player_profile_colors
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Optional, List, Dict, Any, Sequence, Union
|
||||
from typing import Optional, Any, Sequence, Union
|
||||
import ba
|
||||
|
||||
MAX_QUICK_CHANGE_COUNT = 30
|
||||
@ -152,11 +152,11 @@ class Chooser:
|
||||
self._dead = False
|
||||
self._text_node: Optional[ba.Node] = None
|
||||
self._profilename = ''
|
||||
self._profilenames: List[str] = []
|
||||
self._profilenames: list[str] = []
|
||||
self._ready: bool = False
|
||||
self._character_names: List[str] = []
|
||||
self._character_names: list[str] = []
|
||||
self._last_change: Sequence[Union[float, int]] = (0, 0)
|
||||
self._profiles: Dict[str, Dict[str, Any]] = {}
|
||||
self._profiles: dict[str, dict[str, Any]] = {}
|
||||
|
||||
app = _ba.app
|
||||
|
||||
@ -835,11 +835,11 @@ class Lobby:
|
||||
self._dummy_teams = SessionTeam()
|
||||
self._sessionteams = [weakref.ref(self._dummy_teams)]
|
||||
v_offset = (-150 if isinstance(session, CoopSession) else -50)
|
||||
self.choosers: List[Chooser] = []
|
||||
self.choosers: list[Chooser] = []
|
||||
self.base_v_offset = v_offset
|
||||
self.update_positions()
|
||||
self._next_add_team = 0
|
||||
self.character_names_local_unlocked: List[str] = []
|
||||
self.character_names_local_unlocked: list[str] = []
|
||||
self._vpos = 0
|
||||
|
||||
# Grab available profiles.
|
||||
@ -861,7 +861,7 @@ class Lobby:
|
||||
return self._use_team_colors
|
||||
|
||||
@property
|
||||
def sessionteams(self) -> List[ba.SessionTeam]:
|
||||
def sessionteams(self) -> list[ba.SessionTeam]:
|
||||
"""ba.SessionTeams available in this lobby."""
|
||||
allteams = []
|
||||
for tref in self._sessionteams:
|
||||
@ -870,7 +870,7 @@ class Lobby:
|
||||
allteams.append(team)
|
||||
return allteams
|
||||
|
||||
def get_choosers(self) -> List[Chooser]:
|
||||
def get_choosers(self) -> list[Chooser]:
|
||||
"""Return the lobby's current choosers."""
|
||||
return self.choosers
|
||||
|
||||
|
||||
@ -11,7 +11,7 @@ from ba import _math
|
||||
from ba._actor import Actor
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Set, List, Type, Optional, Sequence, Any, Tuple
|
||||
from typing import Optional, Sequence, Any
|
||||
import ba
|
||||
|
||||
|
||||
@ -52,7 +52,7 @@ def get_map_display_string(name: str) -> ba.Lstr:
|
||||
return _language.Lstr(translate=('mapsNames', name))
|
||||
|
||||
|
||||
def getmaps(playtype: str) -> List[str]:
|
||||
def getmaps(playtype: str) -> list[str]:
|
||||
"""Return a list of ba.Map types supporting a playtype str.
|
||||
|
||||
Category: Asset Functions
|
||||
@ -101,13 +101,13 @@ def getmaps(playtype: str) -> List[str]:
|
||||
if playtype in val.get_play_types())
|
||||
|
||||
|
||||
def get_unowned_maps() -> List[str]:
|
||||
def get_unowned_maps() -> list[str]:
|
||||
"""Return the list of local maps not owned by the current account.
|
||||
|
||||
Category: Asset Functions
|
||||
"""
|
||||
from ba import _store
|
||||
unowned_maps: Set[str] = set()
|
||||
unowned_maps: set[str] = set()
|
||||
if not _ba.app.headless_mode:
|
||||
for map_section in _store.get_store_layout()['maps']:
|
||||
for mapitem in map_section['items']:
|
||||
@ -117,7 +117,7 @@ def get_unowned_maps() -> List[str]:
|
||||
return sorted(unowned_maps)
|
||||
|
||||
|
||||
def get_map_class(name: str) -> Type[ba.Map]:
|
||||
def get_map_class(name: str) -> type[ba.Map]:
|
||||
"""Return a map type given a name.
|
||||
|
||||
Category: Asset Functions
|
||||
@ -140,7 +140,7 @@ class Map(Actor):
|
||||
"""
|
||||
defs: Any = None
|
||||
name = 'Map'
|
||||
_playtypes: List[str] = []
|
||||
_playtypes: list[str] = []
|
||||
|
||||
@classmethod
|
||||
def preload(cls) -> None:
|
||||
@ -156,7 +156,7 @@ class Map(Actor):
|
||||
activity.preloads[cls] = cls.on_preload()
|
||||
|
||||
@classmethod
|
||||
def get_play_types(cls) -> List[str]:
|
||||
def get_play_types(cls) -> list[str]:
|
||||
"""Return valid play types for this map."""
|
||||
return []
|
||||
|
||||
@ -296,7 +296,7 @@ class Map(Actor):
|
||||
|
||||
def get_def_bound_box(
|
||||
self, name: str
|
||||
) -> Optional[Tuple[float, float, float, float, float, float]]:
|
||||
) -> Optional[tuple[float, float, float, float, float, float]]:
|
||||
"""Return a 6 member bounds tuple or None if it is not defined."""
|
||||
try:
|
||||
box = self.defs.boxes[name]
|
||||
@ -312,7 +312,7 @@ class Map(Actor):
|
||||
return (None if val is None else
|
||||
_math.vec3validate(val) if __debug__ else val)
|
||||
|
||||
def get_def_points(self, name: str) -> List[Sequence[float]]:
|
||||
def get_def_points(self, name: str) -> list[Sequence[float]]:
|
||||
"""Return a list of named points.
|
||||
|
||||
Return as many sequential ones are defined (flag1, flag2, flag3), etc.
|
||||
@ -408,7 +408,7 @@ class Map(Actor):
|
||||
return None
|
||||
|
||||
|
||||
def register_map(maptype: Type[Map]) -> None:
|
||||
def register_map(maptype: type[Map]) -> None:
|
||||
"""Register a map class with the game."""
|
||||
if maptype.name in _ba.app.maps:
|
||||
raise RuntimeError('map "' + maptype.name + '" already registered')
|
||||
|
||||
@ -8,7 +8,7 @@ from collections import abc
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Tuple, Sequence
|
||||
from typing import Sequence
|
||||
|
||||
|
||||
def vec3validate(value: Sequence[float]) -> Sequence[float]:
|
||||
@ -45,7 +45,7 @@ def is_point_in_box(pnt: Sequence[float], box: Sequence[float]) -> bool:
|
||||
and (abs(pnt[2] - box[2]) <= box[8] * 0.5))
|
||||
|
||||
|
||||
def normalized_color(color: Sequence[float]) -> Tuple[float, ...]:
|
||||
def normalized_color(color: Sequence[float]) -> tuple[float, ...]:
|
||||
"""Scale a color so its largest value is 1; useful for coloring lights.
|
||||
|
||||
category: General Utility Functions
|
||||
|
||||
@ -11,7 +11,7 @@ from enum import Enum
|
||||
import _ba
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Sequence, Optional, Type, Any
|
||||
from typing import Sequence, Optional, Any
|
||||
import ba
|
||||
|
||||
|
||||
@ -105,7 +105,7 @@ class PlayerDiedMessage:
|
||||
self.how = how
|
||||
|
||||
def getkillerplayer(self,
|
||||
playertype: Type[PlayerType]) -> Optional[PlayerType]:
|
||||
playertype: type[PlayerType]) -> Optional[PlayerType]:
|
||||
"""Return the ba.Player responsible for the killing, if any.
|
||||
|
||||
Pass the Player type being used by the current game.
|
||||
@ -113,7 +113,7 @@ class PlayerDiedMessage:
|
||||
assert isinstance(self._killerplayer, (playertype, type(None)))
|
||||
return self._killerplayer
|
||||
|
||||
def getplayer(self, playertype: Type[PlayerType]) -> PlayerType:
|
||||
def getplayer(self, playertype: type[PlayerType]) -> PlayerType:
|
||||
"""Return the ba.Player that died.
|
||||
|
||||
The type of player for the current activity should be passed so that
|
||||
@ -294,7 +294,7 @@ class HitMessage:
|
||||
if force_direction is not None else velocity)
|
||||
|
||||
def get_source_player(
|
||||
self, playertype: Type[PlayerType]) -> Optional[PlayerType]:
|
||||
self, playertype: type[PlayerType]) -> Optional[PlayerType]:
|
||||
"""Return the source-player if one exists and is the provided type."""
|
||||
player: Any = self._source_player
|
||||
|
||||
|
||||
@ -14,7 +14,7 @@ from dataclasses import dataclass, field
|
||||
import _ba
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Dict, List, Tuple, Union, Optional, Type, Set
|
||||
from typing import Union, Optional
|
||||
import ba
|
||||
|
||||
# The meta api version of this build of the game.
|
||||
@ -27,9 +27,9 @@ CURRENT_API_VERSION = 6
|
||||
@dataclass
|
||||
class ScanResults:
|
||||
"""Final results from a metadata scan."""
|
||||
games: List[str] = field(default_factory=list)
|
||||
plugins: List[str] = field(default_factory=list)
|
||||
keyboards: List[str] = field(default_factory=list)
|
||||
games: list[str] = field(default_factory=list)
|
||||
plugins: list[str] = field(default_factory=list)
|
||||
keyboards: list[str] = field(default_factory=list)
|
||||
errors: str = ''
|
||||
warnings: str = ''
|
||||
|
||||
@ -89,7 +89,7 @@ class MetadataSubsystem:
|
||||
plugs = _ba.app.plugins
|
||||
config_changed = False
|
||||
found_new = False
|
||||
plugstates: Dict[str, Dict] = _ba.app.config.setdefault('Plugins', {})
|
||||
plugstates: dict[str, dict] = _ba.app.config.setdefault('Plugins', {})
|
||||
assert isinstance(plugstates, dict)
|
||||
|
||||
# Create a potential-plugin for each class we found in the scan.
|
||||
@ -151,7 +151,7 @@ class MetadataSubsystem:
|
||||
'timeout waiting for meta scan to complete.')
|
||||
return self.metascan
|
||||
|
||||
def get_game_types(self) -> List[Type[ba.GameActivity]]:
|
||||
def get_game_types(self) -> list[type[ba.GameActivity]]:
|
||||
"""Return available game types."""
|
||||
from ba._general import getclass
|
||||
from ba._gameactivity import GameActivity
|
||||
@ -167,11 +167,11 @@ class MetadataSubsystem:
|
||||
unowned = self.get_unowned_game_types()
|
||||
return [cls for cls in gameclasses if cls not in unowned]
|
||||
|
||||
def get_unowned_game_types(self) -> Set[Type[ba.GameActivity]]:
|
||||
def get_unowned_game_types(self) -> set[type[ba.GameActivity]]:
|
||||
"""Return present game types not owned by the current account."""
|
||||
try:
|
||||
from ba import _store
|
||||
unowned_games: Set[Type[ba.GameActivity]] = set()
|
||||
unowned_games: set[type[ba.GameActivity]] = set()
|
||||
if not _ba.app.headless_mode:
|
||||
for section in _store.get_store_layout()['minigames']:
|
||||
for mname in section['items']:
|
||||
@ -188,7 +188,7 @@ class MetadataSubsystem:
|
||||
class ScanThread(threading.Thread):
|
||||
"""Thread to scan script dirs for metadata."""
|
||||
|
||||
def __init__(self, dirs: List[str]):
|
||||
def __init__(self, dirs: list[str]):
|
||||
super().__init__()
|
||||
self._dirs = dirs
|
||||
|
||||
@ -215,7 +215,7 @@ class ScanThread(threading.Thread):
|
||||
class DirectoryScan:
|
||||
"""Handles scanning directories for metadata."""
|
||||
|
||||
def __init__(self, paths: List[str]):
|
||||
def __init__(self, paths: list[str]):
|
||||
"""Given one or more paths, parses available meta information.
|
||||
|
||||
It is assumed that these paths are also in PYTHONPATH.
|
||||
@ -228,7 +228,7 @@ class DirectoryScan:
|
||||
|
||||
def _get_path_module_entries(
|
||||
self, path: pathlib.Path, subpath: Union[str, pathlib.Path],
|
||||
modules: List[Tuple[pathlib.Path, pathlib.Path]]) -> None:
|
||||
modules: list[tuple[pathlib.Path, pathlib.Path]]) -> None:
|
||||
"""Scan provided path and add module entries to provided list."""
|
||||
try:
|
||||
# Special case: let's save some time and skip the whole 'ba'
|
||||
@ -254,7 +254,7 @@ class DirectoryScan:
|
||||
|
||||
def scan(self) -> None:
|
||||
"""Scan provided paths."""
|
||||
modules: List[Tuple[pathlib.Path, pathlib.Path]] = []
|
||||
modules: list[tuple[pathlib.Path, pathlib.Path]] = []
|
||||
for path in self.paths:
|
||||
self._get_path_module_entries(path, '', modules)
|
||||
for moduledir, subpath in modules:
|
||||
@ -305,7 +305,7 @@ class DirectoryScan:
|
||||
# If its a package, recurse into its subpackages.
|
||||
if ispackage:
|
||||
try:
|
||||
submodules: List[Tuple[pathlib.Path, pathlib.Path]] = []
|
||||
submodules: list[tuple[pathlib.Path, pathlib.Path]] = []
|
||||
self._get_path_module_entries(moduledir, subpath, submodules)
|
||||
for submodule in submodules:
|
||||
if submodule[1].name != '__init__.py':
|
||||
@ -316,8 +316,8 @@ class DirectoryScan:
|
||||
f"Error scanning '{subpath}': {traceback.format_exc()}\n")
|
||||
|
||||
def _process_module_meta_tags(self, subpath: pathlib.Path,
|
||||
flines: List[str],
|
||||
meta_lines: Dict[int, List[str]]) -> None:
|
||||
flines: list[str],
|
||||
meta_lines: dict[int, list[str]]) -> None:
|
||||
"""Pull data from a module based on its ba_meta tags."""
|
||||
for lindex, mline in meta_lines.items():
|
||||
# meta_lines is just anything containing '# ba_meta '; make sure
|
||||
@ -360,7 +360,7 @@ class DirectoryScan:
|
||||
': unrecognized export type "' + exporttype +
|
||||
'" on line ' + str(lindex + 1) + '.\n')
|
||||
|
||||
def _get_export_class_name(self, subpath: pathlib.Path, lines: List[str],
|
||||
def _get_export_class_name(self, subpath: pathlib.Path, lines: list[str],
|
||||
lindex: int) -> Optional[str]:
|
||||
"""Given line num of an export tag, returns its operand class name."""
|
||||
lindexorig = lindex
|
||||
@ -387,7 +387,7 @@ class DirectoryScan:
|
||||
return classname
|
||||
|
||||
def get_api_requirement(self, subpath: pathlib.Path,
|
||||
meta_lines: Dict[int, List[str]],
|
||||
meta_lines: dict[int, list[str]],
|
||||
toplevel: bool) -> Optional[int]:
|
||||
"""Return an API requirement integer or None if none present.
|
||||
|
||||
|
||||
@ -12,7 +12,7 @@ from ba._session import Session
|
||||
from ba._error import NotFoundError, print_error
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Optional, Any, Dict, List, Type, Sequence
|
||||
from typing import Optional, Any, Sequence
|
||||
import ba
|
||||
|
||||
DEFAULT_TEAM_COLORS = ((0.1, 0.25, 1.0), (1.0, 0.25, 0.2))
|
||||
@ -105,9 +105,9 @@ class MultiTeamSession(Session):
|
||||
shuffle=self._playlist_randomize)
|
||||
|
||||
# Get a game on deck ready to go.
|
||||
self._current_game_spec: Optional[Dict[str, Any]] = None
|
||||
self._next_game_spec: Dict[str, Any] = self._playlist.pull_next()
|
||||
self._next_game: Type[ba.GameActivity] = (
|
||||
self._current_game_spec: Optional[dict[str, Any]] = None
|
||||
self._next_game_spec: dict[str, Any] = self._playlist.pull_next()
|
||||
self._next_game: type[ba.GameActivity] = (
|
||||
self._next_game_spec['resolved_type'])
|
||||
|
||||
# Go ahead and instantiate the next game we'll
|
||||
@ -129,7 +129,7 @@ class MultiTeamSession(Session):
|
||||
"""Returns a description of the next game on deck."""
|
||||
# pylint: disable=cyclic-import
|
||||
from ba._gameactivity import GameActivity
|
||||
gametype: Type[GameActivity] = self._next_game_spec['resolved_type']
|
||||
gametype: type[GameActivity] = self._next_game_spec['resolved_type']
|
||||
assert issubclass(gametype, GameActivity)
|
||||
return gametype.get_settings_display_string(self._next_game_spec)
|
||||
|
||||
@ -274,13 +274,13 @@ class ShuffleList:
|
||||
(avoids repeats in maps or game types)
|
||||
"""
|
||||
|
||||
def __init__(self, items: List[Dict[str, Any]], shuffle: bool = True):
|
||||
def __init__(self, items: list[dict[str, Any]], shuffle: bool = True):
|
||||
self.source_list = items
|
||||
self.shuffle = shuffle
|
||||
self.shuffle_list: List[Dict[str, Any]] = []
|
||||
self.last_gotten: Optional[Dict[str, Any]] = None
|
||||
self.shuffle_list: list[dict[str, Any]] = []
|
||||
self.last_gotten: Optional[dict[str, Any]] = None
|
||||
|
||||
def pull_next(self) -> Dict[str, Any]:
|
||||
def pull_next(self) -> dict[str, Any]:
|
||||
"""Pull and return the next item on the shuffle-list."""
|
||||
|
||||
# Refill our list if its empty.
|
||||
|
||||
@ -11,7 +11,7 @@ from enum import Enum
|
||||
import _ba
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Callable, Any, Optional, Dict, Union, Type
|
||||
from typing import Callable, Any, Optional, Union
|
||||
import ba
|
||||
|
||||
|
||||
@ -69,7 +69,7 @@ class AssetSoundtrackEntry:
|
||||
|
||||
|
||||
# What gets played by default for our different music types:
|
||||
ASSET_SOUNDTRACK_ENTRIES: Dict[MusicType, AssetSoundtrackEntry] = {
|
||||
ASSET_SOUNDTRACK_ENTRIES: dict[MusicType, AssetSoundtrackEntry] = {
|
||||
MusicType.MENU:
|
||||
AssetSoundtrackEntry('menuMusic'),
|
||||
MusicType.VICTORY:
|
||||
@ -130,8 +130,8 @@ class MusicSubsystem:
|
||||
self._music_node: Optional[_ba.Node] = None
|
||||
self._music_mode: MusicPlayMode = MusicPlayMode.REGULAR
|
||||
self._music_player: Optional[MusicPlayer] = None
|
||||
self._music_player_type: Optional[Type[MusicPlayer]] = None
|
||||
self.music_types: Dict[MusicPlayMode, Optional[MusicType]] = {
|
||||
self._music_player_type: Optional[type[MusicPlayer]] = None
|
||||
self.music_types: dict[MusicPlayMode, Optional[MusicType]] = {
|
||||
MusicPlayMode.REGULAR: None,
|
||||
MusicPlayMode.TEST: None
|
||||
}
|
||||
@ -273,7 +273,7 @@ class MusicSubsystem:
|
||||
musictype: Union[MusicType, str, None],
|
||||
continuous: bool = False,
|
||||
mode: MusicPlayMode = MusicPlayMode.REGULAR,
|
||||
testsoundtrack: Dict[str, Any] = None) -> None:
|
||||
testsoundtrack: dict[str, Any] = None) -> None:
|
||||
"""Plays the requested music type/mode.
|
||||
|
||||
For most cases, setmusic() is the proper call to use, which itself
|
||||
@ -329,10 +329,10 @@ class MusicSubsystem:
|
||||
else:
|
||||
self._play_internal_music(musictype)
|
||||
|
||||
def _get_user_soundtrack(self) -> Dict[str, Any]:
|
||||
def _get_user_soundtrack(self) -> dict[str, Any]:
|
||||
"""Return current user soundtrack or empty dict otherwise."""
|
||||
cfg = _ba.app.config
|
||||
soundtrack: Dict[str, Any] = {}
|
||||
soundtrack: dict[str, Any] = {}
|
||||
soundtrackname = cfg.get('Soundtrack')
|
||||
if soundtrackname is not None and soundtrackname != '__default__':
|
||||
try:
|
||||
|
||||
@ -12,10 +12,10 @@ from typing import TYPE_CHECKING
|
||||
import _ba
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Any, Dict, Union, Callable, Optional
|
||||
from typing import Any, Union, Callable, Optional
|
||||
import socket
|
||||
import ba
|
||||
MasterServerCallback = Callable[[Union[None, Dict[str, Any]]], None]
|
||||
MasterServerCallback = Callable[[Union[None, dict[str, Any]]], None]
|
||||
|
||||
# Timeout for standard functions talking to the master-server/etc.
|
||||
DEFAULT_REQUEST_TIMEOUT_SECONDS = 60
|
||||
@ -25,7 +25,7 @@ class NetworkSubsystem:
|
||||
"""Network related app subsystem."""
|
||||
|
||||
def __init__(self) -> None:
|
||||
self.region_pings: Dict[str, float] = {}
|
||||
self.region_pings: dict[str, float] = {}
|
||||
|
||||
|
||||
def get_ip_address_type(addr: str) -> socket.AddressFamily:
|
||||
@ -61,7 +61,7 @@ class MasterServerCallThread(threading.Thread):
|
||||
"""Thread to communicate with the master-server."""
|
||||
|
||||
def __init__(self, request: str, request_type: str,
|
||||
data: Optional[Dict[str, Any]],
|
||||
data: Optional[dict[str, Any]],
|
||||
callback: Optional[MasterServerCallback],
|
||||
response_type: MasterServerResponseType):
|
||||
super().__init__()
|
||||
@ -79,7 +79,7 @@ class MasterServerCallThread(threading.Thread):
|
||||
self._activity = weakref.ref(
|
||||
activity) if activity is not None else None
|
||||
|
||||
def _run_callback(self, arg: Union[None, Dict[str, Any]]) -> None:
|
||||
def _run_callback(self, arg: Union[None, dict[str, Any]]) -> None:
|
||||
# If we were created in an activity context and that activity has
|
||||
# since died, do nothing.
|
||||
# FIXME: Should we just be using a ContextCall instead of doing
|
||||
@ -170,7 +170,7 @@ class MasterServerCallThread(threading.Thread):
|
||||
|
||||
def master_server_get(
|
||||
request: str,
|
||||
data: Dict[str, Any],
|
||||
data: dict[str, Any],
|
||||
callback: Optional[MasterServerCallback] = None,
|
||||
response_type: MasterServerResponseType = MasterServerResponseType.JSON
|
||||
) -> None:
|
||||
@ -181,7 +181,7 @@ def master_server_get(
|
||||
|
||||
def master_server_post(
|
||||
request: str,
|
||||
data: Dict[str, Any],
|
||||
data: dict[str, Any],
|
||||
callback: Optional[MasterServerCallback] = None,
|
||||
response_type: MasterServerResponseType = MasterServerResponseType.JSON
|
||||
) -> None:
|
||||
|
||||
@ -13,8 +13,7 @@ from ba._error import (SessionPlayerNotFoundError, print_exception,
|
||||
from ba._messages import DeathType, DieMessage
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import (Type, Optional, Sequence, Dict, Any, Union, Tuple,
|
||||
Callable)
|
||||
from typing import Optional, Sequence, Any, Union, Callable
|
||||
import ba
|
||||
|
||||
PlayerType = TypeVar('PlayerType', bound='ba.Player')
|
||||
@ -245,8 +244,8 @@ class Player(Generic[TeamType]):
|
||||
assert not self._expired
|
||||
return self.actor is not None and self.actor.is_alive()
|
||||
|
||||
def get_icon(self) -> Dict[str, Any]:
|
||||
"""get_icon() -> Dict[str, Any]
|
||||
def get_icon(self) -> dict[str, Any]:
|
||||
"""get_icon() -> dict[str, Any]
|
||||
|
||||
Returns the character's icon (images, colors, etc contained in a dict)
|
||||
"""
|
||||
@ -254,7 +253,7 @@ class Player(Generic[TeamType]):
|
||||
assert not self._expired
|
||||
return self._sessionplayer.get_icon()
|
||||
|
||||
def assigninput(self, inputtype: Union[ba.InputType, Tuple[ba.InputType,
|
||||
def assigninput(self, inputtype: Union[ba.InputType, tuple[ba.InputType,
|
||||
...]],
|
||||
call: Callable) -> None:
|
||||
"""assigninput(type: Union[ba.InputType, Tuple[ba.InputType, ...]],
|
||||
@ -302,7 +301,7 @@ class EmptyPlayer(Player['ba.EmptyTeam']):
|
||||
# instead of requiring extra work by them.
|
||||
|
||||
|
||||
def playercast(totype: Type[PlayerType], player: ba.Player) -> PlayerType:
|
||||
def playercast(totype: type[PlayerType], player: ba.Player) -> PlayerType:
|
||||
"""Cast a ba.Player to a specific ba.Player subclass.
|
||||
|
||||
Category: Gameplay Functions
|
||||
@ -320,7 +319,7 @@ def playercast(totype: Type[PlayerType], player: ba.Player) -> PlayerType:
|
||||
# NOTE: ideally we should have a single playercast() call and use overloads
|
||||
# for the optional variety, but that currently seems to not be working.
|
||||
# See: https://github.com/python/mypy/issues/8800
|
||||
def playercast_o(totype: Type[PlayerType],
|
||||
def playercast_o(totype: type[PlayerType],
|
||||
player: Optional[ba.Player]) -> Optional[PlayerType]:
|
||||
"""A variant of ba.playercast() for use with optional ba.Player values.
|
||||
|
||||
|
||||
@ -5,17 +5,17 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import copy
|
||||
from typing import Any, TYPE_CHECKING, Dict, List
|
||||
from typing import Any, TYPE_CHECKING
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Type, Sequence
|
||||
from typing import Sequence
|
||||
from ba import _session
|
||||
|
||||
PlaylistType = List[Dict[str, Any]]
|
||||
PlaylistType = list[dict[str, Any]]
|
||||
|
||||
|
||||
def filter_playlist(playlist: PlaylistType,
|
||||
sessiontype: Type[_session.Session],
|
||||
sessiontype: type[_session.Session],
|
||||
add_resolved_type: bool = False,
|
||||
remove_unowned: bool = True,
|
||||
mark_unowned: bool = False) -> PlaylistType:
|
||||
@ -32,7 +32,7 @@ def filter_playlist(playlist: PlaylistType,
|
||||
from ba import _map
|
||||
from ba import _general
|
||||
from ba import _gameactivity
|
||||
goodlist: List[Dict] = []
|
||||
goodlist: list[dict] = []
|
||||
unowned_maps: Sequence[str]
|
||||
if remove_unowned or mark_unowned:
|
||||
unowned_maps = _map.get_unowned_maps()
|
||||
|
||||
@ -10,7 +10,6 @@ from dataclasses import dataclass
|
||||
import _ba
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import List, Dict
|
||||
import ba
|
||||
|
||||
|
||||
@ -23,8 +22,8 @@ class PluginSubsystem:
|
||||
"""
|
||||
|
||||
def __init__(self) -> None:
|
||||
self.potential_plugins: List[ba.PotentialPlugin] = []
|
||||
self.active_plugins: Dict[str, ba.Plugin] = {}
|
||||
self.potential_plugins: list[ba.PotentialPlugin] = []
|
||||
self.active_plugins: dict[str, ba.Plugin] = {}
|
||||
|
||||
def on_app_launch(self) -> None:
|
||||
"""Should be called at app launch time."""
|
||||
@ -73,9 +72,9 @@ class PluginSubsystem:
|
||||
# plugins, but that is only used to give the user a list of plugins
|
||||
# that they can enable. (we wouldn't want to look at meta-scan here
|
||||
# anyway because it may not be done yet at this point in the launch)
|
||||
plugstates: Dict[str, Dict] = _ba.app.config.get('Plugins', {})
|
||||
plugstates: dict[str, dict] = _ba.app.config.get('Plugins', {})
|
||||
assert isinstance(plugstates, dict)
|
||||
plugkeys: List[str] = sorted(key for key, val in plugstates.items()
|
||||
plugkeys: list[str] = sorted(key for key, val in plugstates.items()
|
||||
if val.get('enabled', False))
|
||||
for plugkey in plugkeys:
|
||||
try:
|
||||
|
||||
@ -8,7 +8,7 @@ from typing import TYPE_CHECKING
|
||||
from dataclasses import dataclass
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Sequence, Tuple, Optional
|
||||
from typing import Sequence, Optional
|
||||
import ba
|
||||
|
||||
|
||||
@ -47,7 +47,7 @@ class PowerupAcceptMessage:
|
||||
"""
|
||||
|
||||
|
||||
def get_default_powerup_distribution() -> Sequence[Tuple[str, int]]:
|
||||
def get_default_powerup_distribution() -> Sequence[tuple[str, int]]:
|
||||
"""Standard set of powerups."""
|
||||
return (('triple_bombs', 3), ('ice_bombs', 3), ('punch', 3),
|
||||
('impact_bombs', 3), ('land_mines', 2), ('sticky_bombs', 3),
|
||||
|
||||
@ -9,7 +9,7 @@ from typing import TYPE_CHECKING
|
||||
import _ba
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import List, Tuple, Any, Dict, Optional
|
||||
from typing import Any, Optional
|
||||
|
||||
# NOTE: player color options are enforced server-side for non-pro accounts
|
||||
# so don't change these or they won't stick...
|
||||
@ -20,7 +20,7 @@ PLAYER_COLORS = [(1, 0.15, 0.15), (0.2, 1, 0.2), (0.1, 0.1, 1), (0.2, 1, 1),
|
||||
(0.5, 0.5, 0.5), (1, 1, 1)]
|
||||
|
||||
|
||||
def get_player_colors() -> List[Tuple[float, float, float]]:
|
||||
def get_player_colors() -> list[tuple[float, float, float]]:
|
||||
"""Return user-selectable player colors."""
|
||||
return PLAYER_COLORS
|
||||
|
||||
@ -50,8 +50,8 @@ def get_player_profile_icon(profilename: str) -> str:
|
||||
|
||||
def get_player_profile_colors(
|
||||
profilename: Optional[str],
|
||||
profiles: Dict[str, Dict[str, Any]] = None
|
||||
) -> Tuple[Tuple[float, float, float], Tuple[float, float, float]]:
|
||||
profiles: dict[str, dict[str, Any]] = None
|
||||
) -> tuple[tuple[float, float, float], tuple[float, float, float]]:
|
||||
"""Given a profile, return colors for them."""
|
||||
appconfig = _ba.app.config
|
||||
if profiles is None:
|
||||
|
||||
@ -19,7 +19,7 @@ from ba._dualteamsession import DualTeamSession
|
||||
from ba._coopsession import CoopSession
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Optional, Dict, Any, Type
|
||||
from typing import Optional, Any
|
||||
|
||||
import ba
|
||||
from bacommon.servermanager import ServerConfig
|
||||
@ -198,7 +198,7 @@ class ServerController:
|
||||
callback=self._access_check_response,
|
||||
)
|
||||
|
||||
def _access_check_response(self, data: Optional[Dict[str, Any]]) -> None:
|
||||
def _access_check_response(self, data: Optional[dict[str, Any]]) -> None:
|
||||
import os
|
||||
if data is None:
|
||||
print('error on UDP port access check (internet down?)')
|
||||
@ -267,7 +267,7 @@ class ServerController:
|
||||
|
||||
def _on_playlist_fetch_response(
|
||||
self,
|
||||
result: Optional[Dict[str, Any]],
|
||||
result: Optional[dict[str, Any]],
|
||||
) -> None:
|
||||
if result is None:
|
||||
print('Error fetching playlist; aborting.')
|
||||
@ -283,7 +283,7 @@ class ServerController:
|
||||
self._config.session_type = typename
|
||||
self._playlist_name = (result['playlistName'])
|
||||
|
||||
def _get_session_type(self) -> Type[ba.Session]:
|
||||
def _get_session_type(self) -> type[ba.Session]:
|
||||
# Convert string session type to the class.
|
||||
# Hmm should we just keep this as a string?
|
||||
if self._config.session_type == 'ffa':
|
||||
|
||||
@ -12,7 +12,7 @@ from ba._language import Lstr
|
||||
from ba._player import Player
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Sequence, List, Dict, Any, Optional, Set
|
||||
from typing import Sequence, Any, Optional
|
||||
import ba
|
||||
|
||||
|
||||
@ -76,9 +76,9 @@ class Session:
|
||||
lobby: ba.Lobby
|
||||
max_players: int
|
||||
min_players: int
|
||||
sessionplayers: List[ba.SessionPlayer]
|
||||
sessionplayers: list[ba.SessionPlayer]
|
||||
customdata: dict
|
||||
sessionteams: List[ba.SessionTeam]
|
||||
sessionteams: list[ba.SessionTeam]
|
||||
|
||||
def __init__(self,
|
||||
depsets: Sequence[ba.DependencySet],
|
||||
@ -108,7 +108,7 @@ class Session:
|
||||
# If things are missing, we'll try to gather them into a single
|
||||
# missing-deps exception if possible to give the caller a clean
|
||||
# path to download missing stuff and try again.
|
||||
missing_asset_packages: Set[str] = set()
|
||||
missing_asset_packages: set[str] = set()
|
||||
for depset in depsets:
|
||||
try:
|
||||
depset.resolve()
|
||||
@ -133,7 +133,7 @@ class Session:
|
||||
|
||||
# Ok; looks like our dependencies check out.
|
||||
# Now give the engine a list of asset-set-ids to pass along to clients.
|
||||
required_asset_packages: Set[str] = set()
|
||||
required_asset_packages: set[str] = set()
|
||||
for depset in depsets:
|
||||
required_asset_packages.update(depset.get_asset_package_ids())
|
||||
|
||||
@ -495,7 +495,7 @@ class Session:
|
||||
"""Return the current foreground activity for this session."""
|
||||
return self._activity_weak()
|
||||
|
||||
def get_custom_menu_entries(self) -> List[Dict[str, Any]]:
|
||||
def get_custom_menu_entries(self) -> list[dict[str, Any]]:
|
||||
"""Subclasses can override this to provide custom menu entries.
|
||||
|
||||
The returned value should be a list of dicts, each containing
|
||||
|
||||
@ -8,7 +8,7 @@ from typing import TYPE_CHECKING
|
||||
from dataclasses import dataclass
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Any, List, Tuple
|
||||
from typing import Any
|
||||
|
||||
|
||||
@dataclass
|
||||
@ -61,7 +61,7 @@ class ChoiceSetting(Setting):
|
||||
|
||||
Category: Settings Classes
|
||||
"""
|
||||
choices: List[Tuple[str, Any]]
|
||||
choices: list[tuple[str, Any]]
|
||||
|
||||
|
||||
@dataclass
|
||||
@ -71,7 +71,7 @@ class IntChoiceSetting(ChoiceSetting):
|
||||
Category: Settings Classes
|
||||
"""
|
||||
default: int
|
||||
choices: List[Tuple[str, int]]
|
||||
choices: list[tuple[str, int]]
|
||||
|
||||
|
||||
@dataclass
|
||||
@ -81,4 +81,4 @@ class FloatChoiceSetting(ChoiceSetting):
|
||||
Category: Settings Classes
|
||||
"""
|
||||
default: float
|
||||
choices: List[Tuple[str, float]]
|
||||
choices: list[tuple[str, float]]
|
||||
|
||||
@ -14,8 +14,7 @@ from ba._error import (print_exception, print_error, SessionTeamNotFoundError,
|
||||
|
||||
if TYPE_CHECKING:
|
||||
import ba
|
||||
from weakref import ReferenceType
|
||||
from typing import Any, Dict, Optional, Sequence, Union, Tuple
|
||||
from typing import Any, Optional, Sequence, Union
|
||||
|
||||
|
||||
@dataclass
|
||||
@ -58,7 +57,7 @@ class PlayerRecord:
|
||||
self._stats = weakref.ref(stats)
|
||||
self._last_sessionplayer: Optional[ba.SessionPlayer] = None
|
||||
self._sessionplayer: Optional[ba.SessionPlayer] = None
|
||||
self._sessionteam: Optional[ReferenceType[ba.SessionTeam]] = None
|
||||
self._sessionteam: Optional[weakref.ref[ba.SessionTeam]] = None
|
||||
self.streak = 0
|
||||
self.associate_with_sessionplayer(sessionplayer)
|
||||
|
||||
@ -90,7 +89,7 @@ class PlayerRecord:
|
||||
"""Return the player entry's name."""
|
||||
return self.name_full if full else self.name
|
||||
|
||||
def get_icon(self) -> Dict[str, Any]:
|
||||
def get_icon(self) -> dict[str, Any]:
|
||||
"""Get the icon for this instance's player."""
|
||||
player = self._last_sessionplayer
|
||||
assert player is not None
|
||||
@ -181,7 +180,7 @@ class PlayerRecord:
|
||||
sound = stats.orchestrahitsound4
|
||||
|
||||
def _apply(name2: Lstr, score2: int, showpoints2: bool,
|
||||
color2: Tuple[float, float, float, float], scale2: float,
|
||||
color2: tuple[float, float, float, float], scale2: float,
|
||||
sound2: Optional[ba.Sound]) -> None:
|
||||
from bastd.actor.popuptext import PopupText
|
||||
|
||||
@ -237,8 +236,8 @@ class Stats:
|
||||
"""
|
||||
|
||||
def __init__(self) -> None:
|
||||
self._activity: Optional[ReferenceType[ba.Activity]] = None
|
||||
self._player_records: Dict[str, PlayerRecord] = {}
|
||||
self._activity: Optional[weakref.ref[ba.Activity]] = None
|
||||
self._player_records: dict[str, PlayerRecord] = {}
|
||||
self.orchestrahitsound1: Optional[ba.Sound] = None
|
||||
self.orchestrahitsound2: Optional[ba.Sound] = None
|
||||
self.orchestrahitsound3: Optional[ba.Sound] = None
|
||||
@ -303,7 +302,7 @@ class Stats:
|
||||
self._player_records[name] = PlayerRecord(name, name_full, player,
|
||||
self)
|
||||
|
||||
def get_records(self) -> Dict[str, ba.PlayerRecord]:
|
||||
def get_records(self) -> dict[str, ba.PlayerRecord]:
|
||||
"""Get PlayerRecord corresponding to still-existing players."""
|
||||
records = {}
|
||||
|
||||
|
||||
@ -9,11 +9,11 @@ from typing import TYPE_CHECKING
|
||||
import _ba
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Type, List, Dict, Tuple, Optional, Any
|
||||
from typing import Optional, Any
|
||||
import ba
|
||||
|
||||
|
||||
def get_store_item(item: str) -> Dict[str, Any]:
|
||||
def get_store_item(item: str) -> dict[str, Any]:
|
||||
"""(internal)"""
|
||||
return get_store_items()[item]
|
||||
|
||||
@ -32,17 +32,17 @@ def get_store_item_name_translated(item_name: str) -> ba.Lstr:
|
||||
subs=[('${APP_NAME}',
|
||||
_language.Lstr(resource='titleText'))])
|
||||
if item_name.startswith('maps.'):
|
||||
map_type: Type[ba.Map] = item_info['map_type']
|
||||
map_type: type[ba.Map] = item_info['map_type']
|
||||
return _map.get_map_display_string(map_type.name)
|
||||
if item_name.startswith('games.'):
|
||||
gametype: Type[ba.GameActivity] = item_info['gametype']
|
||||
gametype: type[ba.GameActivity] = item_info['gametype']
|
||||
return gametype.get_display_string()
|
||||
if item_name.startswith('icons.'):
|
||||
return _language.Lstr(resource='editProfileWindow.iconText')
|
||||
raise ValueError('unrecognized item: ' + item_name)
|
||||
|
||||
|
||||
def get_store_item_display_size(item_name: str) -> Tuple[float, float]:
|
||||
def get_store_item_display_size(item_name: str) -> tuple[float, float]:
|
||||
"""(internal)"""
|
||||
if item_name.startswith('characters.'):
|
||||
return 340 * 0.6, 430 * 0.6
|
||||
@ -55,7 +55,7 @@ def get_store_item_display_size(item_name: str) -> Tuple[float, float]:
|
||||
return 450 * 0.6, 450 * 0.6
|
||||
|
||||
|
||||
def get_store_items() -> Dict[str, Dict]:
|
||||
def get_store_items() -> dict[str, dict]:
|
||||
"""Returns info about purchasable items.
|
||||
|
||||
(internal)
|
||||
@ -285,7 +285,7 @@ def get_store_items() -> Dict[str, Dict]:
|
||||
return store_items
|
||||
|
||||
|
||||
def get_store_layout() -> Dict[str, List[Dict[str, Any]]]:
|
||||
def get_store_layout() -> dict[str, list[dict[str, Any]]]:
|
||||
"""Return what's available in the store at a given time.
|
||||
|
||||
Categorized by tab and by section."""
|
||||
@ -421,7 +421,7 @@ def get_available_purchase_count(tab: str = None) -> int:
|
||||
return 0
|
||||
|
||||
|
||||
def _calc_count_for_tab(tabval: List[Dict[str, Any]], our_tickets: int,
|
||||
def _calc_count_for_tab(tabval: list[dict[str, Any]], our_tickets: int,
|
||||
count: int) -> int:
|
||||
for section in tabval:
|
||||
for item in section['items']:
|
||||
@ -442,7 +442,7 @@ def get_available_sale_time(tab: str) -> Optional[int]:
|
||||
import datetime
|
||||
from ba._generated.enums import TimeType, TimeFormat
|
||||
app = _ba.app
|
||||
sale_times: List[Optional[int]] = []
|
||||
sale_times: list[Optional[int]] = []
|
||||
|
||||
# Calc time for our pro sale (old special case).
|
||||
if tab == 'extras':
|
||||
|
||||
@ -10,8 +10,7 @@ from typing import TYPE_CHECKING, TypeVar, Generic
|
||||
from ba._error import print_exception
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from weakref import ReferenceType
|
||||
from typing import Dict, List, Sequence, Tuple, Union, Optional
|
||||
from typing import Sequence, Union, Optional
|
||||
import ba
|
||||
|
||||
|
||||
@ -47,8 +46,8 @@ class SessionTeam:
|
||||
|
||||
# Annotate our attr types at the class level so they're introspectable.
|
||||
name: Union[ba.Lstr, str]
|
||||
color: Tuple[float, ...] # FIXME: can't we make this fixed len?
|
||||
players: List[ba.SessionPlayer]
|
||||
color: tuple[float, ...] # FIXME: can't we make this fixed len?
|
||||
players: list[ba.SessionPlayer]
|
||||
customdata: dict
|
||||
id: int
|
||||
|
||||
@ -88,11 +87,11 @@ class Team(Generic[PlayerType]):
|
||||
|
||||
# Defining these types at the class level instead of in __init__ so
|
||||
# that types are introspectable (these are still instance attrs).
|
||||
players: List[PlayerType]
|
||||
players: list[PlayerType]
|
||||
id: int
|
||||
name: Union[ba.Lstr, str]
|
||||
color: Tuple[float, ...] # FIXME: can't we make this fixed length?
|
||||
_sessionteam: ReferenceType[SessionTeam]
|
||||
color: tuple[float, ...] # FIXME: can't we make this fixed length?
|
||||
_sessionteam: weakref.ref[SessionTeam]
|
||||
_expired: bool
|
||||
_postinited: bool
|
||||
_customdata: dict
|
||||
@ -127,7 +126,7 @@ class Team(Generic[PlayerType]):
|
||||
self._postinited = True
|
||||
|
||||
def manual_init(self, team_id: int, name: Union[ba.Lstr, str],
|
||||
color: Tuple[float, ...]) -> None:
|
||||
color: tuple[float, ...]) -> None:
|
||||
"""Manually init a team for uses such as bots."""
|
||||
self.id = team_id
|
||||
self.name = name
|
||||
|
||||
@ -13,7 +13,7 @@ from ba._gameresults import GameResults
|
||||
from ba._dualteamsession import DualTeamSession
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Any, Dict, Type, Sequence
|
||||
from typing import Any, Sequence
|
||||
from bastd.actor.playerspaz import PlayerSpaz
|
||||
import ba
|
||||
|
||||
@ -31,7 +31,7 @@ class TeamGameActivity(GameActivity[PlayerType, TeamType]):
|
||||
"""
|
||||
|
||||
@classmethod
|
||||
def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool:
|
||||
def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool:
|
||||
"""
|
||||
Class method override;
|
||||
returns True for ba.DualTeamSessions and ba.FreeForAllSessions;
|
||||
|
||||
@ -3,12 +3,16 @@
|
||||
"""Functionality related to game tips.
|
||||
|
||||
These can be shown at opportune times such as between rounds."""
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import TYPE_CHECKING
|
||||
import random
|
||||
from typing import List
|
||||
|
||||
import _ba
|
||||
|
||||
if TYPE_CHECKING:
|
||||
pass
|
||||
|
||||
|
||||
def get_next_tip() -> str:
|
||||
"""Returns the next tip to be displayed."""
|
||||
@ -20,7 +24,7 @@ def get_next_tip() -> str:
|
||||
return tip
|
||||
|
||||
|
||||
def get_all_tips() -> List[str]:
|
||||
def get_all_tips() -> list[str]:
|
||||
"""Return the complete list of tips."""
|
||||
tips = [
|
||||
('If you are short on controllers, install the \'${REMOTE_APP_NAME}\' '
|
||||
|
||||
@ -9,10 +9,10 @@ from typing import TYPE_CHECKING
|
||||
import _ba
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Dict, List, Any
|
||||
from typing import Any
|
||||
|
||||
|
||||
def get_tournament_prize_strings(entry: Dict[str, Any]) -> List[str]:
|
||||
def get_tournament_prize_strings(entry: dict[str, Any]) -> list[str]:
|
||||
"""Given a tournament entry, return strings for its prize levels."""
|
||||
# pylint: disable=too-many-locals
|
||||
from ba._generated.enums import SpecialChar
|
||||
|
||||
@ -10,7 +10,7 @@ import _ba
|
||||
from ba._generated.enums import UIScale
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Optional, Dict, Any, Callable, List, Type
|
||||
from typing import Optional, Any, Callable
|
||||
from ba.ui import UICleanupCheck
|
||||
import ba
|
||||
|
||||
@ -43,13 +43,13 @@ class UISubsystem:
|
||||
else:
|
||||
raise RuntimeError(f'Invalid UIScale value: {interfacetype}')
|
||||
|
||||
self.window_states: Dict[Type, Any] = {} # FIXME: Kill this.
|
||||
self.window_states: dict[type, Any] = {} # FIXME: Kill this.
|
||||
self.main_menu_selection: Optional[str] = None # FIXME: Kill this.
|
||||
self.have_party_queue_window = False
|
||||
self.quit_window: Any = None
|
||||
self.dismiss_wii_remotes_window_call: (Optional[Callable[[],
|
||||
Any]]) = None
|
||||
self.cleanupchecks: List[UICleanupCheck] = []
|
||||
self.cleanupchecks: list[UICleanupCheck] = []
|
||||
self.upkeeptimer: Optional[ba.Timer] = None
|
||||
self.use_toolbars = env.get('toolbar_test', True)
|
||||
self.party_window: Any = None # FIXME: Don't use Any.
|
||||
|
||||
@ -10,7 +10,7 @@ import _ba
|
||||
from ba._music import MusicPlayer
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import List, Optional, Callable, Any
|
||||
from typing import Optional, Callable, Any
|
||||
|
||||
|
||||
class MacMusicAppMusicPlayer(MusicPlayer):
|
||||
@ -60,7 +60,7 @@ class _MacMusicAppThread(threading.Thread):
|
||||
def __init__(self) -> None:
|
||||
super().__init__()
|
||||
self._commands_available = threading.Event()
|
||||
self._commands: List[List] = []
|
||||
self._commands: list[list] = []
|
||||
self._volume = 1.0
|
||||
self._current_playlist: Optional[str] = None
|
||||
self._orig_volume: Optional[int] = None
|
||||
@ -153,7 +153,7 @@ class _MacMusicAppThread(threading.Thread):
|
||||
self._commands_available.set()
|
||||
|
||||
def _handle_get_playlists_command(
|
||||
self, target: Callable[[List[str]], None]) -> None:
|
||||
self, target: Callable[[list[str]], None]) -> None:
|
||||
from ba._general import Call
|
||||
try:
|
||||
playlists = _ba.mac_music_app_get_playlists()
|
||||
|
||||
@ -9,7 +9,7 @@ import os
|
||||
import _ba
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Optional, List, Sequence
|
||||
from typing import Optional, Sequence
|
||||
|
||||
|
||||
def get_human_readable_user_scripts_path() -> str:
|
||||
|
||||
@ -12,7 +12,7 @@ import _ba
|
||||
from ba._music import MusicPlayer
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Callable, Any, Union, List, Optional
|
||||
from typing import Callable, Any, Union, Optional
|
||||
|
||||
|
||||
class OSMusicPlayer(MusicPlayer):
|
||||
@ -26,7 +26,7 @@ class OSMusicPlayer(MusicPlayer):
|
||||
self._actually_playing = False
|
||||
|
||||
@classmethod
|
||||
def get_valid_music_file_extensions(cls) -> List[str]:
|
||||
def get_valid_music_file_extensions(cls) -> list[str]:
|
||||
"""Return file extensions for types playable on this device."""
|
||||
# FIXME: should ask the C++ layer for these; just hard-coding for now.
|
||||
return ['mp3', 'ogg', 'm4a', 'wav', 'flac', 'mid']
|
||||
@ -60,7 +60,7 @@ class OSMusicPlayer(MusicPlayer):
|
||||
self._on_play_folder_cb).start()
|
||||
|
||||
def _on_play_folder_cb(self,
|
||||
result: Union[str, List[str]],
|
||||
result: Union[str, list[str]],
|
||||
error: Optional[str] = None) -> None:
|
||||
from ba import _language
|
||||
if error is not None:
|
||||
@ -94,8 +94,8 @@ class OSMusicPlayer(MusicPlayer):
|
||||
|
||||
class _PickFolderSongThread(threading.Thread):
|
||||
|
||||
def __init__(self, path: str, valid_extensions: List[str],
|
||||
callback: Callable[[Union[str, List[str]], Optional[str]],
|
||||
def __init__(self, path: str, valid_extensions: list[str],
|
||||
callback: Callable[[Union[str, list[str]], Optional[str]],
|
||||
None]):
|
||||
super().__init__()
|
||||
self._valid_extensions = valid_extensions
|
||||
@ -108,7 +108,7 @@ class _PickFolderSongThread(threading.Thread):
|
||||
do_print_error = True
|
||||
try:
|
||||
_ba.set_thread_name('BA_PickFolderSongThread')
|
||||
all_files: List[str] = []
|
||||
all_files: list[str] = []
|
||||
valid_extensions = ['.' + x for x in self._valid_extensions]
|
||||
for root, _subdirs, filenames in os.walk(self._path):
|
||||
for fname in filenames:
|
||||
|
||||
@ -14,8 +14,7 @@ from ba._generated.enums import TimeType
|
||||
from ba._general import print_active_refs
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Optional, List, Any
|
||||
from weakref import ReferenceType
|
||||
from typing import Optional, Any
|
||||
|
||||
import ba
|
||||
|
||||
@ -45,7 +44,7 @@ class Window:
|
||||
@dataclass
|
||||
class UICleanupCheck:
|
||||
"""Holds info about a uicleanupcheck target."""
|
||||
obj: ReferenceType
|
||||
obj: weakref.ref
|
||||
widget: ba.Widget
|
||||
widget_death_time: Optional[float]
|
||||
|
||||
@ -126,15 +125,15 @@ class UIController:
|
||||
def __init__(self) -> None:
|
||||
|
||||
# FIXME: document why we have separate stacks for game and menu...
|
||||
self._main_stack_game: List[UIEntry] = []
|
||||
self._main_stack_menu: List[UIEntry] = []
|
||||
self._main_stack_game: list[UIEntry] = []
|
||||
self._main_stack_menu: list[UIEntry] = []
|
||||
|
||||
# This points at either the game or menu stack.
|
||||
self._main_stack: Optional[List[UIEntry]] = None
|
||||
self._main_stack: Optional[list[UIEntry]] = None
|
||||
|
||||
# There's only one of these since we don't need to preserve its state
|
||||
# between sessions.
|
||||
self._dialog_stack: List[UIEntry] = []
|
||||
self._dialog_stack: list[UIEntry] = []
|
||||
|
||||
def show_main_menu(self, in_game: bool = True) -> None:
|
||||
"""Show the main menu, clearing other UIs from location stacks."""
|
||||
|
||||
@ -11,7 +11,7 @@ import ba
|
||||
from ba.internal import JoinActivity
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Any, Dict, List, Optional, Sequence, Union
|
||||
from typing import Any, Optional, Sequence, Union
|
||||
|
||||
|
||||
class CoopJoinActivity(JoinActivity):
|
||||
@ -54,7 +54,7 @@ class CoopJoinActivity(JoinActivity):
|
||||
ControlsGuide(delay=1.0).autoretain()
|
||||
|
||||
def _on_got_scores_to_beat(self,
|
||||
scores: Optional[List[Dict[str, Any]]]) -> None:
|
||||
scores: Optional[list[dict[str, Any]]]) -> None:
|
||||
# pylint: disable=too-many-locals
|
||||
# pylint: disable=too-many-statements
|
||||
from efro.util import asserttype
|
||||
|
||||
@ -14,7 +14,7 @@ from bastd.actor.text import Text
|
||||
from bastd.actor.zoomtext import ZoomText
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Optional, Tuple, List, Dict, Any, Sequence
|
||||
from typing import Optional, Any, Sequence
|
||||
from bastd.ui.store.button import StoreButton
|
||||
from bastd.ui.league.rankbutton import LeagueRankButton
|
||||
|
||||
@ -96,7 +96,7 @@ class CoopScoreScreen(ba.Activity[ba.Player, ba.Team]):
|
||||
self._game_config_str: Optional[str] = None
|
||||
|
||||
# Ui bits.
|
||||
self._corner_button_offs: Optional[Tuple[float, float]] = None
|
||||
self._corner_button_offs: Optional[tuple[float, float]] = None
|
||||
self._league_rank_button: Optional[LeagueRankButton] = None
|
||||
self._store_button_instance: Optional[StoreButton] = None
|
||||
self._restart_button: Optional[ba.Widget] = None
|
||||
@ -110,7 +110,7 @@ class CoopScoreScreen(ba.Activity[ba.Player, ba.Team]):
|
||||
self._is_more_levels: Optional[bool] = None
|
||||
self._next_level_name: Optional[str] = None
|
||||
self._show_friend_scores: Optional[bool] = None
|
||||
self._show_info: Optional[Dict[str, Any]] = None
|
||||
self._show_info: Optional[dict[str, Any]] = None
|
||||
self._name_str: Optional[str] = None
|
||||
self._friends_loading_status: Optional[ba.Actor] = None
|
||||
self._score_loading_status: Optional[ba.Actor] = None
|
||||
@ -124,7 +124,7 @@ class CoopScoreScreen(ba.Activity[ba.Player, ba.Team]):
|
||||
self._allow_server_transition = False
|
||||
self._server_transitioning: Optional[bool] = None
|
||||
|
||||
self._playerinfos: List[ba.PlayerInfo] = settings['playerinfos']
|
||||
self._playerinfos: list[ba.PlayerInfo] = settings['playerinfos']
|
||||
assert isinstance(self._playerinfos, list)
|
||||
assert (isinstance(i, ba.PlayerInfo) for i in self._playerinfos)
|
||||
|
||||
@ -831,7 +831,7 @@ class CoopScoreScreen(ba.Activity[ba.Player, ba.Team]):
|
||||
scale = 0.65
|
||||
elif p_count == 4:
|
||||
scale = 0.5
|
||||
times: List[Tuple[float, float]] = []
|
||||
times: list[tuple[float, float]] = []
|
||||
for i in range(display_count):
|
||||
times.insert(random.randrange(0,
|
||||
len(times) + 1),
|
||||
@ -929,7 +929,7 @@ class CoopScoreScreen(ba.Activity[ba.Player, ba.Team]):
|
||||
'loop': False
|
||||
})).autoretain()
|
||||
|
||||
def _got_friend_score_results(self, results: Optional[List[Any]]) -> None:
|
||||
def _got_friend_score_results(self, results: Optional[list[Any]]) -> None:
|
||||
|
||||
# FIXME: tidy this up
|
||||
# pylint: disable=too-many-locals
|
||||
@ -990,7 +990,7 @@ class CoopScoreScreen(ba.Activity[ba.Player, ba.Team]):
|
||||
while len(results) < 5:
|
||||
results.append([0, '-', False])
|
||||
results = results[:5]
|
||||
times: List[Tuple[float, float]] = []
|
||||
times: list[tuple[float, float]] = []
|
||||
for i in range(len(results)):
|
||||
times.insert(random.randrange(0,
|
||||
len(times) + 1),
|
||||
@ -1044,7 +1044,7 @@ class CoopScoreScreen(ba.Activity[ba.Player, ba.Team]):
|
||||
transition=Text.Transition.IN_RIGHT,
|
||||
transition_delay=tdelay2).autoretain()
|
||||
|
||||
def _got_score_results(self, results: Optional[Dict[str, Any]]) -> None:
|
||||
def _got_score_results(self, results: Optional[dict[str, Any]]) -> None:
|
||||
|
||||
# FIXME: tidy this up
|
||||
# pylint: disable=too-many-locals
|
||||
@ -1142,7 +1142,7 @@ class CoopScoreScreen(ba.Activity[ba.Player, ba.Team]):
|
||||
while len(self._show_info['tops']) < 10:
|
||||
self._show_info['tops'].append([0, '-'])
|
||||
|
||||
times: List[Tuple[float, float]] = []
|
||||
times: list[tuple[float, float]] = []
|
||||
for i in range(len(self._show_info['tops'])):
|
||||
times.insert(
|
||||
random.randrange(0,
|
||||
|
||||
@ -11,7 +11,7 @@ from bastd.activity.multiteamscore import MultiTeamScoreScreenActivity
|
||||
from bastd.actor.zoomtext import ZoomText
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Any, Dict
|
||||
pass
|
||||
|
||||
|
||||
class DrawScoreScreenActivity(MultiTeamScoreScreenActivity):
|
||||
|
||||
@ -11,7 +11,7 @@ from bastd.activity.multiteamscore import MultiTeamScoreScreenActivity
|
||||
from bastd.actor.zoomtext import ZoomText
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Any, Dict
|
||||
pass
|
||||
|
||||
|
||||
class TeamVictoryScoreScreenActivity(MultiTeamScoreScreenActivity):
|
||||
|
||||
@ -10,7 +10,7 @@ import ba
|
||||
from bastd.activity.multiteamscore import MultiTeamScoreScreenActivity
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Any, Dict, Optional, Set, Tuple
|
||||
from typing import Any, Optional
|
||||
|
||||
|
||||
class FreeForAllVictoryScoreScreenActivity(MultiTeamScoreScreenActivity):
|
||||
@ -71,7 +71,7 @@ class FreeForAllVictoryScoreScreenActivity(MultiTeamScoreScreenActivity):
|
||||
scale=1.2,
|
||||
x_offset=-110.0)
|
||||
|
||||
sound_times: Set[float] = set()
|
||||
sound_times: set[float] = set()
|
||||
|
||||
def _scoretxt(text: str,
|
||||
x_offs: float,
|
||||
@ -260,7 +260,7 @@ class FreeForAllVictoryScoreScreenActivity(MultiTeamScoreScreenActivity):
|
||||
v_offs -= spacing
|
||||
|
||||
def _safe_animate(self, node: Optional[ba.Node], attr: str,
|
||||
keys: Dict[float, float]) -> None:
|
||||
keys: dict[float, float]) -> None:
|
||||
"""Run an animation on a node if the node still exists."""
|
||||
if node:
|
||||
ba.animate(node, attr, keys)
|
||||
|
||||
@ -11,7 +11,7 @@ from ba.internal import JoinActivity
|
||||
from bastd.actor.text import Text
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Any, Dict, Optional
|
||||
from typing import Optional
|
||||
|
||||
|
||||
class MultiTeamJoinActivity(JoinActivity):
|
||||
|
||||
@ -11,7 +11,7 @@ from bastd.actor.text import Text
|
||||
from bastd.actor.image import Image
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Any, Dict, Optional, Union
|
||||
from typing import Optional, Union
|
||||
|
||||
|
||||
class MultiTeamScoreScreenActivity(ScoreScreenActivity):
|
||||
|
||||
@ -10,7 +10,7 @@ import ba
|
||||
from bastd.activity.multiteamscore import MultiTeamScoreScreenActivity
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Any, Dict, List, Tuple, Optional
|
||||
from typing import Optional
|
||||
|
||||
|
||||
class TeamSeriesVictoryScoreScreenActivity(MultiTeamScoreScreenActivity):
|
||||
@ -51,7 +51,7 @@ class TeamSeriesVictoryScoreScreenActivity(MultiTeamScoreScreenActivity):
|
||||
ba.timer(4.6, ba.Call(ba.playsound, self._score_display_sound))
|
||||
|
||||
# Score / Name / Player-record.
|
||||
player_entries: List[Tuple[int, str, ba.PlayerRecord]] = []
|
||||
player_entries: list[tuple[int, str, ba.PlayerRecord]] = []
|
||||
|
||||
# Note: for ffa, exclude players who haven't entered the game yet.
|
||||
if self._is_ffa:
|
||||
|
||||
@ -14,7 +14,7 @@ import ba
|
||||
from bastd.gameutils import SharedObjects
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Any, Sequence, Optional, Callable, List, Tuple, Type
|
||||
from typing import Any, Sequence, Optional, Callable
|
||||
|
||||
PlayerType = TypeVar('PlayerType', bound='ba.Player')
|
||||
|
||||
@ -693,7 +693,7 @@ class Bomb(ba.Actor):
|
||||
elif self.bomb_type == 'tnt':
|
||||
self.blast_radius *= 1.45
|
||||
|
||||
self._explode_callbacks: List[Callable[[Bomb, Blast], Any]] = []
|
||||
self._explode_callbacks: list[Callable[[Bomb, Blast], Any]] = []
|
||||
|
||||
# The player this came from.
|
||||
self._source_player = source_player
|
||||
@ -716,7 +716,7 @@ class Bomb(ba.Actor):
|
||||
# since players carrying those things and thus touching footing
|
||||
# objects will think they're on solid ground.. perhaps we don't
|
||||
# wanna add this even in the tnt case?
|
||||
materials: Tuple[ba.Material, ...]
|
||||
materials: tuple[ba.Material, ...]
|
||||
if self.bomb_type == 'tnt':
|
||||
materials = (factory.bomb_material, shared.footing_material,
|
||||
shared.object_material)
|
||||
@ -847,7 +847,7 @@ class Bomb(ba.Actor):
|
||||
})
|
||||
|
||||
def get_source_player(
|
||||
self, playertype: Type[PlayerType]) -> Optional[PlayerType]:
|
||||
self, playertype: type[PlayerType]) -> Optional[PlayerType]:
|
||||
"""Return the source-player if one exists and is the provided type."""
|
||||
player: Any = self._source_player
|
||||
return (player if isinstance(player, playertype) and player.exists()
|
||||
|
||||
@ -10,7 +10,7 @@ import _ba
|
||||
import ba
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Any, Tuple, Optional, Sequence, Union
|
||||
from typing import Any, Optional, Sequence, Union
|
||||
|
||||
|
||||
class ControlsGuide(ba.Actor):
|
||||
@ -24,7 +24,7 @@ class ControlsGuide(ba.Actor):
|
||||
"""
|
||||
|
||||
def __init__(self,
|
||||
position: Tuple[float, float] = (390.0, 120.0),
|
||||
position: tuple[float, float] = (390.0, 120.0),
|
||||
scale: float = 1.0,
|
||||
delay: float = 0.0,
|
||||
lifespan: float = None,
|
||||
@ -57,8 +57,8 @@ class ControlsGuide(ba.Actor):
|
||||
self._update_timer: Optional[ba.Timer] = None
|
||||
self._title_text: Optional[ba.Node]
|
||||
clr: Sequence[float]
|
||||
extra_pos_1: Optional[Tuple[float, float]]
|
||||
extra_pos_2: Optional[Tuple[float, float]]
|
||||
extra_pos_1: Optional[tuple[float, float]]
|
||||
extra_pos_2: Optional[tuple[float, float]]
|
||||
if ba.app.iircade_mode:
|
||||
xtweak = 0.2
|
||||
ytweak = 0.2
|
||||
|
||||
@ -10,7 +10,7 @@ from typing import TYPE_CHECKING
|
||||
import ba
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Any, Tuple, Sequence, Union, Dict, Optional
|
||||
from typing import Any, Sequence, Union, Optional
|
||||
|
||||
|
||||
class Image(ba.Actor):
|
||||
@ -33,13 +33,13 @@ class Image(ba.Actor):
|
||||
BOTTOM_CENTER = 'bottomCenter'
|
||||
|
||||
def __init__(self,
|
||||
texture: Union[ba.Texture, Dict[str, Any]],
|
||||
position: Tuple[float, float] = (0, 0),
|
||||
texture: Union[ba.Texture, dict[str, Any]],
|
||||
position: tuple[float, float] = (0, 0),
|
||||
transition: Optional[Transition] = None,
|
||||
transition_delay: float = 0.0,
|
||||
attach: Attach = Attach.CENTER,
|
||||
color: Sequence[float] = (1.0, 1.0, 1.0, 1.0),
|
||||
scale: Tuple[float, float] = (100.0, 100.0),
|
||||
scale: tuple[float, float] = (100.0, 100.0),
|
||||
transition_out_delay: float = None,
|
||||
model_opaque: ba.Model = None,
|
||||
model_transparent: ba.Model = None,
|
||||
|
||||
@ -10,7 +10,7 @@ import ba
|
||||
from bastd.actor.spaz import Spaz
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Any, Sequence, Tuple, Optional, Type, Literal
|
||||
from typing import Any, Sequence, Optional, Literal
|
||||
|
||||
PlayerType = TypeVar('PlayerType', bound=ba.Player)
|
||||
TeamType = TypeVar('TeamType', bound=ba.Team)
|
||||
@ -65,7 +65,7 @@ class PlayerSpaz(Spaz):
|
||||
powerups_expire=powerups_expire)
|
||||
self.last_player_attacked_by: Optional[ba.Player] = None
|
||||
self.last_attacked_time = 0.0
|
||||
self.last_attacked_type: Optional[Tuple[str, str]] = None
|
||||
self.last_attacked_type: Optional[tuple[str, str]] = None
|
||||
self.held_count = 0
|
||||
self.last_player_held_by: Optional[ba.Player] = None
|
||||
self._player = player
|
||||
@ -75,17 +75,17 @@ class PlayerSpaz(Spaz):
|
||||
|
||||
@overload
|
||||
def getplayer(self,
|
||||
playertype: Type[PlayerType],
|
||||
playertype: type[PlayerType],
|
||||
doraise: Literal[False] = False) -> Optional[PlayerType]:
|
||||
...
|
||||
|
||||
@overload
|
||||
def getplayer(self, playertype: Type[PlayerType],
|
||||
def getplayer(self, playertype: type[PlayerType],
|
||||
doraise: Literal[True]) -> PlayerType:
|
||||
...
|
||||
|
||||
def getplayer(self,
|
||||
playertype: Type[PlayerType],
|
||||
playertype: type[PlayerType],
|
||||
doraise: bool = False) -> Optional[PlayerType]:
|
||||
"""Get the ba.Player associated with this Spaz.
|
||||
|
||||
|
||||
@ -11,7 +11,7 @@ import ba
|
||||
from bastd.gameutils import SharedObjects
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import List, Any, Optional, Sequence
|
||||
from typing import Any, Optional, Sequence
|
||||
|
||||
DEFAULT_POWERUP_INTERVAL = 8.0
|
||||
|
||||
@ -133,14 +133,14 @@ class PowerupBoxFactory:
|
||||
actions=('impact_sound', self.drop_sound, 0.5, 0.1),
|
||||
)
|
||||
|
||||
self._powerupdist: List[str] = []
|
||||
self._powerupdist: list[str] = []
|
||||
for powerup, freq in get_default_powerup_distribution():
|
||||
for _i in range(int(freq)):
|
||||
self._powerupdist.append(powerup)
|
||||
|
||||
def get_random_powerup_type(self,
|
||||
forcetype: str = None,
|
||||
excludetypes: List[str] = None) -> str:
|
||||
excludetypes: list[str] = None) -> str:
|
||||
"""Returns a random powerup type (string).
|
||||
|
||||
See ba.Powerup.poweruptype for available type values.
|
||||
|
||||
@ -10,7 +10,7 @@ from typing import TYPE_CHECKING
|
||||
import ba
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Optional, Dict, Tuple
|
||||
from typing import Optional
|
||||
|
||||
|
||||
class RespawnIcon:
|
||||
@ -116,7 +116,7 @@ class RespawnIcon:
|
||||
"""Is this icon still visible?"""
|
||||
return self._visible
|
||||
|
||||
def _get_context(self, player: ba.Player) -> Tuple[bool, float, Dict]:
|
||||
def _get_context(self, player: ba.Player) -> tuple[bool, float, dict]:
|
||||
"""Return info on where we should be shown and stored."""
|
||||
activity = ba.getactivity()
|
||||
|
||||
|
||||
@ -10,7 +10,7 @@ from typing import TYPE_CHECKING
|
||||
import ba
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Any, Optional, Sequence, Dict, Union
|
||||
from typing import Any, Optional, Sequence, Union
|
||||
|
||||
|
||||
class _Entry:
|
||||
@ -334,7 +334,7 @@ class Scoreboard:
|
||||
show up on boards if provided.
|
||||
"""
|
||||
self._flat_tex = ba.gettexture('null')
|
||||
self._entries: Dict[int, _Entry] = {}
|
||||
self._entries: dict[int, _Entry] = {}
|
||||
self._label = label
|
||||
self.score_split = score_split
|
||||
|
||||
|
||||
@ -15,8 +15,7 @@ from bastd.actor.spazfactory import SpazFactory
|
||||
from bastd.gameutils import SharedObjects
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import (Any, Sequence, Optional, Dict, List, Union, Callable,
|
||||
Tuple, Set)
|
||||
from typing import Any, Sequence, Optional, Union, Callable
|
||||
from bastd.actor.spazfactory import SpazFactory
|
||||
|
||||
POWERUP_WEAR_OFF_TIME = 20000
|
||||
@ -104,7 +103,7 @@ class Spaz(ba.Actor):
|
||||
self._hockey = activity.map.is_hockey
|
||||
else:
|
||||
self._hockey = False
|
||||
self._punched_nodes: Set[ba.Node] = set()
|
||||
self._punched_nodes: set[ba.Node] = set()
|
||||
self._cursed = False
|
||||
self._connected_to_player: Optional[ba.Player] = None
|
||||
materials = [
|
||||
@ -203,9 +202,9 @@ class Spaz(ba.Actor):
|
||||
self.last_run_time_ms = -9999
|
||||
self._last_run_value = 0.0
|
||||
self.last_bomb_time_ms = -9999
|
||||
self._turbo_filter_times: Dict[str, int] = {}
|
||||
self._turbo_filter_times: dict[str, int] = {}
|
||||
self._turbo_filter_time_bucket = 0
|
||||
self._turbo_filter_counts: Dict[str, int] = {}
|
||||
self._turbo_filter_counts: dict[str, int] = {}
|
||||
self.frozen = False
|
||||
self.shattered = False
|
||||
self._last_hit_time: Optional[int] = None
|
||||
@ -213,7 +212,7 @@ class Spaz(ba.Actor):
|
||||
self._bomb_held = False
|
||||
if self.default_shields:
|
||||
self.equip_shields()
|
||||
self._dropped_bomb_callbacks: List[Callable[[Spaz, ba.Actor],
|
||||
self._dropped_bomb_callbacks: list[Callable[[Spaz, ba.Actor],
|
||||
Any]] = []
|
||||
|
||||
self._score_text: Optional[ba.Node] = None
|
||||
@ -561,7 +560,7 @@ class Spaz(ba.Actor):
|
||||
def on_punched(self, damage: int) -> None:
|
||||
"""Called when this spaz gets punched."""
|
||||
|
||||
def get_death_points(self, how: ba.DeathType) -> Tuple[int, int]:
|
||||
def get_death_points(self, how: ba.DeathType) -> tuple[int, int]:
|
||||
"""Get the points awarded for killing this spaz."""
|
||||
del how # Unused.
|
||||
num_hits = float(max(1, self._num_times_hit))
|
||||
|
||||
@ -9,10 +9,10 @@ import _ba
|
||||
import ba
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import List, Optional, Tuple
|
||||
from typing import Optional
|
||||
|
||||
|
||||
def get_appearances(include_locked: bool = False) -> List[str]:
|
||||
def get_appearances(include_locked: bool = False) -> list[str]:
|
||||
"""Get the list of available spaz appearances."""
|
||||
# pylint: disable=too-many-statements
|
||||
# pylint: disable=too-many-branches
|
||||
@ -104,15 +104,15 @@ class Appearance:
|
||||
self.upper_leg_model = ''
|
||||
self.lower_leg_model = ''
|
||||
self.toes_model = ''
|
||||
self.jump_sounds: List[str] = []
|
||||
self.attack_sounds: List[str] = []
|
||||
self.impact_sounds: List[str] = []
|
||||
self.death_sounds: List[str] = []
|
||||
self.pickup_sounds: List[str] = []
|
||||
self.fall_sounds: List[str] = []
|
||||
self.jump_sounds: list[str] = []
|
||||
self.attack_sounds: list[str] = []
|
||||
self.impact_sounds: list[str] = []
|
||||
self.death_sounds: list[str] = []
|
||||
self.pickup_sounds: list[str] = []
|
||||
self.fall_sounds: list[str] = []
|
||||
self.style = 'spaz'
|
||||
self.default_color: Optional[Tuple[float, float, float]] = None
|
||||
self.default_highlight: Optional[Tuple[float, float, float]] = None
|
||||
self.default_color: Optional[tuple[float, float, float]] = None
|
||||
self.default_highlight: Optional[tuple[float, float, float]] = None
|
||||
|
||||
|
||||
def register_appearances() -> None:
|
||||
|
||||
@ -13,7 +13,7 @@ import ba
|
||||
from bastd.actor.spaz import Spaz
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Any, Optional, List, Tuple, Sequence, Type, Callable
|
||||
from typing import Any, Optional, Sequence, Callable
|
||||
from bastd.actor.flag import Flag
|
||||
|
||||
LITE_BOT_COLOR = (1.2, 0.9, 0.2)
|
||||
@ -125,7 +125,7 @@ class SpazBot(Spaz):
|
||||
self._map = weakref.ref(activity.map)
|
||||
self.last_player_attacked_by: Optional[ba.Player] = None
|
||||
self.last_attacked_time = 0.0
|
||||
self.last_attacked_type: Optional[Tuple[str, str]] = None
|
||||
self.last_attacked_type: Optional[tuple[str, str]] = None
|
||||
self.target_point_default: Optional[ba.Vec3] = None
|
||||
self.held_count = 0
|
||||
self.last_player_held_by: Optional[ba.Player] = None
|
||||
@ -141,7 +141,7 @@ class SpazBot(Spaz):
|
||||
|
||||
self._throw_release_time: Optional[float] = None
|
||||
self._have_dropped_throw_bomb: Optional[bool] = None
|
||||
self._player_pts: Optional[List[Tuple[ba.Vec3, ba.Vec3]]] = None
|
||||
self._player_pts: Optional[list[tuple[ba.Vec3, ba.Vec3]]] = None
|
||||
|
||||
# These cooldowns didn't exist when these bots were calibrated,
|
||||
# so take them out of the equation.
|
||||
@ -161,7 +161,7 @@ class SpazBot(Spaz):
|
||||
return mval
|
||||
|
||||
def _get_target_player_pt(
|
||||
self) -> Tuple[Optional[ba.Vec3], Optional[ba.Vec3]]:
|
||||
self) -> tuple[Optional[ba.Vec3], Optional[ba.Vec3]]:
|
||||
"""Returns the position and velocity of our target.
|
||||
|
||||
Both values will be None in the case of no target.
|
||||
@ -189,7 +189,7 @@ class SpazBot(Spaz):
|
||||
ba.Vec3(closest_vel[0], closest_vel[1], closest_vel[2]))
|
||||
return None, None
|
||||
|
||||
def set_player_points(self, pts: List[Tuple[ba.Vec3, ba.Vec3]]) -> None:
|
||||
def set_player_points(self, pts: list[tuple[ba.Vec3, ba.Vec3]]) -> None:
|
||||
"""Provide the spaz-bot with the locations of its enemies."""
|
||||
self._player_pts = pts
|
||||
|
||||
@ -882,7 +882,7 @@ class SpazBotSet:
|
||||
self._bot_list_count = 5
|
||||
self._bot_add_list = 0
|
||||
self._bot_update_list = 0
|
||||
self._bot_lists: List[List[SpazBot]] = [
|
||||
self._bot_lists: list[list[SpazBot]] = [
|
||||
[] for _ in range(self._bot_list_count)
|
||||
]
|
||||
self._spawn_sound = ba.getsound('spawn')
|
||||
@ -894,7 +894,7 @@ class SpazBotSet:
|
||||
self.clear()
|
||||
|
||||
def spawn_bot(self,
|
||||
bot_type: Type[SpazBot],
|
||||
bot_type: type[SpazBot],
|
||||
pos: Sequence[float],
|
||||
spawn_time: float = 3.0,
|
||||
on_spawn_call: Callable[[SpazBot], Any] = None) -> None:
|
||||
@ -907,7 +907,7 @@ class SpazBotSet:
|
||||
on_spawn_call))
|
||||
self._spawning_count += 1
|
||||
|
||||
def _spawn_bot(self, bot_type: Type[SpazBot], pos: Sequence[float],
|
||||
def _spawn_bot(self, bot_type: type[SpazBot], pos: Sequence[float],
|
||||
on_spawn_call: Optional[Callable[[SpazBot], Any]]) -> None:
|
||||
spaz = bot_type()
|
||||
ba.playsound(self._spawn_sound, position=pos)
|
||||
@ -925,9 +925,9 @@ class SpazBotSet:
|
||||
return (self._spawning_count > 0
|
||||
or any(any(b.is_alive() for b in l) for l in self._bot_lists))
|
||||
|
||||
def get_living_bots(self) -> List[SpazBot]:
|
||||
def get_living_bots(self) -> list[SpazBot]:
|
||||
"""Get the living bots in the set."""
|
||||
bots: List[SpazBot] = []
|
||||
bots: list[SpazBot] = []
|
||||
for botlist in self._bot_lists:
|
||||
for bot in botlist:
|
||||
if bot.is_alive():
|
||||
|
||||
@ -11,7 +11,7 @@ from bastd.gameutils import SharedObjects
|
||||
import _ba
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Any, Dict
|
||||
from typing import Any
|
||||
|
||||
|
||||
class SpazFactory:
|
||||
@ -206,7 +206,7 @@ class SpazFactory:
|
||||
actions=('modify_node_collision', 'collide', False),
|
||||
)
|
||||
|
||||
self.spaz_media: Dict[str, Any] = {}
|
||||
self.spaz_media: dict[str, Any] = {}
|
||||
|
||||
# Lets load some basic rules.
|
||||
# (allows them to be tweaked from the master server)
|
||||
@ -227,7 +227,7 @@ class SpazFactory:
|
||||
"""
|
||||
return ba.app.spaz_appearances[character].style
|
||||
|
||||
def get_media(self, character: str) -> Dict[str, Any]:
|
||||
def get_media(self, character: str) -> dict[str, Any]:
|
||||
"""Return the set of media used by this variant of spaz."""
|
||||
char = ba.app.spaz_appearances[character]
|
||||
if character not in self.spaz_media:
|
||||
|
||||
@ -10,7 +10,7 @@ from typing import TYPE_CHECKING
|
||||
import ba
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Any, Union, Tuple, Sequence, Optional
|
||||
from typing import Any, Union, Sequence, Optional
|
||||
|
||||
|
||||
class Text(ba.Actor):
|
||||
@ -50,7 +50,7 @@ class Text(ba.Actor):
|
||||
|
||||
def __init__(self,
|
||||
text: Union[str, ba.Lstr],
|
||||
position: Tuple[float, float] = (0.0, 0.0),
|
||||
position: tuple[float, float] = (0.0, 0.0),
|
||||
h_align: HAlign = HAlign.LEFT,
|
||||
v_align: VAlign = VAlign.NONE,
|
||||
color: Sequence[float] = (1.0, 1.0, 1.0, 1.0),
|
||||
|
||||
@ -10,7 +10,7 @@ from typing import TYPE_CHECKING
|
||||
import ba
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Any, Union, Tuple, Sequence
|
||||
from typing import Any, Union, Sequence
|
||||
|
||||
|
||||
class ZoomText(ba.Actor):
|
||||
@ -23,8 +23,8 @@ class ZoomText(ba.Actor):
|
||||
|
||||
def __init__(self,
|
||||
text: Union[str, ba.Lstr],
|
||||
position: Tuple[float, float] = (0.0, 0.0),
|
||||
shiftposition: Tuple[float, float] = None,
|
||||
position: tuple[float, float] = (0.0, 0.0),
|
||||
shiftposition: tuple[float, float] = None,
|
||||
shiftdelay: float = None,
|
||||
lifespan: float = None,
|
||||
flash: bool = True,
|
||||
@ -171,7 +171,7 @@ class ZoomText(ba.Actor):
|
||||
return None
|
||||
return super().handlemessage(msg)
|
||||
|
||||
def _jitter(self, position: Tuple[float, float],
|
||||
def _jitter(self, position: tuple[float, float],
|
||||
jitter_amount: float) -> None:
|
||||
if not self.node:
|
||||
return
|
||||
@ -187,8 +187,8 @@ class ZoomText(ba.Actor):
|
||||
ba.animate(cmb, attr, keys, loop=True)
|
||||
cmb.connectattr('output', self.node, 'position')
|
||||
|
||||
def _shift(self, position1: Tuple[float, float],
|
||||
position2: Tuple[float, float]) -> None:
|
||||
def _shift(self, position1: tuple[float, float],
|
||||
position2: tuple[float, float]) -> None:
|
||||
if not self.node:
|
||||
return
|
||||
cmb = ba.newnode('combine', owner=self.node, attrs={'size': 2})
|
||||
|
||||
@ -8,15 +8,15 @@ from typing import TYPE_CHECKING
|
||||
import ba
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Type, Any, Dict, Callable, Optional
|
||||
from typing import Any, Callable, Optional
|
||||
|
||||
|
||||
class AppDelegate(ba.AppDelegate):
|
||||
"""Defines handlers for high level app functionality."""
|
||||
|
||||
def create_default_game_settings_ui(
|
||||
self, gameclass: Type[ba.GameActivity],
|
||||
sessiontype: Type[ba.Session], settings: Optional[dict],
|
||||
self, gameclass: type[ba.GameActivity],
|
||||
sessiontype: type[ba.Session], settings: Optional[dict],
|
||||
completion_call: Callable[[Optional[dict]], Any]) -> None:
|
||||
"""(internal)"""
|
||||
|
||||
|
||||
@ -17,7 +17,7 @@ from bastd.actor.scoreboard import Scoreboard
|
||||
from bastd.gameutils import SharedObjects
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Any, Type, List, Dict, Sequence, Union
|
||||
from typing import Any, Sequence, Union
|
||||
|
||||
|
||||
class Player(ba.Player['Team']):
|
||||
@ -72,11 +72,11 @@ class AssaultGame(ba.TeamGameActivity[Player, Team]):
|
||||
]
|
||||
|
||||
@classmethod
|
||||
def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool:
|
||||
def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool:
|
||||
return issubclass(sessiontype, ba.DualTeamSession)
|
||||
|
||||
@classmethod
|
||||
def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]:
|
||||
def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]:
|
||||
return ba.getmaps('team_flag')
|
||||
|
||||
def __init__(self, settings: dict):
|
||||
@ -84,7 +84,7 @@ class AssaultGame(ba.TeamGameActivity[Player, Team]):
|
||||
self._scoreboard = Scoreboard()
|
||||
self._last_score_time = 0.0
|
||||
self._score_sound = ba.getsound('score')
|
||||
self._base_region_materials: Dict[int, ba.Material] = {}
|
||||
self._base_region_materials: dict[int, ba.Material] = {}
|
||||
self._epic_mode = bool(settings['Epic Mode'])
|
||||
self._score_to_win = int(settings['Score to Win'])
|
||||
self._time_limit = float(settings['Time Limit'])
|
||||
|
||||
@ -16,7 +16,7 @@ from bastd.actor.flag import (FlagFactory, Flag, FlagPickedUpMessage,
|
||||
FlagDroppedMessage, FlagDiedMessage)
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Any, Type, List, Dict, Sequence, Union, Optional
|
||||
from typing import Any, Sequence, Union, Optional
|
||||
|
||||
|
||||
class CTFFlag(Flag):
|
||||
@ -132,11 +132,11 @@ class CaptureTheFlagGame(ba.TeamGameActivity[Player, Team]):
|
||||
]
|
||||
|
||||
@classmethod
|
||||
def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool:
|
||||
def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool:
|
||||
return issubclass(sessiontype, ba.DualTeamSession)
|
||||
|
||||
@classmethod
|
||||
def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]:
|
||||
def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]:
|
||||
return ba.getmaps('team_flag')
|
||||
|
||||
def __init__(self, settings: dict):
|
||||
@ -491,10 +491,10 @@ class CaptureTheFlagGame(ba.TeamGameActivity[Player, Team]):
|
||||
player = spaz.getplayer(Player, True)
|
||||
team: Team = player.team
|
||||
player.touching_own_flag = 0
|
||||
no_physical_mats: List[ba.Material] = [
|
||||
no_physical_mats: list[ba.Material] = [
|
||||
team.spaz_material_no_flag_physical
|
||||
]
|
||||
no_collide_mats: List[ba.Material] = [
|
||||
no_collide_mats: list[ba.Material] = [
|
||||
team.spaz_material_no_flag_collide
|
||||
]
|
||||
|
||||
|
||||
@ -16,7 +16,7 @@ from bastd.actor.scoreboard import Scoreboard
|
||||
from bastd.gameutils import SharedObjects
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Any, Type, List, Dict, Optional, Sequence, Union
|
||||
from typing import Any, Optional, Sequence, Union
|
||||
|
||||
|
||||
class Player(ba.Player['Team']):
|
||||
@ -81,7 +81,7 @@ class ChosenOneGame(ba.TeamGameActivity[Player, Team]):
|
||||
scoreconfig = ba.ScoreConfig(label='Time Held')
|
||||
|
||||
@classmethod
|
||||
def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]:
|
||||
def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]:
|
||||
return ba.getmaps('keep_away')
|
||||
|
||||
def __init__(self, settings: dict):
|
||||
@ -89,7 +89,7 @@ class ChosenOneGame(ba.TeamGameActivity[Player, Team]):
|
||||
self._scoreboard = Scoreboard()
|
||||
self._chosen_one_player: Optional[Player] = None
|
||||
self._swipsound = ba.getsound('swip')
|
||||
self._countdownsounds: Dict[int, ba.Sound] = {
|
||||
self._countdownsounds: dict[int, ba.Sound] = {
|
||||
10: ba.getsound('announceTen'),
|
||||
9: ba.getsound('announceNine'),
|
||||
8: ba.getsound('announceEight'),
|
||||
|
||||
@ -17,7 +17,7 @@ from bastd.actor.playerspaz import PlayerSpaz
|
||||
from bastd.gameutils import SharedObjects
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Any, Optional, Type, List, Dict, Sequence, Union
|
||||
from typing import Any, Optional, Sequence, Union
|
||||
from bastd.actor.respawnicon import RespawnIcon
|
||||
|
||||
|
||||
@ -105,11 +105,11 @@ class ConquestGame(ba.TeamGameActivity[Player, Team]):
|
||||
]
|
||||
|
||||
@classmethod
|
||||
def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool:
|
||||
def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool:
|
||||
return issubclass(sessiontype, ba.DualTeamSession)
|
||||
|
||||
@classmethod
|
||||
def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]:
|
||||
def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]:
|
||||
return ba.getmaps('conquest')
|
||||
|
||||
def __init__(self, settings: dict):
|
||||
@ -119,7 +119,7 @@ class ConquestGame(ba.TeamGameActivity[Player, Team]):
|
||||
self._score_sound = ba.getsound('score')
|
||||
self._swipsound = ba.getsound('swip')
|
||||
self._extraflagmat = ba.Material()
|
||||
self._flags: List[ConquestFlag] = []
|
||||
self._flags: list[ConquestFlag] = []
|
||||
self._epic_mode = bool(settings['Epic Mode'])
|
||||
self._time_limit = float(settings['Time Limit'])
|
||||
|
||||
|
||||
@ -14,7 +14,7 @@ from bastd.actor.playerspaz import PlayerSpaz
|
||||
from bastd.actor.scoreboard import Scoreboard
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Any, Type, List, Dict, Tuple, Union, Sequence, Optional
|
||||
from typing import Any, Union, Sequence, Optional
|
||||
|
||||
|
||||
class Player(ba.Player['Team']):
|
||||
@ -40,7 +40,7 @@ class DeathMatchGame(ba.TeamGameActivity[Player, Team]):
|
||||
|
||||
@classmethod
|
||||
def get_available_settings(
|
||||
cls, sessiontype: Type[ba.Session]) -> List[ba.Setting]:
|
||||
cls, sessiontype: type[ba.Session]) -> list[ba.Setting]:
|
||||
settings = [
|
||||
ba.IntSetting(
|
||||
'Kills to Win Per Player',
|
||||
@ -86,12 +86,12 @@ class DeathMatchGame(ba.TeamGameActivity[Player, Team]):
|
||||
return settings
|
||||
|
||||
@classmethod
|
||||
def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool:
|
||||
def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool:
|
||||
return (issubclass(sessiontype, ba.DualTeamSession)
|
||||
or issubclass(sessiontype, ba.FreeForAllSession))
|
||||
|
||||
@classmethod
|
||||
def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]:
|
||||
def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]:
|
||||
return ba.getmaps('melee')
|
||||
|
||||
def __init__(self, settings: dict):
|
||||
|
||||
@ -20,7 +20,7 @@ from bastd.actor.respawnicon import RespawnIcon
|
||||
from bastd.gameutils import SharedObjects
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Any, Type, Dict, List, Tuple, Optional
|
||||
from typing import Any, Optional
|
||||
|
||||
|
||||
class Player(ba.Player['Team']):
|
||||
@ -49,12 +49,12 @@ class EasterEggHuntGame(ba.TeamGameActivity[Player, Team]):
|
||||
|
||||
# We're currently hard-coded for one map.
|
||||
@classmethod
|
||||
def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]:
|
||||
def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]:
|
||||
return ['Tower D']
|
||||
|
||||
# We support teams, free-for-all, and co-op sessions.
|
||||
@classmethod
|
||||
def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool:
|
||||
def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool:
|
||||
return (issubclass(sessiontype, ba.CoopSession)
|
||||
or issubclass(sessiontype, ba.DualTeamSession)
|
||||
or issubclass(sessiontype, ba.FreeForAllSession))
|
||||
@ -75,7 +75,7 @@ class EasterEggHuntGame(ba.TeamGameActivity[Player, Team]):
|
||||
self.egg_material.add_actions(
|
||||
conditions=('they_have_material', shared.player_material),
|
||||
actions=(('call', 'at_connect', self._on_egg_player_collide), ))
|
||||
self._eggs: List[Egg] = []
|
||||
self._eggs: list[Egg] = []
|
||||
self._update_timer: Optional[ba.Timer] = None
|
||||
self._countdown: Optional[OnScreenCountdown] = None
|
||||
self._bots: Optional[SpazBotSet] = None
|
||||
@ -224,7 +224,7 @@ class EasterEggHuntGame(ba.TeamGameActivity[Player, Team]):
|
||||
class Egg(ba.Actor):
|
||||
"""A lovely egg that can be picked up for points."""
|
||||
|
||||
def __init__(self, position: Tuple[float, float, float] = (0.0, 1.0, 0.0)):
|
||||
def __init__(self, position: tuple[float, float, float] = (0.0, 1.0, 0.0)):
|
||||
super().__init__()
|
||||
activity = self.activity
|
||||
assert isinstance(activity, EasterEggHuntGame)
|
||||
|
||||
@ -14,8 +14,7 @@ from bastd.actor.spazfactory import SpazFactory
|
||||
from bastd.actor.scoreboard import Scoreboard
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import (Any, Tuple, Dict, Type, List, Sequence, Optional,
|
||||
Union)
|
||||
from typing import Any, Sequence, Optional, Union
|
||||
|
||||
|
||||
class Icon(ba.Actor):
|
||||
@ -23,7 +22,7 @@ class Icon(ba.Actor):
|
||||
|
||||
def __init__(self,
|
||||
player: Player,
|
||||
position: Tuple[float, float],
|
||||
position: tuple[float, float],
|
||||
scale: float,
|
||||
show_lives: bool = True,
|
||||
show_death: bool = True,
|
||||
@ -83,7 +82,7 @@ class Icon(ba.Actor):
|
||||
})
|
||||
self.set_position_and_scale(position, scale)
|
||||
|
||||
def set_position_and_scale(self, position: Tuple[float, float],
|
||||
def set_position_and_scale(self, position: tuple[float, float],
|
||||
scale: float) -> None:
|
||||
"""(Re)position the icon."""
|
||||
assert self.node
|
||||
@ -156,7 +155,7 @@ class Player(ba.Player['Team']):
|
||||
|
||||
def __init__(self) -> None:
|
||||
self.lives = 0
|
||||
self.icons: List[Icon] = []
|
||||
self.icons: list[Icon] = []
|
||||
|
||||
|
||||
class Team(ba.Team[Player]):
|
||||
@ -164,7 +163,7 @@ class Team(ba.Team[Player]):
|
||||
|
||||
def __init__(self) -> None:
|
||||
self.survival_seconds: Optional[int] = None
|
||||
self.spawn_order: List[Player] = []
|
||||
self.spawn_order: list[Player] = []
|
||||
|
||||
|
||||
# ba_meta export game
|
||||
@ -183,7 +182,7 @@ class EliminationGame(ba.TeamGameActivity[Player, Team]):
|
||||
|
||||
@classmethod
|
||||
def get_available_settings(
|
||||
cls, sessiontype: Type[ba.Session]) -> List[ba.Setting]:
|
||||
cls, sessiontype: type[ba.Session]) -> list[ba.Setting]:
|
||||
settings = [
|
||||
ba.IntSetting(
|
||||
'Lives Per Player',
|
||||
@ -224,12 +223,12 @@ class EliminationGame(ba.TeamGameActivity[Player, Team]):
|
||||
return settings
|
||||
|
||||
@classmethod
|
||||
def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool:
|
||||
def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool:
|
||||
return (issubclass(sessiontype, ba.DualTeamSession)
|
||||
or issubclass(sessiontype, ba.FreeForAllSession))
|
||||
|
||||
@classmethod
|
||||
def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]:
|
||||
def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]:
|
||||
return ba.getmaps('melee')
|
||||
|
||||
def __init__(self, settings: dict):
|
||||
@ -421,7 +420,7 @@ class EliminationGame(ba.TeamGameActivity[Player, Team]):
|
||||
if living_player:
|
||||
assert living_player_pos is not None
|
||||
player_pos = ba.Vec3(living_player_pos)
|
||||
points: List[Tuple[float, ba.Vec3]] = []
|
||||
points: list[tuple[float, ba.Vec3]] = []
|
||||
for team in self.teams:
|
||||
start_pos = ba.Vec3(self.map.get_start_position(team.id))
|
||||
points.append(
|
||||
@ -539,7 +538,7 @@ class EliminationGame(ba.TeamGameActivity[Player, Team]):
|
||||
if len(self._get_living_teams()) < 2:
|
||||
self._round_end_timer = ba.Timer(0.5, self.end_game)
|
||||
|
||||
def _get_living_teams(self) -> List[Team]:
|
||||
def _get_living_teams(self) -> list[Team]:
|
||||
return [
|
||||
team for team in self.teams
|
||||
if len(team.players) > 0 and any(player.lives > 0
|
||||
|
||||
@ -26,7 +26,7 @@ from bastd.actor.spazbot import (SpazBotDiedMessage, SpazBotPunchedMessage,
|
||||
StickyBot, ExplodeyBot)
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Any, List, Type, Dict, Sequence, Optional, Union
|
||||
from typing import Any, Sequence, Optional, Union
|
||||
from bastd.actor.spaz import Spaz
|
||||
from bastd.actor.spazbot import SpazBot
|
||||
|
||||
@ -110,12 +110,12 @@ class FootballTeamGame(ba.TeamGameActivity[Player, Team]):
|
||||
default_music = ba.MusicType.FOOTBALL
|
||||
|
||||
@classmethod
|
||||
def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool:
|
||||
def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool:
|
||||
# We only support two-team play.
|
||||
return issubclass(sessiontype, ba.DualTeamSession)
|
||||
|
||||
@classmethod
|
||||
def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]:
|
||||
def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]:
|
||||
return ba.getmaps('football')
|
||||
|
||||
def __init__(self, settings: dict):
|
||||
@ -137,7 +137,7 @@ class FootballTeamGame(ba.TeamGameActivity[Player, Team]):
|
||||
('call', 'at_connect', self._handle_score),
|
||||
))
|
||||
self._flag_spawn_pos: Optional[Sequence[float]] = None
|
||||
self._score_regions: List[ba.NodeActor] = []
|
||||
self._score_regions: list[ba.NodeActor] = []
|
||||
self._flag: Optional[FootballFlag] = None
|
||||
self._flag_respawn_timer: Optional[ba.Timer] = None
|
||||
self._flag_respawn_light: Optional[ba.NodeActor] = None
|
||||
@ -377,12 +377,12 @@ class FootballCoopGame(ba.CoopGameActivity[Player, Team]):
|
||||
self._player_has_punched = False
|
||||
self._scoreboard: Optional[Scoreboard] = None
|
||||
self._flag_spawn_pos: Optional[Sequence[float]] = None
|
||||
self._score_regions: List[ba.NodeActor] = []
|
||||
self._exclude_powerups: List[str] = []
|
||||
self._score_regions: list[ba.NodeActor] = []
|
||||
self._exclude_powerups: list[str] = []
|
||||
self._have_tnt = False
|
||||
self._bot_types_initial: Optional[List[Type[SpazBot]]] = None
|
||||
self._bot_types_7: Optional[List[Type[SpazBot]]] = None
|
||||
self._bot_types_14: Optional[List[Type[SpazBot]]] = None
|
||||
self._bot_types_initial: Optional[list[type[SpazBot]]] = None
|
||||
self._bot_types_7: Optional[list[type[SpazBot]]] = None
|
||||
self._bot_types_14: Optional[list[type[SpazBot]]] = None
|
||||
self._bot_team: Optional[Team] = None
|
||||
self._starttime_ms: Optional[int] = None
|
||||
self._time_text: Optional[ba.NodeActor] = None
|
||||
@ -436,9 +436,9 @@ class FootballCoopGame(ba.CoopGameActivity[Player, Team]):
|
||||
controlsguide.ControlsGuide(delay=3.0, lifespan=10.0,
|
||||
bright=True).autoretain()
|
||||
assert self.initialplayerinfos is not None
|
||||
abot: Type[SpazBot]
|
||||
bbot: Type[SpazBot]
|
||||
cbot: Type[SpazBot]
|
||||
abot: type[SpazBot]
|
||||
bbot: type[SpazBot]
|
||||
cbot: type[SpazBot]
|
||||
if self._preset in ['rookie', 'rookie_easy']:
|
||||
self._exclude_powerups = ['curse']
|
||||
self._have_tnt = False
|
||||
@ -467,7 +467,7 @@ class FootballCoopGame(ba.CoopGameActivity[Player, Team]):
|
||||
self._bot_types_initial = [ChargerBot] * len(
|
||||
self.initialplayerinfos)
|
||||
abot = (BrawlerBot if self._preset == 'pro' else BrawlerBotLite)
|
||||
typed_bot_list: List[Type[SpazBot]] = []
|
||||
typed_bot_list: list[type[SpazBot]] = []
|
||||
self._bot_types_7 = (
|
||||
typed_bot_list + [abot] + [BomberBot] *
|
||||
(1 if len(self.initialplayerinfos) < 3 else 2))
|
||||
@ -479,7 +479,7 @@ class FootballCoopGame(ba.CoopGameActivity[Player, Team]):
|
||||
self._have_tnt = True
|
||||
abot = (BrawlerBotPro if self._preset == 'uber' else BrawlerBot)
|
||||
bbot = (TriggerBotPro if self._preset == 'uber' else TriggerBot)
|
||||
typed_bot_list_2: List[Type[SpazBot]] = []
|
||||
typed_bot_list_2: list[type[SpazBot]] = []
|
||||
self._bot_types_initial = (typed_bot_list_2 + [StickyBot] +
|
||||
[abot] * len(self.initialplayerinfos))
|
||||
self._bot_types_7 = (
|
||||
@ -542,7 +542,7 @@ class FootballCoopGame(ba.CoopGameActivity[Player, Team]):
|
||||
for bottype in self._bot_types_initial:
|
||||
self._spawn_bot(bottype)
|
||||
|
||||
def _on_got_scores_to_beat(self, scores: List[Dict[str, Any]]) -> None:
|
||||
def _on_got_scores_to_beat(self, scores: list[dict[str, Any]]) -> None:
|
||||
self._show_standard_scores_to_beat_ui(scores)
|
||||
|
||||
def _on_bot_spawn(self, spaz: SpazBot) -> None:
|
||||
@ -550,7 +550,7 @@ class FootballCoopGame(ba.CoopGameActivity[Player, Team]):
|
||||
spaz.target_point_default = ba.Vec3(0, 0, 0)
|
||||
|
||||
def _spawn_bot(self,
|
||||
spaz_type: Type[SpazBot],
|
||||
spaz_type: type[SpazBot],
|
||||
immediate: bool = False) -> None:
|
||||
assert self._bot_team is not None
|
||||
pos = self.map.get_start_position(self._bot_team.id)
|
||||
|
||||
@ -16,7 +16,7 @@ from bastd.actor.powerupbox import PowerupBoxFactory
|
||||
from bastd.gameutils import SharedObjects
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Any, Sequence, Dict, Type, List, Optional, Union
|
||||
from typing import Any, Sequence, Optional, Union
|
||||
|
||||
|
||||
class PuckDiedMessage:
|
||||
@ -36,7 +36,7 @@ class Puck(ba.Actor):
|
||||
|
||||
# Spawn just above the provided point.
|
||||
self._spawn_pos = (position[0], position[1] + 1.0, position[2])
|
||||
self.last_players_to_touch: Dict[int, Player] = {}
|
||||
self.last_players_to_touch: dict[int, Player] = {}
|
||||
self.scored = False
|
||||
assert activity is not None
|
||||
assert isinstance(activity, HockeyGame)
|
||||
@ -141,11 +141,11 @@ class HockeyGame(ba.TeamGameActivity[Player, Team]):
|
||||
default_music = ba.MusicType.HOCKEY
|
||||
|
||||
@classmethod
|
||||
def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool:
|
||||
def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool:
|
||||
return issubclass(sessiontype, ba.DualTeamSession)
|
||||
|
||||
@classmethod
|
||||
def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]:
|
||||
def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]:
|
||||
return ba.getmaps('hockey')
|
||||
|
||||
def __init__(self, settings: dict):
|
||||
@ -199,7 +199,7 @@ class HockeyGame(ba.TeamGameActivity[Player, Team]):
|
||||
True), ('modify_part_collision', 'physical', False),
|
||||
('call', 'at_connect', self._handle_score)))
|
||||
self._puck_spawn_pos: Optional[Sequence[float]] = None
|
||||
self._score_regions: Optional[List[ba.NodeActor]] = None
|
||||
self._score_regions: Optional[list[ba.NodeActor]] = None
|
||||
self._puck: Optional[Puck] = None
|
||||
self._score_to_win = int(settings['Score to Win'])
|
||||
self._time_limit = float(settings['Time Limit'])
|
||||
|
||||
@ -17,7 +17,7 @@ from bastd.actor.flag import (Flag, FlagDroppedMessage, FlagDiedMessage,
|
||||
FlagPickedUpMessage)
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Any, Type, List, Dict, Optional, Sequence, Union
|
||||
from typing import Any, Optional, Sequence, Union
|
||||
|
||||
|
||||
class FlagState(Enum):
|
||||
@ -81,12 +81,12 @@ class KeepAwayGame(ba.TeamGameActivity[Player, Team]):
|
||||
default_music = ba.MusicType.KEEP_AWAY
|
||||
|
||||
@classmethod
|
||||
def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool:
|
||||
def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool:
|
||||
return (issubclass(sessiontype, ba.DualTeamSession)
|
||||
or issubclass(sessiontype, ba.FreeForAllSession))
|
||||
|
||||
@classmethod
|
||||
def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]:
|
||||
def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]:
|
||||
return ba.getmaps('keep_away')
|
||||
|
||||
def __init__(self, settings: dict):
|
||||
@ -108,7 +108,7 @@ class KeepAwayGame(ba.TeamGameActivity[Player, Team]):
|
||||
}
|
||||
self._flag_spawn_pos: Optional[Sequence[float]] = None
|
||||
self._update_timer: Optional[ba.Timer] = None
|
||||
self._holding_players: List[Player] = []
|
||||
self._holding_players: list[Player] = []
|
||||
self._flag_state: Optional[FlagState] = None
|
||||
self._flag_light: Optional[ba.Node] = None
|
||||
self._scoring_team: Optional[Team] = None
|
||||
|
||||
@ -18,8 +18,7 @@ from bastd.actor.scoreboard import Scoreboard
|
||||
from bastd.gameutils import SharedObjects
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from weakref import ReferenceType
|
||||
from typing import Any, Type, List, Dict, Optional, Sequence, Union
|
||||
from typing import Any, Optional, Sequence, Union
|
||||
|
||||
|
||||
class FlagState(Enum):
|
||||
@ -84,11 +83,11 @@ class KingOfTheHillGame(ba.TeamGameActivity[Player, Team]):
|
||||
scoreconfig = ba.ScoreConfig(label='Time Held')
|
||||
|
||||
@classmethod
|
||||
def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool:
|
||||
def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool:
|
||||
return issubclass(sessiontype, ba.MultiTeamSession)
|
||||
|
||||
@classmethod
|
||||
def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]:
|
||||
def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]:
|
||||
return ba.getmaps('king_of_the_hill')
|
||||
|
||||
def __init__(self, settings: dict):
|
||||
@ -113,7 +112,7 @@ class KingOfTheHillGame(ba.TeamGameActivity[Player, Team]):
|
||||
self._flag_state: Optional[FlagState] = None
|
||||
self._flag: Optional[Flag] = None
|
||||
self._flag_light: Optional[ba.Node] = None
|
||||
self._scoring_team: Optional[ReferenceType[Team]] = None
|
||||
self._scoring_team: Optional[weakref.ref[Team]] = None
|
||||
self._hold_time = int(settings['Hold Time'])
|
||||
self._time_limit = float(settings['Time Limit'])
|
||||
self._flag_region_material = ba.Material()
|
||||
|
||||
@ -15,7 +15,7 @@ from bastd.actor.bomb import Bomb
|
||||
from bastd.actor.onscreentimer import OnScreenTimer
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Any, Sequence, Optional, List, Dict, Type, Type
|
||||
from typing import Any, Sequence, Optional
|
||||
|
||||
|
||||
class Player(ba.Player['Team']):
|
||||
@ -50,12 +50,12 @@ class MeteorShowerGame(ba.TeamGameActivity[Player, Team]):
|
||||
|
||||
# We're currently hard-coded for one map.
|
||||
@classmethod
|
||||
def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]:
|
||||
def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]:
|
||||
return ['Rampage']
|
||||
|
||||
# We support teams, free-for-all, and co-op sessions.
|
||||
@classmethod
|
||||
def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool:
|
||||
def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool:
|
||||
return (issubclass(sessiontype, ba.DualTeamSession)
|
||||
or issubclass(sessiontype, ba.FreeForAllSession)
|
||||
or issubclass(sessiontype, ba.CoopSession))
|
||||
|
||||
@ -15,7 +15,7 @@ from bastd.actor.spazbot import SpazBotSet, ChargerBot, SpazBotDiedMessage
|
||||
from bastd.actor.onscreentimer import OnScreenTimer
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Any, Type, Dict, List, Optional
|
||||
from typing import Any, Optional
|
||||
|
||||
|
||||
class Player(ba.Player['Team']):
|
||||
@ -41,14 +41,14 @@ class NinjaFightGame(ba.TeamGameActivity[Player, Team]):
|
||||
default_music = ba.MusicType.TO_THE_DEATH
|
||||
|
||||
@classmethod
|
||||
def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]:
|
||||
def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]:
|
||||
# For now we're hard-coding spawn positions and whatnot
|
||||
# so we need to be sure to specify that we only support
|
||||
# a specific map.
|
||||
return ['Courtyard']
|
||||
|
||||
@classmethod
|
||||
def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool:
|
||||
def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool:
|
||||
# We currently support Co-Op only.
|
||||
return issubclass(sessiontype, ba.CoopSession)
|
||||
|
||||
|
||||
@ -28,21 +28,21 @@ from bastd.actor.spazbot import (
|
||||
TriggerBotProShielded, BrawlerBotPro, BomberBotProShielded)
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Any, Type, Dict, Optional, List, Tuple, Union, Sequence
|
||||
from typing import Any, Optional, Union, Sequence
|
||||
from bastd.actor.spazbot import SpazBot
|
||||
|
||||
|
||||
@dataclass
|
||||
class Wave:
|
||||
"""A wave of enemies."""
|
||||
entries: List[Union[Spawn, Spacing, Delay, None]]
|
||||
entries: list[Union[Spawn, Spacing, Delay, None]]
|
||||
base_angle: float = 0.0
|
||||
|
||||
|
||||
@dataclass
|
||||
class Spawn:
|
||||
"""A bot spawn event in a wave."""
|
||||
bottype: Union[Type[SpazBot], str]
|
||||
bottype: Union[type[SpazBot], str]
|
||||
point: Optional[Point] = None
|
||||
spacing: float = 5.0
|
||||
|
||||
@ -123,7 +123,7 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]):
|
||||
name = 'Onslaught'
|
||||
description = 'Defeat all enemies.'
|
||||
|
||||
tips: List[Union[str, ba.GameTip]] = [
|
||||
tips: list[Union[str, ba.GameTip]] = [
|
||||
'Hold any button to run.'
|
||||
' (Trigger buttons work well if you have them)',
|
||||
'Try tricking enemies into killing eachother or running off cliffs.',
|
||||
@ -179,8 +179,8 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]):
|
||||
self._dingsound = ba.getsound('dingSmall')
|
||||
self._dingsoundhigh = ba.getsound('dingSmallHigh')
|
||||
self._have_tnt = False
|
||||
self._excluded_powerups: Optional[List[str]] = None
|
||||
self._waves: List[Wave] = []
|
||||
self._excluded_powerups: Optional[list[str]] = None
|
||||
self._waves: list[Wave] = []
|
||||
self._tntspawner: Optional[TNTSpawner] = None
|
||||
self._bots: Optional[SpazBotSet] = None
|
||||
self._powerup_drop_timer: Optional[ba.Timer] = None
|
||||
@ -538,10 +538,10 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]):
|
||||
self._bots = SpazBotSet()
|
||||
ba.timer(4.0, self._start_updating_waves)
|
||||
|
||||
def _on_got_scores_to_beat(self, scores: List[Dict[str, Any]]) -> None:
|
||||
def _on_got_scores_to_beat(self, scores: list[dict[str, Any]]) -> None:
|
||||
self._show_standard_scores_to_beat_ui(scores)
|
||||
|
||||
def _get_dist_grp_totals(self, grps: List[Any]) -> Tuple[int, int]:
|
||||
def _get_dist_grp_totals(self, grps: list[Any]) -> tuple[int, int]:
|
||||
totalpts = 0
|
||||
totaldudes = 0
|
||||
for grp in grps:
|
||||
@ -553,11 +553,11 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]):
|
||||
|
||||
def _get_distribution(self, target_points: int, min_dudes: int,
|
||||
max_dudes: int, group_count: int,
|
||||
max_level: int) -> List[List[Tuple[int, int]]]:
|
||||
max_level: int) -> list[list[tuple[int, int]]]:
|
||||
"""Calculate a distribution of bad guys given some params."""
|
||||
max_iterations = 10 + max_dudes * 2
|
||||
|
||||
groups: List[List[Tuple[int, int]]] = []
|
||||
groups: list[list[tuple[int, int]]] = []
|
||||
for _g in range(group_count):
|
||||
groups.append([])
|
||||
types = [1]
|
||||
@ -599,9 +599,9 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]):
|
||||
|
||||
return groups
|
||||
|
||||
def _add_dist_entry_if_possible(self, groups: List[List[Tuple[int, int]]],
|
||||
def _add_dist_entry_if_possible(self, groups: list[list[tuple[int, int]]],
|
||||
max_dudes: int, target_points: int,
|
||||
types: List[int]) -> int:
|
||||
types: list[int]) -> int:
|
||||
# See how much we're off our target by.
|
||||
total_points, total_dudes = self._get_dist_grp_totals(groups)
|
||||
diff = target_points - total_points
|
||||
@ -624,7 +624,7 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]):
|
||||
return diff
|
||||
|
||||
def _delete_smallest_dist_entry(
|
||||
self, groups: List[List[Tuple[int, int]]]) -> None:
|
||||
self, groups: list[list[tuple[int, int]]]) -> None:
|
||||
smallest_value = 9999
|
||||
smallest_entry = None
|
||||
smallest_entry_group = None
|
||||
@ -639,7 +639,7 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]):
|
||||
smallest_entry_group.remove(smallest_entry)
|
||||
|
||||
def _delete_biggest_dist_entry(
|
||||
self, groups: List[List[Tuple[int, int]]]) -> None:
|
||||
self, groups: list[list[tuple[int, int]]]) -> None:
|
||||
biggest_value = 9999
|
||||
biggest_entry = None
|
||||
biggest_entry_group = None
|
||||
@ -654,7 +654,7 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]):
|
||||
biggest_entry_group.remove(biggest_entry)
|
||||
|
||||
def _delete_random_dist_entry(self,
|
||||
groups: List[List[Tuple[int, int]]]) -> None:
|
||||
groups: list[list[tuple[int, int]]]) -> None:
|
||||
entry_count = 0
|
||||
for group in groups:
|
||||
for _ in group:
|
||||
@ -1025,7 +1025,7 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]):
|
||||
'text': wttxt
|
||||
}))
|
||||
|
||||
def _bot_levels_for_wave(self) -> List[List[Type[SpazBot]]]:
|
||||
def _bot_levels_for_wave(self) -> list[list[type[SpazBot]]]:
|
||||
level = self._wavenum
|
||||
bot_types = [
|
||||
BomberBot, BrawlerBot, TriggerBot, ChargerBot, BomberBotPro,
|
||||
@ -1068,10 +1068,10 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]):
|
||||
return bot_levels
|
||||
|
||||
def _add_entries_for_distribution_group(
|
||||
self, group: List[Tuple[int, int]],
|
||||
bot_levels: List[List[Type[SpazBot]]],
|
||||
all_entries: List[Union[Spawn, Spacing, Delay, None]]) -> None:
|
||||
entries: List[Union[Spawn, Spacing, Delay, None]] = []
|
||||
self, group: list[tuple[int, int]],
|
||||
bot_levels: list[list[type[SpazBot]]],
|
||||
all_entries: list[Union[Spawn, Spacing, Delay, None]]) -> None:
|
||||
entries: list[Union[Spawn, Spacing, Delay, None]] = []
|
||||
for entry in group:
|
||||
bot_level = bot_levels[entry[0] - 1]
|
||||
bot_type = bot_level[random.randrange(len(bot_level))]
|
||||
@ -1106,7 +1106,7 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]):
|
||||
distribution = self._get_distribution(target_points, min_dudes,
|
||||
max_dudes, group_count,
|
||||
max_level)
|
||||
all_entries: List[Union[Spawn, Spacing, Delay, None]] = []
|
||||
all_entries: list[Union[Spawn, Spacing, Delay, None]] = []
|
||||
for group in distribution:
|
||||
self._add_entries_for_distribution_group(group, bot_levels,
|
||||
all_entries)
|
||||
@ -1125,7 +1125,7 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]):
|
||||
|
||||
def add_bot_at_point(self,
|
||||
point: Point,
|
||||
spaz_type: Type[SpazBot],
|
||||
spaz_type: type[SpazBot],
|
||||
spawn_time: float = 1.0) -> None:
|
||||
"""Add a new bot at a specified named point."""
|
||||
if self._game_over:
|
||||
@ -1137,7 +1137,7 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]):
|
||||
|
||||
def add_bot_at_angle(self,
|
||||
angle: float,
|
||||
spaz_type: Type[SpazBot],
|
||||
spaz_type: type[SpazBot],
|
||||
spawn_time: float = 1.0) -> None:
|
||||
"""Add a new bot at a specified angle (for circular maps)."""
|
||||
if self._game_over:
|
||||
|
||||
@ -18,8 +18,7 @@ from bastd.actor.scoreboard import Scoreboard
|
||||
from bastd.gameutils import SharedObjects
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import (Any, Type, Tuple, List, Sequence, Optional, Dict,
|
||||
Union)
|
||||
from typing import Any, Sequence, Optional, Union
|
||||
from bastd.actor.onscreentimer import OnScreenTimer
|
||||
|
||||
|
||||
@ -83,7 +82,7 @@ class RaceGame(ba.TeamGameActivity[Player, Team]):
|
||||
|
||||
@classmethod
|
||||
def get_available_settings(
|
||||
cls, sessiontype: Type[ba.Session]) -> List[ba.Setting]:
|
||||
cls, sessiontype: type[ba.Session]) -> list[ba.Setting]:
|
||||
settings = [
|
||||
ba.IntSetting('Laps', min_value=1, default=3, increment=1),
|
||||
ba.IntChoiceSetting(
|
||||
@ -129,11 +128,11 @@ class RaceGame(ba.TeamGameActivity[Player, Team]):
|
||||
return settings
|
||||
|
||||
@classmethod
|
||||
def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool:
|
||||
def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool:
|
||||
return issubclass(sessiontype, ba.MultiTeamSession)
|
||||
|
||||
@classmethod
|
||||
def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]:
|
||||
def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]:
|
||||
return ba.getmaps('race')
|
||||
|
||||
def __init__(self, settings: dict):
|
||||
@ -148,15 +147,15 @@ class RaceGame(ba.TeamGameActivity[Player, Team]):
|
||||
self._beep_1_sound = ba.getsound('raceBeep1')
|
||||
self._beep_2_sound = ba.getsound('raceBeep2')
|
||||
self.race_region_material: Optional[ba.Material] = None
|
||||
self._regions: List[RaceRegion] = []
|
||||
self._regions: list[RaceRegion] = []
|
||||
self._team_finish_pts: Optional[int] = None
|
||||
self._time_text: Optional[ba.Actor] = None
|
||||
self._timer: Optional[OnScreenTimer] = None
|
||||
self._race_mines: Optional[List[RaceMine]] = None
|
||||
self._race_mines: Optional[list[RaceMine]] = None
|
||||
self._race_mine_timer: Optional[ba.Timer] = None
|
||||
self._scoreboard_timer: Optional[ba.Timer] = None
|
||||
self._player_order_update_timer: Optional[ba.Timer] = None
|
||||
self._start_lights: Optional[List[ba.Node]] = None
|
||||
self._start_lights: Optional[list[ba.Node]] = None
|
||||
self._bomb_spawn_timer: Optional[ba.Timer] = None
|
||||
self._laps = int(settings['Laps'])
|
||||
self._entire_team_must_finish = bool(
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user