mirror of
https://github.com/RYDE-WORK/ballistica.git
synced 2026-01-26 08:53:32 +08:00
RIP iiRcade
This commit is contained in:
parent
6a5a992019
commit
a8e4def970
108
.efrocachemap
generated
108
.efrocachemap
generated
@ -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",
|
||||
|
||||
@ -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)
|
||||
|
||||
|
||||
@ -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",
|
||||
|
||||
@ -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 \
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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."""
|
||||
|
||||
@ -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']
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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.',
|
||||
|
||||
@ -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'
|
||||
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -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):
|
||||
|
||||
@ -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=[
|
||||
|
||||
@ -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',
|
||||
|
||||
@ -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()
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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()
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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)");
|
||||
|
||||
@ -142,7 +142,7 @@ void BGDynamics::SetDrawSnapshot(BGDynamicsDrawSnapshot* s) {
|
||||
}
|
||||
|
||||
void BGDynamics::TooSlow() {
|
||||
if (!EventLoop::AreThreadsPaused()) {
|
||||
if (!EventLoop::AreEventLoopsPaused()) {
|
||||
g_base->bg_dynamics_server->PushTooSlowCall();
|
||||
}
|
||||
}
|
||||
|
||||
@ -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());
|
||||
|
||||
@ -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");
|
||||
|
||||
@ -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.
|
||||
};
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
]
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user