RIP iiRcade

This commit is contained in:
Eric 2023-08-23 16:45:42 -07:00
parent 6a5a992019
commit a8e4def970
No known key found for this signature in database
GPG Key ID: 89C93F0F8D6D5A98
30 changed files with 236 additions and 398 deletions

108
.efrocachemap generated
View File

@ -421,10 +421,10 @@
"build/assets/ba_data/audio/zoeOw.ogg": "74befe45a8417e95b6a2233c51992a26",
"build/assets/ba_data/audio/zoePickup01.ogg": "48ab8cddfcde36a750856f3f81dd20c8",
"build/assets/ba_data/audio/zoeScream01.ogg": "2b468aedfa8741090247f04eb9e6df55",
"build/assets/ba_data/data/langdata.json": "9929c8aa90669322bc0548cdb035fb1b",
"build/assets/ba_data/data/langdata.json": "7be961f6a6b9742859638cbd5a747e18",
"build/assets/ba_data/data/languages/arabic.json": "db961f7fe0541a31880929e1c17ea957",
"build/assets/ba_data/data/languages/belarussian.json": "5e373ddcfa6e1f771b74c02298a6599a",
"build/assets/ba_data/data/languages/chinese.json": "6ca44804339926f5ad21584555aa22cf",
"build/assets/ba_data/data/languages/chinese.json": "6520f793066c95773002b4e9a920fd1d",
"build/assets/ba_data/data/languages/chinesetraditional.json": "3fe960a8f0ca529aa57b4f9cb7385abc",
"build/assets/ba_data/data/languages/croatian.json": "766532c67af5bd0144c2d63cab0516fa",
"build/assets/ba_data/data/languages/czech.json": "f3ce219840946cb8f9aa6d3e25927ab3",
@ -433,7 +433,7 @@
"build/assets/ba_data/data/languages/english.json": "d16e8899211693c20d3b00fc198f58c6",
"build/assets/ba_data/data/languages/esperanto.json": "0e397cfa5f3fb8cef5f4a64f21cda880",
"build/assets/ba_data/data/languages/filipino.json": "58f363cfd8a3ccf0c904ab753d95789b",
"build/assets/ba_data/data/languages/french.json": "5189e01389f8153497b56fbf0fa069c2",
"build/assets/ba_data/data/languages/french.json": "6057b18878ad8379e51b507fa94958d8",
"build/assets/ba_data/data/languages/german.json": "549754d2a530d825200c6126be56df5c",
"build/assets/ba_data/data/languages/gibberish.json": "236f8547ba09722b7c7f5b8333986984",
"build/assets/ba_data/data/languages/greek.json": "a65d78f912e9a89f98de004405167a6a",
@ -441,16 +441,16 @@
"build/assets/ba_data/data/languages/hungarian.json": "796a290a8c44a1e7635208c2ff5fdc6e",
"build/assets/ba_data/data/languages/indonesian.json": "583bae1ecc04375cee089a82359110b7",
"build/assets/ba_data/data/languages/italian.json": "ce99027a5d1af17689b4311eafa5ff24",
"build/assets/ba_data/data/languages/korean.json": "bdc13f8632adda5517059323d928f192",
"build/assets/ba_data/data/languages/korean.json": "ca1122a9ee551da3f75ae632012bd0e2",
"build/assets/ba_data/data/languages/malay.json": "832562ce997fc70704b9234c95fb2e38",
"build/assets/ba_data/data/languages/persian.json": "5119aec9cbb2f8d00f2afaccf5fd5410",
"build/assets/ba_data/data/languages/polish.json": "a6a74a9a289fa1b97847c9a2578c112b",
"build/assets/ba_data/data/languages/polish.json": "336eeb0028af5f3c7b9c12d3a051db2c",
"build/assets/ba_data/data/languages/portuguese.json": "99b27c598c90fd522132af3536aef0ee",
"build/assets/ba_data/data/languages/romanian.json": "aeebdd54f65939c2facc6ac50c117826",
"build/assets/ba_data/data/languages/russian.json": "aa99f9f597787fe4e09c8ab53fe2e081",
"build/assets/ba_data/data/languages/serbian.json": "d7452dd72ac0e51680cb39b5ebaa1c69",
"build/assets/ba_data/data/languages/slovak.json": "27962d53dc3f7dd4e877cd40faafeeef",
"build/assets/ba_data/data/languages/spanish.json": "f9047a2d5e9f453981ca5f4cb53006fa",
"build/assets/ba_data/data/languages/spanish.json": "90d7408d07d9445630aecbe7efaa722d",
"build/assets/ba_data/data/languages/swedish.json": "77d671f10613291ebf9c71da66f18a18",
"build/assets/ba_data/data/languages/tamil.json": "b9d4b4e107456ea6420ee0f9d9d7a03e",
"build/assets/ba_data/data/languages/thai.json": "33f63753c9af9a5b238d229a0bf23fbc",
@ -1688,10 +1688,6 @@
"build/assets/ba_data/textures/iconRunaround.ktx": "3b31ec6320207eb14e638b76e0eefbbd",
"build/assets/ba_data/textures/iconRunaround.pvr": "c876820f91ed4f342664d51a0a4b263f",
"build/assets/ba_data/textures/iconRunaround_preview.png": "7a93060cdfc52f30cbe612b535367bea",
"build/assets/ba_data/textures/iircadeLogo.dds": "74d1981703b317c2370f6efd88eba490",
"build/assets/ba_data/textures/iircadeLogo.ktx": "fff39965bb7b7f46a7a5b7e59931918b",
"build/assets/ba_data/textures/iircadeLogo.pvr": "982f2fec66b3ca854869d65c1639fe51",
"build/assets/ba_data/textures/iircadeLogo_preview.png": "fb48e2152fe601456556c99cf3848f05",
"build/assets/ba_data/textures/impactBombColor.dds": "8c6a0b50ded39afd3bbc1e1d93a2414d",
"build/assets/ba_data/textures/impactBombColor.ktx": "2ab6dd4b5dffc95b12af2779651a8491",
"build/assets/ba_data/textures/impactBombColor.pvr": "ff94593fe6462e15030045776994f862",
@ -4068,54 +4064,54 @@
"build/assets/windows/Win32/ucrtbased.dll": "2def5335207d41b21b9823f6805997f1",
"build/assets/windows/Win32/vc_redist.x86.exe": "b08a55e2e77623fe657bea24f223a3ae",
"build/assets/windows/Win32/vcruntime140d.dll": "865b2af4d1e26a1a8073c89acb06e599",
"build/prefab/full/linux_arm64_gui/debug/ballisticakit": "372da2c7dbe0b51ab8f738ac49f34d9a",
"build/prefab/full/linux_arm64_gui/release/ballisticakit": "29f810028429f10574471ad85cdc9044",
"build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "70ee4f5892e693e209d8a75420292ad0",
"build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "fc0465f8ffcaf843859ee9def7e90b22",
"build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "916f4d2fcf14d7e973694848602736c5",
"build/prefab/full/linux_x86_64_gui/release/ballisticakit": "e20ef3249191a24b428fd30b585a6ab9",
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "c1b483c4c1639af5ad247e9252f51956",
"build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "742d5e4793a557f7d322267cdf25fde3",
"build/prefab/full/mac_arm64_gui/debug/ballisticakit": "5ae7b4b94a8147a1e8dddda74171fd3b",
"build/prefab/full/mac_arm64_gui/release/ballisticakit": "c8084478951a16ba144f12d65386b9b3",
"build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "43c61a6274c670df8e80eabb6ad7f0cf",
"build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "77607a1c853c968a04340e538c196f4d",
"build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "e50958914ab0373f88f5276fd0ec53b7",
"build/prefab/full/mac_x86_64_gui/release/ballisticakit": "ee39adeed9e2f6405c83f5f81ccf54fc",
"build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "085fd185878b6dd66f6fa84599ba3b44",
"build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "ed1c7c6769b381526f5ac8d9e16a8bad",
"build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "605bbb25423a8802879417a254bfeaa3",
"build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "3206b201e39a81bed6abe9e949fa7265",
"build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "6b15d0733463244646f92add404cf5fb",
"build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "fef286304937f68f98127c3c8a876821",
"build/prefab/lib/linux_arm64_gui/debug/libballisticaplus.a": "ee6e1bdccf0f3db9c198ba5632739103",
"build/prefab/lib/linux_arm64_gui/release/libballisticaplus.a": "2f84ca77788e244cdc3edaeb00a0dc4c",
"build/prefab/lib/linux_arm64_server/debug/libballisticaplus.a": "ee6e1bdccf0f3db9c198ba5632739103",
"build/prefab/lib/linux_arm64_server/release/libballisticaplus.a": "2f84ca77788e244cdc3edaeb00a0dc4c",
"build/prefab/lib/linux_x86_64_gui/debug/libballisticaplus.a": "61c0c1aac4376682c8bd77ad7d279b3a",
"build/prefab/lib/linux_x86_64_gui/release/libballisticaplus.a": "f6a37946765a6a866c9f894c4e7bb15c",
"build/prefab/lib/linux_x86_64_server/debug/libballisticaplus.a": "61c0c1aac4376682c8bd77ad7d279b3a",
"build/prefab/lib/linux_x86_64_server/release/libballisticaplus.a": "f6a37946765a6a866c9f894c4e7bb15c",
"build/prefab/lib/mac_arm64_gui/debug/libballisticaplus.a": "d18be4e09ecb9dbe9e299dcfc7183cdf",
"build/prefab/lib/mac_arm64_gui/release/libballisticaplus.a": "fdcaa83411b0ac9e165ab5b41552e03a",
"build/prefab/lib/mac_arm64_server/debug/libballisticaplus.a": "d18be4e09ecb9dbe9e299dcfc7183cdf",
"build/prefab/lib/mac_arm64_server/release/libballisticaplus.a": "fdcaa83411b0ac9e165ab5b41552e03a",
"build/prefab/lib/mac_x86_64_gui/debug/libballisticaplus.a": "bb7515a54eaab2d148575800c1250c47",
"build/prefab/lib/mac_x86_64_gui/release/libballisticaplus.a": "e0c3972bcc77fa5fc5aed5802308b4b1",
"build/prefab/lib/mac_x86_64_server/debug/libballisticaplus.a": "89cd2bd873934be3e46f409663e9c2cb",
"build/prefab/lib/mac_x86_64_server/release/libballisticaplus.a": "e0c3972bcc77fa5fc5aed5802308b4b1",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "68224f3523b77310bbaa34ef9c37c561",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "46a78119815b6a765088494616ff88cf",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "a4507c6fac638c4840ad1fb9ab41e7e4",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "8e3cba46d14cab6c2cd31b8bf10b2f75",
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "e8deee688bf3e99e1cd009cf6a65c33b",
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "c489d1b272ad5f9c168802a68b14eb6e",
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "dfc015787d50f7c36e36b406846269b3",
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "b696873186a2d66114199a7af399a755",
"build/prefab/full/linux_arm64_gui/debug/ballisticakit": "555b3503d71eb09474d49553a488e6c1",
"build/prefab/full/linux_arm64_gui/release/ballisticakit": "bd20bb96bec6b13aa430e70af14331f6",
"build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "89b7a281b1cafff201fef5cb1c629bb5",
"build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "fa95541295ff25b97d0b9723091a4fce",
"build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "6cac4dfcd13dbbae87a151fc8294d9aa",
"build/prefab/full/linux_x86_64_gui/release/ballisticakit": "2ea050ccfcb0259731311113f2515241",
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "0dc43ad6256f00d7182a978288bfe5c8",
"build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "2abf8ddfd7fc730b3e0441f0c171cdbe",
"build/prefab/full/mac_arm64_gui/debug/ballisticakit": "498518ae4104b10f41959bd998c5584a",
"build/prefab/full/mac_arm64_gui/release/ballisticakit": "0d82a75cea7b1949c77f42b466da35bf",
"build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "fc8703153f95a985b38de006629cd533",
"build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "3f0990bd2c1889f4699ebf53b8aaef11",
"build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "c4c9eec7ff72837117bef90328ab2316",
"build/prefab/full/mac_x86_64_gui/release/ballisticakit": "d85c6e89f33f3b473d8e6a7bae60dd51",
"build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "e47d714d1c27d8419d281941e5ba3d6d",
"build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "efc3fdb8cb42557d4aceb45c6121bc92",
"build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "b3f3ab6a1b8244dbdacea67391e62a3e",
"build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "3d0b4315998100591a6b7020584491ef",
"build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "806b83a7e0351c0dec58090de090ef75",
"build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "29d2dd63013dfd333eeac281d71f1626",
"build/prefab/lib/linux_arm64_gui/debug/libballisticaplus.a": "d16860bc4d3ff0abae745e2fd5638149",
"build/prefab/lib/linux_arm64_gui/release/libballisticaplus.a": "620ed03a89ad8053656a466da6053676",
"build/prefab/lib/linux_arm64_server/debug/libballisticaplus.a": "d16860bc4d3ff0abae745e2fd5638149",
"build/prefab/lib/linux_arm64_server/release/libballisticaplus.a": "620ed03a89ad8053656a466da6053676",
"build/prefab/lib/linux_x86_64_gui/debug/libballisticaplus.a": "642d380b38d5fd4a5f50a331579e6e9c",
"build/prefab/lib/linux_x86_64_gui/release/libballisticaplus.a": "a767b4b9d20e61e0a6fb7289660959e9",
"build/prefab/lib/linux_x86_64_server/debug/libballisticaplus.a": "642d380b38d5fd4a5f50a331579e6e9c",
"build/prefab/lib/linux_x86_64_server/release/libballisticaplus.a": "a767b4b9d20e61e0a6fb7289660959e9",
"build/prefab/lib/mac_arm64_gui/debug/libballisticaplus.a": "fecd29b4aff2924b2403f36996cdca93",
"build/prefab/lib/mac_arm64_gui/release/libballisticaplus.a": "9aea5093bb559d64e28edc3c112b06b2",
"build/prefab/lib/mac_arm64_server/debug/libballisticaplus.a": "fecd29b4aff2924b2403f36996cdca93",
"build/prefab/lib/mac_arm64_server/release/libballisticaplus.a": "9aea5093bb559d64e28edc3c112b06b2",
"build/prefab/lib/mac_x86_64_gui/debug/libballisticaplus.a": "8ce1ea0d1d64dac282100599159ad2a3",
"build/prefab/lib/mac_x86_64_gui/release/libballisticaplus.a": "adf78a2ab5fb271d83e80fb72b68784f",
"build/prefab/lib/mac_x86_64_server/debug/libballisticaplus.a": "864807f34140eed4dada8832878a1173",
"build/prefab/lib/mac_x86_64_server/release/libballisticaplus.a": "adf78a2ab5fb271d83e80fb72b68784f",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "8d271eb87a692db53219288d762a5194",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "3a2e88e7788e47cc86ac87df0ea46ce3",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "d0db9d64f7ff618cb6a62f59a70a00f0",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "308f59dbc2f3193b1adb321db9a09ff1",
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "d66fe8cbfcd4d472ff3536c274f2a8d4",
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "89d7812f28754a00ad797bb994c81846",
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "ea8906f5c66ba5606bff77e8e57f3ade",
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "d117fce0b21244310ce6771a29c237be",
"src/assets/ba_data/python/babase/_mgen/__init__.py": "f885fed7f2ed98ff2ba271f9dbe3391c",
"src/assets/ba_data/python/babase/_mgen/enums.py": "f8cd3af311ac63147882590123b78318",
"src/ballistica/base/mgen/pyembed/binding_base.inc": "eeddad968b176000e31c65be6206a2bc",
"src/ballistica/base/mgen/pyembed/binding_base_app.inc": "c2f2cb8d052d76a1f4abe163cab2276e",
"src/ballistica/base/mgen/pyembed/binding_base.inc": "ad5475b871dadc69bc2cf8ccac550878",
"src/ballistica/base/mgen/pyembed/binding_base_app.inc": "ef931ec35861d4ad37850b7278588922",
"src/ballistica/classic/mgen/pyembed/binding_classic.inc": "3ceb412513963f0818ab39c58bf292e3",
"src/ballistica/core/mgen/pyembed/binding_core.inc": "9d0a3c9636138e35284923e0c8311c69",
"src/ballistica/core/mgen/pyembed/env.inc": "8be46e5818f360d10b7b0224a9e91d07",

View File

@ -1,4 +1,4 @@
### 1.7.26 (build 21244, api 8, 2023-08-23)
### 1.7.26 (build 21248, api 8, 2023-08-23)
- Android should now be better at detecting hardware keyboards (you will see
'Configure Keyboard' and 'Configure Keyboard P2' buttons under
@ -29,6 +29,7 @@
properly closing the audio system when shutting down. It also means there
should be more consistent use of the 'Quit?' confirm window. Please holler if
you see any odd behavior when trying to quit the app.
- Removed `babase.app.iircade_mode`. RIP iiRcade :(.
### 1.7.25 (build 21211, api 8, 2023-08-03)

View File

@ -1709,10 +1709,6 @@
"ba_data/textures/iconRunaround.ktx",
"ba_data/textures/iconRunaround.pvr",
"ba_data/textures/iconRunaround_preview.png",
"ba_data/textures/iircadeLogo.dds",
"ba_data/textures/iircadeLogo.ktx",
"ba_data/textures/iircadeLogo.pvr",
"ba_data/textures/iircadeLogo_preview.png",
"ba_data/textures/impactBombColor.dds",
"ba_data/textures/impactBombColor.ktx",
"ba_data/textures/impactBombColor.pvr",

View File

@ -5763,7 +5763,6 @@ TEX2D_DDS_TARGETS = \
$(BUILD_DIR)/ba_data/textures/hockeyStadiumPreview.dds \
$(BUILD_DIR)/ba_data/textures/iconOnslaught.dds \
$(BUILD_DIR)/ba_data/textures/iconRunaround.dds \
$(BUILD_DIR)/ba_data/textures/iircadeLogo.dds \
$(BUILD_DIR)/ba_data/textures/impactBombColor.dds \
$(BUILD_DIR)/ba_data/textures/impactBombColorLit.dds \
$(BUILD_DIR)/ba_data/textures/inventoryIcon.dds \
@ -6169,7 +6168,6 @@ TEX2D_PVR_TARGETS = \
$(BUILD_DIR)/ba_data/textures/hockeyStadiumPreview.pvr \
$(BUILD_DIR)/ba_data/textures/iconOnslaught.pvr \
$(BUILD_DIR)/ba_data/textures/iconRunaround.pvr \
$(BUILD_DIR)/ba_data/textures/iircadeLogo.pvr \
$(BUILD_DIR)/ba_data/textures/impactBombColor.pvr \
$(BUILD_DIR)/ba_data/textures/impactBombColorLit.pvr \
$(BUILD_DIR)/ba_data/textures/inventoryIcon.pvr \
@ -6575,7 +6573,6 @@ TEX2D_KTX_TARGETS = \
$(BUILD_DIR)/ba_data/textures/hockeyStadiumPreview.ktx \
$(BUILD_DIR)/ba_data/textures/iconOnslaught.ktx \
$(BUILD_DIR)/ba_data/textures/iconRunaround.ktx \
$(BUILD_DIR)/ba_data/textures/iircadeLogo.ktx \
$(BUILD_DIR)/ba_data/textures/impactBombColor.ktx \
$(BUILD_DIR)/ba_data/textures/impactBombColorLit.ktx \
$(BUILD_DIR)/ba_data/textures/inventoryIcon.ktx \
@ -6981,7 +6978,6 @@ TEX2D_PREVIEW_PNG_TARGETS = \
$(BUILD_DIR)/ba_data/textures/hockeyStadium_preview.png \
$(BUILD_DIR)/ba_data/textures/iconOnslaught_preview.png \
$(BUILD_DIR)/ba_data/textures/iconRunaround_preview.png \
$(BUILD_DIR)/ba_data/textures/iircadeLogo_preview.png \
$(BUILD_DIR)/ba_data/textures/impactBombColorLit_preview.png \
$(BUILD_DIR)/ba_data/textures/impactBombColor_preview.png \
$(BUILD_DIR)/ba_data/textures/inventoryIcon_preview.png \

View File

@ -61,8 +61,9 @@ class App:
class State(Enum):
"""High level state the app can be in."""
# The app launch process has not yet begun.
INITIAL = 0
# Waiting on the native layer to finish spinning up; our launch
# process here has not yet started.
BOOTSTRAPPING = 0
# Our app subsystems are being inited but should not yet
# interact.
@ -235,18 +236,18 @@ class App:
if os.environ.get('BA_RUNNING_WITH_DUMMY_MODULES') == '1':
return
self.state = self.State.INITIAL
self.state = self.State.BOOTSTRAPPING
self._subsystems: list[AppSubsystem] = []
self._app_bootstrapping_complete = False
self._native_bootstrapped = False
self._called_on_app_launching = False
self._launch_completed = False
self._initial_sign_in_completed = False
self._meta_scan_completed = False
self._called_on_app_loading = False
self._called_on_app_running = False
self._app_paused = False
self._paused = False
self._subsystem_registration_ended = False
self._pending_apply_app_config = False
self._shutdown_called = False
@ -272,8 +273,6 @@ class App:
assert isinstance(self.arcade_mode, bool)
self.headless_mode: bool = self._env['headless_mode']
assert isinstance(self.headless_mode, bool)
self.iircade_mode: bool = self._env['iircade_mode']
assert isinstance(self.iircade_mode, bool)
# Default executor which can be used for misc background
# processing. It should also be passed to any additional asyncio
@ -489,13 +488,6 @@ class App:
"""
_babase.run_app()
def on_app_bootstrapping_complete(self) -> None:
"""Called by the C++ layer once its ready to rock."""
assert _babase.in_logic_thread()
assert not self._app_bootstrapping_complete
self._app_bootstrapping_complete = True
self._update_state()
def _on_app_launching(self) -> None:
"""Called when the app enters the launching state.
@ -603,9 +595,14 @@ class App:
# this if they want in the on_app_running callback below.
self.mode_selector = self.DefaultAppModeSelector()
# Inform all app subsystems in the same order they were inited.
# Operate on a copy here because subsystems can still be added
# at this point.
# Inform all app subsystems in the same order they were
# registered. Operate on a copy here because subsystems can
# still be added at this point.
#
# NOTE: Do we need to allow registering still at this point? If
# something gets registered here, it won't have its
# on_app_running callback called. Hmm; I suppose that's the only
# way that plugins can register subsystems though.
for subsystem in self._subsystems.copy():
try:
subsystem.on_app_running()
@ -665,7 +662,7 @@ class App:
"""Decides which app modes to use to handle intents.
The behavior here is generated by the project updater based on
the set of feature-sets in the project. Spinoff projects can
the feature-sets present in the project. Spinoff projects can
also inject their own behavior by replacing the text
'__GOOD_PLACE_FOR_CUSTOM_SPINOFF_LOGIC__' with their own code
through spinoff filtering.
@ -713,7 +710,7 @@ class App:
self.state = self.State.SHUTTING_DOWN
self._on_app_shutdown()
elif self._app_paused:
elif self._paused:
# Entering paused state:
if self.state is not self.State.PAUSED:
self.state = self.State.PAUSED
@ -741,7 +738,7 @@ class App:
else:
# Only thing left is launching. We shouldn't be getting
# called before at least that is complete.
assert self._app_bootstrapping_complete
assert self._native_bootstrapped
if self.state is not self.State.LAUNCHING:
self.state = self.State.LAUNCHING
_babase.lifecyclelog('app state launching')
@ -760,26 +757,30 @@ class App:
logging.exception('Error during shutdown.')
_babase.complete_shutdown()
def pause(self) -> None:
"""Should be called by the native layer when the app pauses."""
assert not self._app_paused # Should avoid redundant calls.
self._app_paused = True
def on_native_bootstrapped(self) -> None:
"""Called by the native layer once its ready to rock."""
assert _babase.in_logic_thread()
assert not self._native_bootstrapped
self._native_bootstrapped = True
self._update_state()
def resume(self) -> None:
"""Should be called by the native layer when the app resumes."""
assert self._app_paused # Should avoid redundant calls.
self._app_paused = False
def on_native_pause(self) -> None:
"""Called by the native layer when the app pauses."""
assert _babase.in_logic_thread()
assert not self._paused # Should avoid redundant calls.
self._paused = True
self._update_state()
def shutdown(self) -> None:
"""Called by the native layer when the app wants to quit.
def on_native_resume(self) -> None:
"""Called by the native layer when the app resumes."""
assert _babase.in_logic_thread()
assert self._paused # Should avoid redundant calls.
self._paused = False
self._update_state()
The app should use this notice to start cleaning up and shutting
down. Once shutdown is complete, it should call
_babase.complete_shutdown() which will trigger an actual exit
from the app.
"""
def on_native_shutdown(self) -> None:
"""Called by the native layer when the app starts shutting down."""
assert _babase.in_logic_thread()
self._shutdown_called = True
self._update_state()
@ -855,13 +856,12 @@ class App:
pass
def on_initial_sign_in_completed(self) -> None:
"""Callback to be run after initial sign-in (or lack thereof).
"""Called when initial sign-in (or lack thereof) completes.
This normally gets called by the plus subsystem.
The initial-sign-in process may include tasks such as syncing
This normally gets called by the plus subsystem. The
initial-sign-in process may include tasks such as syncing
account workspaces or other data so it may take a substantial
amount of time. This should also run after a short amount of
time if no login is occurring.
amount of time.
"""
assert _babase.in_logic_thread()
assert not self._initial_sign_in_completed

View File

@ -23,11 +23,6 @@ if TYPE_CHECKING:
pass
def on_app_bootstrapping_complete() -> None:
"""Called by C++ layer when bootstrapping finishes."""
_babase.app.on_app_bootstrapping_complete()
def reset_to_main_menu() -> None:
# Some high-level event wants us to return to the main menu.
# an example of this is re-opening the game after we 'soft' quit it
@ -172,14 +167,6 @@ def orientation_reset_message() -> None:
)
def on_app_pause() -> None:
_babase.app.pause()
def on_app_resume() -> None:
_babase.app.resume()
def show_post_purchase_message() -> None:
assert _babase.app.classic is not None
_babase.app.classic.accounts.show_post_purchase_message()
@ -272,10 +259,6 @@ def toggle_fullscreen() -> None:
cfg.apply_and_commit()
def read_config() -> None:
_babase.app.read_config()
def ui_remote_press() -> None:
"""Handle a press by a remote device that is only usable for nav."""
from babase._language import Lstr
@ -300,10 +283,6 @@ def do_quit() -> None:
_babase.quit()
def shutdown() -> None:
_babase.app.shutdown()
def hash_strings(inputs: list[str]) -> str:
"""Hash provided strings into a short output string."""
import hashlib

View File

@ -317,13 +317,13 @@ class Plugin:
"""Called when the app reaches the running state."""
def on_app_pause(self) -> None:
"""Called after pausing game activity."""
"""Called when the app is switching to a paused state."""
def on_app_resume(self) -> None:
"""Called after the game continues."""
"""Called when the app is resuming from a paused state."""
def on_app_shutdown(self) -> None:
"""Called before closing the application."""
"""Called when the app is beginning the shutdown process."""
def has_settings_ui(self) -> bool:
"""Called to ask if we have settings UI we can show."""

View File

@ -31,27 +31,6 @@ def get_input_device_mapped_value(
subplatform = app.classic.subplatform
appconfig = babase.app.config
# iiRcade: hard-code for a/b/c/x for now...
if babase.app.iircade_mode:
return {
'triggerRun2': 19,
'unassignedButtonsRun': False,
'buttonPickUp': 100,
'buttonBomb': 98,
'buttonJump': 97,
'buttonStart': 83,
'buttonStart2': 109,
'buttonPunch': 99,
'buttonRun2': 102,
'buttonRun1': 101,
'triggerRun1': 18,
'buttonLeft': 22,
'buttonRight': 23,
'buttonUp': 20,
'buttonDown': 21,
'buttonVRReorient': 110,
}.get(name, -1)
# If there's an entry in our config for this controller, use it.
if 'Controllers' in appconfig:
ccfgs = appconfig['Controllers']

View File

@ -73,7 +73,7 @@ class ClassicSubsystem(babase.AppSubsystem):
self.value_test_defaults: dict = {}
self.special_offer: dict | None = None
self.ping_thread_count = 0
self.allow_ticket_purchases: bool = not babase.app.iircade_mode
self.allow_ticket_purchases: bool = True
# Main Menu.
self.main_menu_did_initial_transition = False

View File

@ -106,16 +106,14 @@ def get_all_tips() -> list[str]:
),
]
app = babase.app
if not app.iircade_mode:
tips += [
'If your framerate is choppy, try turning down resolution\nor '
'visuals in the game\'s graphics settings.'
]
tips += [
'If your framerate is choppy, try turning down resolution\nor '
'visuals in the game\'s graphics settings.'
]
if (
app.classic is not None
and app.classic.platform in ('android', 'ios')
and not app.on_tv
and not app.iircade_mode
):
tips += [
(
@ -124,11 +122,7 @@ def get_all_tips() -> list[str]:
'in Settings->Graphics'
),
]
if (
app.classic is not None
and app.classic.platform in ['mac', 'android']
and not app.iircade_mode
):
if app.classic is not None and app.classic.platform in ['mac', 'android']:
tips += [
'Tired of the soundtrack? Replace it with your own!'
'\nSee Settings->Audio->Soundtrack'
@ -136,11 +130,11 @@ def get_all_tips() -> list[str]:
# Hot-plugging is currently only on some platforms.
# FIXME: Should add a platform entry for this so don't forget to update it.
if (
app.classic is not None
and app.classic.platform in ['mac', 'android', 'windows']
and not app.iircade_mode
):
if app.classic is not None and app.classic.platform in [
'mac',
'android',
'windows',
]:
tips += [
'Players can join and leave in the middle of most games,\n'
'and you can also plug and unplug controllers on the fly.',

View File

@ -52,7 +52,7 @@ if TYPE_CHECKING:
# Build number and version of the ballistica binary we expect to be
# using.
TARGET_BALLISTICA_BUILD = 21244
TARGET_BALLISTICA_BUILD = 21248
TARGET_BALLISTICA_VERSION = '1.7.26'

View File

@ -33,15 +33,11 @@ class JoinInfo:
from bascenev1._nodeactor import NodeActor
self._state = 0
self._press_to_punch: str | bascenev1.Lstr = (
'C'
if babase.app.iircade_mode
else babase.charstr(babase.SpecialChar.LEFT_BUTTON)
self._press_to_punch: str | bascenev1.Lstr = babase.charstr(
babase.SpecialChar.LEFT_BUTTON
)
self._press_to_bomb: str | bascenev1.Lstr = (
'B'
if babase.app.iircade_mode
else babase.charstr(babase.SpecialChar.RIGHT_BUTTON)
self._press_to_bomb: str | bascenev1.Lstr = babase.charstr(
babase.SpecialChar.RIGHT_BUTTON
)
self._joinmsg = babase.Lstr(resource='pressAnyButtonToJoinText')
can_switch_teams = len(lobby.sessionteams) > 1

View File

@ -58,45 +58,11 @@ class ControlsGuide(bs.Actor):
self._update_timer: bs.Timer | None = None
self._title_text: bs.Node | None
clr: Sequence[float]
extra_pos_1: tuple[float, float] | None
extra_pos_2: tuple[float, float] | None
if bs.app.iircade_mode:
xtweak = 0.2
ytweak = 0.2
jump_pos = (
position[0] + offs * (-1.2 + xtweak),
position[1] + offs * (0.1 + ytweak),
)
bomb_pos = (
position[0] + offs * (0.0 + xtweak),
position[1] + offs * (0.5 + ytweak),
)
punch_pos = (
position[0] + offs * (1.2 + xtweak),
position[1] + offs * (0.5 + ytweak),
)
pickup_pos = (
position[0] + offs * (-1.4 + xtweak),
position[1] + offs * (-1.2 + ytweak),
)
extra_pos_1 = (
position[0] + offs * (-0.2 + xtweak),
position[1] + offs * (-0.8 + ytweak),
)
extra_pos_2 = (
position[0] + offs * (1.0 + xtweak),
position[1] + offs * (-0.8 + ytweak),
)
self._force_hide_button_names = True
else:
punch_pos = (position[0] - offs * 1.1, position[1])
jump_pos = (position[0], position[1] - offs)
bomb_pos = (position[0] + offs * 1.1, position[1])
pickup_pos = (position[0], position[1] + offs)
extra_pos_1 = None
extra_pos_2 = None
self._force_hide_button_names = False
punch_pos = (position[0] - offs * 1.1, position[1])
jump_pos = (position[0], position[1] - offs)
bomb_pos = (position[0] + offs * 1.1, position[1])
pickup_pos = (position[0], position[1] + offs)
self._force_hide_button_names = False
if show_title:
self._title_text_pos_top = (
@ -271,36 +237,8 @@ class ControlsGuide(bs.Actor):
},
)
if extra_pos_1 is not None:
self._extra_image_1: bs.Node | None = bs.newnode(
'image',
attrs={
'texture': bs.gettexture('nub'),
'absolute_scale': True,
'host_only': True,
'vr_depth': 10,
'position': extra_pos_1,
'scale': (image_size, image_size),
'color': (0.5, 0.5, 0.5),
},
)
else:
self._extra_image_1 = None
if extra_pos_2 is not None:
self._extra_image_2: bs.Node | None = bs.newnode(
'image',
attrs={
'texture': bs.gettexture('nub'),
'absolute_scale': True,
'host_only': True,
'vr_depth': 10,
'position': extra_pos_2,
'scale': (image_size, image_size),
'color': (0.5, 0.5, 0.5),
},
)
else:
self._extra_image_2 = None
self._extra_image_1 = None
self._extra_image_2 = None
self._nodes = [
self._bomb_image,
@ -317,10 +255,6 @@ class ControlsGuide(bs.Actor):
if show_title:
assert self._title_text
self._nodes.append(self._title_text)
if self._extra_image_1 is not None:
self._nodes.append(self._extra_image_1)
if self._extra_image_2 is not None:
self._nodes.append(self._extra_image_2)
# Start everything invisible.
for node in self._nodes:

View File

@ -168,28 +168,6 @@ class MainMenuActivity(bs.Activity[bs.Player, bs.Team]):
assert self.version.node
bs.animate(self.version.node, 'opacity', {2.3: 0, 3.0: 1.0})
# Show the iircade logo on our iircade build.
if app.iircade_mode:
img = bs.NodeActor(
bs.newnode(
'image',
attrs={
'texture': bs.gettexture('iircadeLogo'),
'attach': 'center',
'scale': (250, 250),
'position': (0, 0),
'tilt_translate': 0.21,
'absolute_scale': True,
},
)
).autoretain()
imgdelay = (
0.0 if app.classic.main_menu_did_initial_transition else 1.0
)
bs.animate(
img.node, 'opacity', {imgdelay + 1.5: 0.0, imgdelay + 2.5: 1.0}
)
# Throw in test build info.
self.beta_info = self.beta_info_2 = None
if app.test_build and not (app.demo_mode or app.arcade_mode):

View File

@ -32,11 +32,7 @@ class AboutGatherTab(GatherTab):
plus = bui.app.plus
assert plus is not None
party_button_label = (
'X'
if bui.app.iircade_mode
else bui.charstr(bui.SpecialChar.TOP_BUTTON)
)
party_button_label = bui.charstr(bui.SpecialChar.TOP_BUTTON)
message = bui.Lstr(
resource='gatherWindow.aboutDescriptionText',
subs=[

View File

@ -373,11 +373,7 @@ class HelpWindow(bui.Window):
txt_scale = 0.7
if not app.vr_mode:
infotxt = (
'.controllersInfoTextRemoteOnly'
if app.iircade_mode
else '.controllersInfoText'
)
infotxt = '.controllersInfoText'
txt = bui.Lstr(
resource=self._r + infotxt,
fallback_resource=self._r + '.controllersInfoText',

View File

@ -52,7 +52,6 @@ class MainMenuWindow(bui.Window):
# Grab this stuff in case it changes.
self._is_demo = bui.app.demo_mode
self._is_arcade = bui.app.arcade_mode
self._is_iircade = bui.app.iircade_mode
self._tdelay = 0.0
self._t_delay_inc = 0.02
@ -221,7 +220,7 @@ class MainMenuWindow(bui.Window):
self._have_settings_button = (
not self._in_game or not app.toolbar_test
) and not (self._is_demo or self._is_arcade or self._is_iircade)
) and not (self._is_demo or self._is_arcade)
self._input_device = input_device = bs.get_ui_input_device()

View File

@ -88,9 +88,7 @@ class AdvancedSettingsWindow(bui.Window):
# In vr-mode, the internal keyboard is currently the *only* option,
# so no need to show this.
self._show_always_use_internal_keyboard = (
not app.vr_mode and not app.iircade_mode
)
self._show_always_use_internal_keyboard = not app.vr_mode
self._scroll_width = self._width - (100 + 2 * x_inset)
self._scroll_height = self._height - 115.0

View File

@ -1411,6 +1411,6 @@ def _check_merch_availability_in_bg_thread() -> None:
# do this during docs generation/etc.)
if (
os.environ.get('BA_RUNNING_WITH_DUMMY_MODULES') != '1'
and bui.app.state is not bui.app.State.INITIAL
and bui.app.state is not bui.app.State.BOOTSTRAPPING
):
Thread(target=_check_merch_availability_in_bg_thread, daemon=True).start()

View File

@ -134,7 +134,7 @@ void AppAdapter::OnAppPause_() {
// their event-loop is actually paused.
// Pause all event loops.
EventLoop::SetThreadsPaused(true);
EventLoop::SetEventLoopsPaused(true);
if (g_base->network_reader) {
g_base->network_reader->OnAppPause();
@ -148,7 +148,7 @@ void AppAdapter::OnAppResume_() {
last_app_resume_time_ = g_core->GetAppTimeMillisecs();
// Spin all event-loops back up.
EventLoop::SetThreadsPaused(false);
EventLoop::SetEventLoopsPaused(false);
// Run resumes that expect to happen in the main thread.
g_core->platform->OnAppResume();

View File

@ -218,7 +218,7 @@ void BaseFeatureSet::StartApp() {
// rolling.
{
Python::ScopedInterpreterLock gil;
python->objs().Get(BasePython::ObjID::kPushApplyAppConfigCall).Call();
python->objs().Get(BasePython::ObjID::kAppPushApplyAppConfigCall).Call();
}
g_core->LifecycleLog("start-app end (main thread)");

View File

@ -142,7 +142,7 @@ void BGDynamics::SetDrawSnapshot(BGDynamicsDrawSnapshot* s) {
}
void BGDynamics::TooSlow() {
if (!EventLoop::AreThreadsPaused()) {
if (!EventLoop::AreEventLoopsPaused()) {
g_base->bg_dynamics_server->PushTooSlowCall();
}
}

View File

@ -72,6 +72,83 @@ void Logic::OnAppStart() {
g_core->LifecycleLog("on-app-start end (logic thread)");
}
void Logic::OnInitialScreenCreated() {
assert(g_base->InLogicThread());
// Ok; graphics-server is telling us we've got a screen (or no screen in
// the case of headless-mode). We use this as a cue to kick off our
// business logic.
// Let the Python layer know the native layer is now fully functional.
// This will probably result in the Python layer flipping to the LAUNCHING
// state.
CompleteAppBootstrapping();
if (!g_core->HeadlessMode()) {
// In gui mode, push an initial frame to the graphics server. From this
// point it will be self-sustaining, sending us a frame request each
// time it receives a new frame from us.
g_base->graphics->BuildAndPushFrameDef();
} else {
// Normally we step display-time as part of our frame-drawing process.
// If we're headless, we're not drawing any frames, but we still want to
// do minimal processing on any display-time timers. Let's run at a
// low-ish rate (10hz) to keep things efficient. Anyone dealing in
// display-time should be able to handle a wide variety of rates anyway.
// NOTE: This length is currently milliseconds.
headless_display_time_step_timer_ = event_loop()->NewTimer(
kAppModeMinHeadlessDisplayStep / 1000, true,
NewLambdaRunnable([this] { StepDisplayTime(); }));
}
}
void Logic::CompleteAppBootstrapping() {
assert(g_base->InLogicThread());
assert(g_base->CurrentContext().IsEmpty());
assert(!app_bootstrapping_complete_);
app_bootstrapping_complete_ = true;
g_core->LifecycleLog("app bootstrapping complete");
// Let the assets system know it can start loading stuff now that
// we have a screen and thus know texture formats/etc.
// TODO(ericf): It might be nice to kick this off earlier if our logic is
// robust enough to create some sort of 'null' textures/meshes before
// the renderer is ready and then seamlessly create renderer-specific
// ones once the renderer is up. We could likely at least get a lot
// of preloads done in the meantime. Though this would require preloads
// to be renderer-agnostic; not sure if that will always be the case.
g_base->assets->StartLoading();
// Let base know it can create the console or other asset-dependent things.
g_base->OnAssetsAvailable();
// Set up our timers.
process_pending_work_timer_ = event_loop()->NewTimer(
0, true, NewLambdaRunnable([this] { ProcessPendingWork(); }));
asset_prune_timer_ = event_loop()->NewTimer(
2345, true, NewLambdaRunnable([] { g_base->assets->Prune(); }));
// Let our initial dummy app-mode know it has become active.
g_base->app_mode()->OnActivate();
// Reset our various subsystems to a default state.
g_base->ui->Reset();
g_base->input->Reset();
g_base->graphics->Reset();
g_base->python->Reset();
g_base->audio->Reset();
// Let Python know we're done bootstrapping so it can flip the app
// into the 'launching' state.
g_base->python->objs()
.Get(BasePython::ObjID::kAppOnNativeBootstrappedCall)
.Call();
UpdatePendingWorkTimer();
}
void Logic::OnAppRunning() {
assert(g_base->InLogicThread());
assert(g_base->CurrentContext().IsEmpty());
@ -207,83 +284,6 @@ void Logic::DoApplyAppConfig() {
applied_app_config_ = true;
}
void Logic::OnInitialScreenCreated() {
assert(g_base->InLogicThread());
// Ok; graphics-server is telling us we've got a screen (or no screen in
// the case of headless-mode). We use this as a cue to kick off our
// business logic.
// Let the Python layer know the native layer is now fully functional.
// This will probably result in the Python layer flipping to the LAUNCHING
// state.
CompleteAppBootstrapping();
if (!g_core->HeadlessMode()) {
// In gui mode, push an initial frame to the graphics server. From this
// point it will be self-sustaining, sending us a frame request each
// time it receives a new frame from us.
g_base->graphics->BuildAndPushFrameDef();
} else {
// Normally we step display-time as part of our frame-drawing process.
// If we're headless, we're not drawing any frames, but we still want to
// do minimal processing on any display-time timers. Let's run at a
// low-ish rate (10hz) to keep things efficient. Anyone dealing in
// display-time should be able to handle a wide variety of rates anyway.
// NOTE: This length is currently milliseconds.
headless_display_time_step_timer_ = event_loop()->NewTimer(
kAppModeMinHeadlessDisplayStep / 1000, true,
NewLambdaRunnable([this] { StepDisplayTime(); }));
}
}
void Logic::CompleteAppBootstrapping() {
assert(g_base->InLogicThread());
assert(g_base->CurrentContext().IsEmpty());
assert(!app_bootstrapping_complete_);
app_bootstrapping_complete_ = true;
g_core->LifecycleLog("app bootstrapping complete");
// Let the assets system know it can start loading stuff now that
// we have a screen and thus know texture formats/etc.
// TODO(ericf): It might be nice to kick this off earlier if our logic is
// robust enough to create some sort of 'null' textures/meshes before
// the renderer is ready and then seamlessly create renderer-specific
// ones once the renderer is up. We could likely at least get a lot
// of preloads done in the meantime. Though this would require preloads
// to be renderer-agnostic; not sure if that will always be the case.
g_base->assets->StartLoading();
// Let base know it can create the console or other asset-dependent things.
g_base->OnAssetsAvailable();
// Set up our timers.
process_pending_work_timer_ = event_loop()->NewTimer(
0, true, NewLambdaRunnable([this] { ProcessPendingWork(); }));
asset_prune_timer_ = event_loop()->NewTimer(
2345, true, NewLambdaRunnable([] { g_base->assets->Prune(); }));
// Let our initial dummy app-mode know it has become active.
g_base->app_mode()->OnActivate();
// Reset our various subsystems to a default state.
g_base->ui->Reset();
g_base->input->Reset();
g_base->graphics->Reset();
g_base->python->Reset();
g_base->audio->Reset();
// Let Python know we're done bootstrapping so it can flip the app
// into the 'launching' state.
g_base->python->objs()
.Get(BasePython::ObjID::kOnAppBootstrappingCompleteCall)
.Call();
UpdatePendingWorkTimer();
}
void Logic::OnScreenSizeChange(float virtual_width, float virtual_height,
float pixel_width, float pixel_height) {
assert(g_base->InLogicThread());

View File

@ -119,7 +119,7 @@ void BasePython::SoftImportUIV1() {
void BasePython::ReadConfig() {
auto gil{Python::ScopedInterpreterLock()};
// Read the config file and store the config dict for easy access.
objs().Get(ObjID::kReadConfigCall).Call();
objs().Get(ObjID::kAppReadConfigCall).Call();
objs_.Store(ObjID::kConfig, *objs().Get(ObjID::kApp).GetAttr("config"));
assert(PyDict_Check(*objs().Get(ObjID::kConfig)));
}
@ -146,17 +146,17 @@ void BasePython::OnAppStart() { assert(g_base->InLogicThread()); }
void BasePython::OnAppPause() {
assert(g_base->InLogicThread());
objs().Get(BasePython::ObjID::kOnAppPauseCall).Call();
objs().Get(BasePython::ObjID::kAppOnNativePauseCall).Call();
}
void BasePython::OnAppResume() {
assert(g_base->InLogicThread());
objs().Get(BasePython::ObjID::kOnAppResumeCall).Call();
objs().Get(BasePython::ObjID::kAppOnNativeResumeCall).Call();
}
void BasePython::OnAppShutdown() {
assert(g_base->InLogicThread());
objs().Get(BasePython::ObjID::kShutdownCall).Call();
objs().Get(BasePython::ObjID::kAppOnNativeShutdownCall).Call();
}
void BasePython::DoApplyAppConfig() { assert(g_base->InLogicThread()); }
@ -549,11 +549,12 @@ auto BasePython::GetTranslation(const char* category, const char* s)
void BasePython::RunDeepLink(const std::string& url) {
BA_PRECONDITION(g_base->InLogicThread());
if (g_base->python->objs().Exists(base::BasePython::ObjID::kDeepLinkCall)) {
if (g_base->python->objs().Exists(
base::BasePython::ObjID::kAppHandleDeepLinkCall)) {
ScopedSetContext ssc(nullptr);
PythonRef args(Py_BuildValue("(s)", url.c_str()), PythonRef::kSteal);
g_base->python->objs()
.Get(base::BasePython::ObjID::kDeepLinkCall)
.Get(base::BasePython::ObjID::kAppHandleDeepLinkCall)
.Call(args);
} else {
Log(LogLevel::kError, "Error on deep-link call");

View File

@ -28,14 +28,14 @@ class BasePython {
enum class ObjID {
kApp,
kEnv,
kDeepLinkCall,
kAppHandleDeepLinkCall,
kGetResourceCall,
kTranslateCall,
kLStrClass,
kCallClass,
kGarbageCollectSessionEndCall,
kConfig,
kOnAppBootstrappingCompleteCall,
kAppOnNativeBootstrappedCall,
kResetToMainMenuCall,
kSetConfigFullscreenOnCall,
kSetConfigFullscreenOffCall,
@ -66,13 +66,13 @@ class BasePython {
kEmptyCall,
kPrintTraceCall,
kToggleFullscreenCall,
kReadConfigCall,
kAppReadConfigCall,
kUIRemotePressCall,
kRemoveInGameAdsMessageCall,
kOnAppPauseCall,
kOnAppResumeCall,
kAppOnNativePauseCall,
kAppOnNativeResumeCall,
kQuitCall,
kShutdownCall,
kAppOnNativeShutdownCall,
kShowPostPurchaseMessageCall,
kContextError,
kNotFoundError,
@ -100,7 +100,7 @@ class BasePython {
kOpenURLWithWebBrowserModuleCall,
kOnNativeModuleImportCall,
kOnMainThreadStartAppCall,
kPushApplyAppConfigCall,
kAppPushApplyAppConfigCall,
kLast // Sentinel; must be at end.
};

View File

@ -39,7 +39,7 @@ auto main(int argc, char** argv) -> int {
namespace ballistica {
// These are set automatically via script; don't modify them here.
const int kEngineBuildNumber = 21244;
const int kEngineBuildNumber = 21248;
const char* kEngineVersion = "1.7.26";
#if BA_MONOLITHIC_BUILD

View File

@ -585,7 +585,7 @@ void EventLoop::PushThreadMessage_(const ThreadMessage_& t) {
}
}
void EventLoop::SetThreadsPaused(bool paused) {
void EventLoop::SetEventLoopsPaused(bool paused) {
assert(g_core);
assert(std::this_thread::get_id() == g_core->main_thread_id);
g_core->threads_paused = paused;
@ -610,7 +610,7 @@ auto EventLoop::GetStillPausingThreads() -> std::vector<EventLoop*> {
return threads;
}
auto EventLoop::AreThreadsPaused() -> bool {
auto EventLoop::AreEventLoopsPaused() -> bool {
assert(g_core);
return g_core->threads_paused;
}

View File

@ -29,8 +29,8 @@ class EventLoop {
static auto CurrentThreadName() -> std::string;
static void SetThreadsPaused(bool enable);
static auto AreThreadsPaused() -> bool;
static void SetEventLoopsPaused(bool enable);
static auto AreEventLoopsPaused() -> bool;
auto ThreadIsCurrent() const -> bool {
return std::this_thread::get_id() == thread_id();

View File

@ -48,15 +48,10 @@ values = [
_hooks.empty_call, # kEmptyCall
_hooks.print_trace, # kPrintTraceCall
_hooks.toggle_fullscreen, # kToggleFullscreenCall
_hooks.read_config, # kReadConfigCall
_hooks.ui_remote_press, # kUIRemotePressCall
_hooks.remove_in_game_ads_message, # kRemoveInGameAdsMessageCall
_hooks.on_app_pause, # kOnAppPauseCall
_hooks.on_app_resume, # kOnAppResumeCall
_hooks.do_quit, # kQuitCall
_hooks.shutdown, # kShutdownCall
_hooks.show_post_purchase_message, # kShowPostPurchaseMessageCall
_hooks.on_app_bootstrapping_complete, # kOnAppBootstrappingCompleteCall
_language.Lstr, # kLStrClass
_general.Call, # kCallClass
_apputils.garbage_collect_session_end, # kGarbageCollectSessionEndCall

View File

@ -3,14 +3,18 @@
# Python objects should be added here along with their associated c++ enum.
# pylint: disable=useless-suppression, missing-module-docstring, line-too-long
from __future__ import annotations
import babase
from babase import app
# The C++ layer looks for this variable:
values = [
babase.app, # kApp
babase.app.handle_deep_link, # kDeepLinkCall
babase.app.lang.get_resource, # kGetResourceCall
babase.app.lang.translate, # kTranslateCall
babase.app.push_apply_app_config, # kPushApplyAppConfigCall
app, # kApp
app.handle_deep_link, # kAppHandleDeepLinkCall
app.lang.get_resource, # kGetResourceCall
app.lang.translate, # kTranslateCall
app.push_apply_app_config, # kAppPushApplyAppConfigCall
app.on_native_bootstrapped, # kAppOnNativeBootstrappedCall
app.on_native_pause, # kAppOnNativePauseCall
app.on_native_resume, # kAppOnNativeResumeCall
app.on_native_shutdown, # kAppOnNativeShutdownCall
app.read_config, # kAppReadConfigCall
]