From a8e4def970dbb7a61066effe2d965921424d7456 Mon Sep 17 00:00:00 2001 From: Eric Date: Wed, 23 Aug 2023 16:45:42 -0700 Subject: [PATCH] RIP iiRcade --- .efrocachemap | 108 ++++++------ CHANGELOG.md | 3 +- src/assets/.asset_manifest_private.json | 4 - src/assets/Makefile | 4 - src/assets/ba_data/python/babase/_app.py | 80 ++++----- src/assets/ba_data/python/babase/_hooks.py | 21 --- src/assets/ba_data/python/babase/_plugin.py | 6 +- src/assets/ba_data/python/baclassic/_input.py | 21 --- .../ba_data/python/baclassic/_subsystem.py | 2 +- src/assets/ba_data/python/baclassic/_tips.py | 26 ++- src/assets/ba_data/python/baenv.py | 2 +- src/assets/ba_data/python/bascenev1/_lobby.py | 12 +- .../bascenev1lib/actor/controlsguide.py | 80 +-------- .../ba_data/python/bascenev1lib/mainmenu.py | 22 --- .../python/bauiv1lib/gather/abouttab.py | 6 +- src/assets/ba_data/python/bauiv1lib/helpui.py | 6 +- .../ba_data/python/bauiv1lib/mainmenu.py | 3 +- .../python/bauiv1lib/settings/advanced.py | 4 +- .../ba_data/python/bauiv1lib/store/browser.py | 2 +- .../base/app_adapter/app_adapter.cc | 4 +- src/ballistica/base/base.cc | 2 +- .../base/dynamics/bg/bg_dynamics.cc | 2 +- src/ballistica/base/logic/logic.cc | 154 +++++++++--------- src/ballistica/base/python/base_python.cc | 13 +- src/ballistica/base/python/base_python.h | 14 +- src/ballistica/shared/ballistica.cc | 2 +- .../shared/foundation/event_loop.cc | 4 +- src/ballistica/shared/foundation/event_loop.h | 4 +- src/meta/babasemeta/pyembed/binding_base.py | 5 - .../babasemeta/pyembed/binding_base_app.py | 18 +- 30 files changed, 236 insertions(+), 398 deletions(-) diff --git a/.efrocachemap b/.efrocachemap index e81ffaf7..895975f0 100644 --- a/.efrocachemap +++ b/.efrocachemap @@ -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", diff --git a/CHANGELOG.md b/CHANGELOG.md index 6bdd350a..c258651b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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) diff --git a/src/assets/.asset_manifest_private.json b/src/assets/.asset_manifest_private.json index d36d1a72..4c874ca4 100644 --- a/src/assets/.asset_manifest_private.json +++ b/src/assets/.asset_manifest_private.json @@ -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", diff --git a/src/assets/Makefile b/src/assets/Makefile index b572a3f8..01856715 100644 --- a/src/assets/Makefile +++ b/src/assets/Makefile @@ -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 \ diff --git a/src/assets/ba_data/python/babase/_app.py b/src/assets/ba_data/python/babase/_app.py index a748b91c..b8d6e45a 100644 --- a/src/assets/ba_data/python/babase/_app.py +++ b/src/assets/ba_data/python/babase/_app.py @@ -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 diff --git a/src/assets/ba_data/python/babase/_hooks.py b/src/assets/ba_data/python/babase/_hooks.py index 413a2310..e310e5b3 100644 --- a/src/assets/ba_data/python/babase/_hooks.py +++ b/src/assets/ba_data/python/babase/_hooks.py @@ -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 diff --git a/src/assets/ba_data/python/babase/_plugin.py b/src/assets/ba_data/python/babase/_plugin.py index ba315698..3b3f07e1 100644 --- a/src/assets/ba_data/python/babase/_plugin.py +++ b/src/assets/ba_data/python/babase/_plugin.py @@ -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.""" diff --git a/src/assets/ba_data/python/baclassic/_input.py b/src/assets/ba_data/python/baclassic/_input.py index 35a7e6f4..e3cc0546 100644 --- a/src/assets/ba_data/python/baclassic/_input.py +++ b/src/assets/ba_data/python/baclassic/_input.py @@ -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'] diff --git a/src/assets/ba_data/python/baclassic/_subsystem.py b/src/assets/ba_data/python/baclassic/_subsystem.py index 3cd637b7..4241a6c4 100644 --- a/src/assets/ba_data/python/baclassic/_subsystem.py +++ b/src/assets/ba_data/python/baclassic/_subsystem.py @@ -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 diff --git a/src/assets/ba_data/python/baclassic/_tips.py b/src/assets/ba_data/python/baclassic/_tips.py index d356b664..f0469ed6 100644 --- a/src/assets/ba_data/python/baclassic/_tips.py +++ b/src/assets/ba_data/python/baclassic/_tips.py @@ -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.', diff --git a/src/assets/ba_data/python/baenv.py b/src/assets/ba_data/python/baenv.py index 9a01ca95..36d634f6 100644 --- a/src/assets/ba_data/python/baenv.py +++ b/src/assets/ba_data/python/baenv.py @@ -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' diff --git a/src/assets/ba_data/python/bascenev1/_lobby.py b/src/assets/ba_data/python/bascenev1/_lobby.py index d49b2373..2de1cbdf 100644 --- a/src/assets/ba_data/python/bascenev1/_lobby.py +++ b/src/assets/ba_data/python/bascenev1/_lobby.py @@ -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 diff --git a/src/assets/ba_data/python/bascenev1lib/actor/controlsguide.py b/src/assets/ba_data/python/bascenev1lib/actor/controlsguide.py index 47af94bd..a847edaf 100644 --- a/src/assets/ba_data/python/bascenev1lib/actor/controlsguide.py +++ b/src/assets/ba_data/python/bascenev1lib/actor/controlsguide.py @@ -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: diff --git a/src/assets/ba_data/python/bascenev1lib/mainmenu.py b/src/assets/ba_data/python/bascenev1lib/mainmenu.py index a14709a9..d6663c21 100644 --- a/src/assets/ba_data/python/bascenev1lib/mainmenu.py +++ b/src/assets/ba_data/python/bascenev1lib/mainmenu.py @@ -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): diff --git a/src/assets/ba_data/python/bauiv1lib/gather/abouttab.py b/src/assets/ba_data/python/bauiv1lib/gather/abouttab.py index 9402e156..a03597ce 100644 --- a/src/assets/ba_data/python/bauiv1lib/gather/abouttab.py +++ b/src/assets/ba_data/python/bauiv1lib/gather/abouttab.py @@ -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=[ diff --git a/src/assets/ba_data/python/bauiv1lib/helpui.py b/src/assets/ba_data/python/bauiv1lib/helpui.py index e9e57e69..1b430292 100644 --- a/src/assets/ba_data/python/bauiv1lib/helpui.py +++ b/src/assets/ba_data/python/bauiv1lib/helpui.py @@ -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', diff --git a/src/assets/ba_data/python/bauiv1lib/mainmenu.py b/src/assets/ba_data/python/bauiv1lib/mainmenu.py index cc262fd8..4925d0eb 100644 --- a/src/assets/ba_data/python/bauiv1lib/mainmenu.py +++ b/src/assets/ba_data/python/bauiv1lib/mainmenu.py @@ -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() diff --git a/src/assets/ba_data/python/bauiv1lib/settings/advanced.py b/src/assets/ba_data/python/bauiv1lib/settings/advanced.py index b12e9217..25dcc443 100644 --- a/src/assets/ba_data/python/bauiv1lib/settings/advanced.py +++ b/src/assets/ba_data/python/bauiv1lib/settings/advanced.py @@ -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 diff --git a/src/assets/ba_data/python/bauiv1lib/store/browser.py b/src/assets/ba_data/python/bauiv1lib/store/browser.py index 6fec878e..6d5489b2 100644 --- a/src/assets/ba_data/python/bauiv1lib/store/browser.py +++ b/src/assets/ba_data/python/bauiv1lib/store/browser.py @@ -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() diff --git a/src/ballistica/base/app_adapter/app_adapter.cc b/src/ballistica/base/app_adapter/app_adapter.cc index c616b271..e555cbff 100644 --- a/src/ballistica/base/app_adapter/app_adapter.cc +++ b/src/ballistica/base/app_adapter/app_adapter.cc @@ -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(); diff --git a/src/ballistica/base/base.cc b/src/ballistica/base/base.cc index d1b86fb0..cdb5cf2a 100644 --- a/src/ballistica/base/base.cc +++ b/src/ballistica/base/base.cc @@ -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)"); diff --git a/src/ballistica/base/dynamics/bg/bg_dynamics.cc b/src/ballistica/base/dynamics/bg/bg_dynamics.cc index e92604e6..4609b6c8 100644 --- a/src/ballistica/base/dynamics/bg/bg_dynamics.cc +++ b/src/ballistica/base/dynamics/bg/bg_dynamics.cc @@ -142,7 +142,7 @@ void BGDynamics::SetDrawSnapshot(BGDynamicsDrawSnapshot* s) { } void BGDynamics::TooSlow() { - if (!EventLoop::AreThreadsPaused()) { + if (!EventLoop::AreEventLoopsPaused()) { g_base->bg_dynamics_server->PushTooSlowCall(); } } diff --git a/src/ballistica/base/logic/logic.cc b/src/ballistica/base/logic/logic.cc index d95a8dbf..f16026ed 100644 --- a/src/ballistica/base/logic/logic.cc +++ b/src/ballistica/base/logic/logic.cc @@ -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()); diff --git a/src/ballistica/base/python/base_python.cc b/src/ballistica/base/python/base_python.cc index 005243a4..5bc76669 100644 --- a/src/ballistica/base/python/base_python.cc +++ b/src/ballistica/base/python/base_python.cc @@ -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"); diff --git a/src/ballistica/base/python/base_python.h b/src/ballistica/base/python/base_python.h index b912402f..3e841434 100644 --- a/src/ballistica/base/python/base_python.h +++ b/src/ballistica/base/python/base_python.h @@ -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. }; diff --git a/src/ballistica/shared/ballistica.cc b/src/ballistica/shared/ballistica.cc index 96727b16..ce5402a6 100644 --- a/src/ballistica/shared/ballistica.cc +++ b/src/ballistica/shared/ballistica.cc @@ -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 diff --git a/src/ballistica/shared/foundation/event_loop.cc b/src/ballistica/shared/foundation/event_loop.cc index 91dd0f7a..9b6ebc63 100644 --- a/src/ballistica/shared/foundation/event_loop.cc +++ b/src/ballistica/shared/foundation/event_loop.cc @@ -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 { return threads; } -auto EventLoop::AreThreadsPaused() -> bool { +auto EventLoop::AreEventLoopsPaused() -> bool { assert(g_core); return g_core->threads_paused; } diff --git a/src/ballistica/shared/foundation/event_loop.h b/src/ballistica/shared/foundation/event_loop.h index 68fb95be..cc7baa48 100644 --- a/src/ballistica/shared/foundation/event_loop.h +++ b/src/ballistica/shared/foundation/event_loop.h @@ -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(); diff --git a/src/meta/babasemeta/pyembed/binding_base.py b/src/meta/babasemeta/pyembed/binding_base.py index 821d7b1c..b180e93f 100644 --- a/src/meta/babasemeta/pyembed/binding_base.py +++ b/src/meta/babasemeta/pyembed/binding_base.py @@ -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 diff --git a/src/meta/babasemeta/pyembed/binding_base_app.py b/src/meta/babasemeta/pyembed/binding_base_app.py index a35b4065..d4b8757f 100644 --- a/src/meta/babasemeta/pyembed/binding_base_app.py +++ b/src/meta/babasemeta/pyembed/binding_base_app.py @@ -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 ]