mirror of
https://github.com/RYDE-WORK/ballistica.git
synced 2026-01-25 16:33:20 +08:00
more untangling
This commit is contained in:
parent
37deb4c3bd
commit
84dde1bcf0
@ -4072,50 +4072,50 @@
|
||||
"build/assets/workspace/ninjafightplug.py": "https://files.ballistica.net/cache/ba1/c5/09/4f10b8a21ba87aa5509cff7a164b",
|
||||
"build/assets/workspace/onslaughtplug.py": "https://files.ballistica.net/cache/ba1/ff/0a/a354984f9c074dab0676ac7e4877",
|
||||
"build/assets/workspace/runaroundplug.py": "https://files.ballistica.net/cache/ba1/2a/1c/9ee5db6d1bceca7fa6638fb8abde",
|
||||
"build/prefab/full/linux_arm64_gui/debug/ballisticakit": "https://files.ballistica.net/cache/ba1/26/28/76adeaf883a0ce33dffdf2940d5b",
|
||||
"build/prefab/full/linux_arm64_gui/release/ballisticakit": "https://files.ballistica.net/cache/ba1/62/f6/bf633c2dc38d61b73b8109cc002b",
|
||||
"build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/d1/5b/7ce29036b8eae3226fa440761b11",
|
||||
"build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/8e/f4/5fd5e80bec1d9bda19f43932400a",
|
||||
"build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "https://files.ballistica.net/cache/ba1/b7/62/e50ab9f38db10874d32715c11e29",
|
||||
"build/prefab/full/linux_x86_64_gui/release/ballisticakit": "https://files.ballistica.net/cache/ba1/90/86/fc717a6aab51a451313da677a630",
|
||||
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/85/e3/72d4977a7238491402788eecc44d",
|
||||
"build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/46/be/0ca1d581bee963f3f2adc30bbdbc",
|
||||
"build/prefab/full/mac_arm64_gui/debug/ballisticakit": "https://files.ballistica.net/cache/ba1/5b/a4/68472d57ebe52dd72db1a78a302d",
|
||||
"build/prefab/full/mac_arm64_gui/release/ballisticakit": "https://files.ballistica.net/cache/ba1/1c/49/78f788f23a025707360b23d7daf3",
|
||||
"build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/7b/f3/3e0101776643cff6bdbd3bbb089f",
|
||||
"build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/81/6a/6784af212260aef7375936705d08",
|
||||
"build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "https://files.ballistica.net/cache/ba1/3b/5a/fd4873250526f81d98acf374face",
|
||||
"build/prefab/full/mac_x86_64_gui/release/ballisticakit": "https://files.ballistica.net/cache/ba1/4f/e5/3554a91085d6c99cf4225991a49b",
|
||||
"build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/6c/7a/0a43c1a584fae923c7f9b006aa00",
|
||||
"build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/d8/6e/b6c78fd05b4082a56101251d80a7",
|
||||
"build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "https://files.ballistica.net/cache/ba1/a0/10/73c560964fcc4834ab4d383166d7",
|
||||
"build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "https://files.ballistica.net/cache/ba1/de/46/fb9e06c434c2a4a2f9ef5b559d1b",
|
||||
"build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "https://files.ballistica.net/cache/ba1/f9/c2/634df05be8abea32da3e8ca3095e",
|
||||
"build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "https://files.ballistica.net/cache/ba1/76/16/8c323c36f0e5d37c667b78f6e164",
|
||||
"build/prefab/lib/linux_arm64_gui/debug/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/5f/35/b7d5e6c2446f339bdd61527ea735",
|
||||
"build/prefab/lib/linux_arm64_gui/release/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/f3/f8/52577356f2ff5229ed4e5a6764cf",
|
||||
"build/prefab/lib/linux_arm64_server/debug/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/f1/f5/ee7230a33652160f1a69d37d0b1d",
|
||||
"build/prefab/lib/linux_arm64_server/release/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/3f/91/9d57b5688d3fdedc41ad0a91cfcc",
|
||||
"build/prefab/lib/linux_x86_64_gui/debug/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/3b/a8/25df998ef2e458e4b3df4f9e4bc3",
|
||||
"build/prefab/lib/linux_x86_64_gui/release/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/40/35/f0ce16f78cb98281471dc4fb1048",
|
||||
"build/prefab/lib/linux_x86_64_server/debug/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/d3/f6/9b895fa7a559163f3ba301a5b082",
|
||||
"build/prefab/lib/linux_x86_64_server/release/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/b6/e7/1d76994d633f5e189754b477da1d",
|
||||
"build/prefab/lib/mac_arm64_gui/debug/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/fb/7b/7a6549bb17264a5040d4db99a4cc",
|
||||
"build/prefab/lib/mac_arm64_gui/release/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/eb/ab/4311e83907061aad56967531f41b",
|
||||
"build/prefab/lib/mac_arm64_server/debug/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/85/0f/8d444fa4c7774c1c93d7b863ff59",
|
||||
"build/prefab/lib/mac_arm64_server/release/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/e6/c2/f5c2b4284534e68f6e41a4b4b2ca",
|
||||
"build/prefab/lib/mac_x86_64_gui/debug/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/0d/d2/f99384c5c22ae99e0a70b7d2534a",
|
||||
"build/prefab/lib/mac_x86_64_gui/release/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/30/4a/aa281e0eb46722098ec29d7da4f8",
|
||||
"build/prefab/lib/mac_x86_64_server/debug/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/0b/e4/a9d278c1bc9a5d731f865ac91a0b",
|
||||
"build/prefab/lib/mac_x86_64_server/release/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/92/f7/8898478ab4ef0a342c727dd64195",
|
||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "https://files.ballistica.net/cache/ba1/54/37/fe9ce1e5ac553d1efbfe87f0b3db",
|
||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "https://files.ballistica.net/cache/ba1/14/9b/9339463649a9c9c4f5a17c8612c9",
|
||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "https://files.ballistica.net/cache/ba1/33/6a/1b57410d2fb4b0537ecec3648850",
|
||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "https://files.ballistica.net/cache/ba1/6d/f9/b35d9ebe3503c3f24cf6774d5458",
|
||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "https://files.ballistica.net/cache/ba1/de/ff/32c6e83e91a48cd9500d710ab1af",
|
||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "https://files.ballistica.net/cache/ba1/1f/7e/b8cf9ad9f8cd86a292e1609fdd93",
|
||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "https://files.ballistica.net/cache/ba1/19/7f/fa2c37a849648ada4bbaa4c826d4",
|
||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "https://files.ballistica.net/cache/ba1/65/32/b571911edfbbffa5263a29dbece2",
|
||||
"build/prefab/full/linux_arm64_gui/debug/ballisticakit": "https://files.ballistica.net/cache/ba1/22/34/9c6e311971f0e3fa8e54c8daa246",
|
||||
"build/prefab/full/linux_arm64_gui/release/ballisticakit": "https://files.ballistica.net/cache/ba1/fb/d6/98273d4900876df499ce3eeaf361",
|
||||
"build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/6f/0b/d133fa30c71b55fe9a74fc1566c8",
|
||||
"build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/ff/d8/35c664ca3240e987b1583ba4dd45",
|
||||
"build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "https://files.ballistica.net/cache/ba1/01/97/93c7102a60ba833bb72b2c8a2d54",
|
||||
"build/prefab/full/linux_x86_64_gui/release/ballisticakit": "https://files.ballistica.net/cache/ba1/3f/4f/25171f50ccbd6ac79176b5b5fef3",
|
||||
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/ea/d9/728e18ae1bab507f0c945eb1c655",
|
||||
"build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/75/f3/ddb8deb5bde3812552eb3d36f71f",
|
||||
"build/prefab/full/mac_arm64_gui/debug/ballisticakit": "https://files.ballistica.net/cache/ba1/be/e8/ad05d8293f0bdaa2c08fd0f63991",
|
||||
"build/prefab/full/mac_arm64_gui/release/ballisticakit": "https://files.ballistica.net/cache/ba1/67/e3/baf1f62cd02099caecd60cf730e8",
|
||||
"build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/b3/be/eb85ab4a6fdbfe8ee0e98ecdc103",
|
||||
"build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/8a/d8/9853c09db52bd79c50a479b3af2a",
|
||||
"build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "https://files.ballistica.net/cache/ba1/f2/8d/352428c787aecf14dfcee6effbf7",
|
||||
"build/prefab/full/mac_x86_64_gui/release/ballisticakit": "https://files.ballistica.net/cache/ba1/19/2c/d9cf78db6a2ead74e80309d94db5",
|
||||
"build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/c0/a0/21b721e3c573d3a31cf1031ba26c",
|
||||
"build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/15/3e/f4760e8ef6b649dba231d7a0ceca",
|
||||
"build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "https://files.ballistica.net/cache/ba1/57/2f/651436ae6b72f37d7b22d8fb9d6c",
|
||||
"build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "https://files.ballistica.net/cache/ba1/e2/0e/a6ebee9cd0d483a78ca747065d44",
|
||||
"build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "https://files.ballistica.net/cache/ba1/0d/bc/27bdcdc662cbc4c30eb8df6b0cfc",
|
||||
"build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "https://files.ballistica.net/cache/ba1/63/03/5b3dc50d5ff12bc00091faa66d6d",
|
||||
"build/prefab/lib/linux_arm64_gui/debug/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/21/2f/7d4a687d49772e1e5ef78afe6953",
|
||||
"build/prefab/lib/linux_arm64_gui/release/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/97/a8/64f3e8e31f4ea820da487e80776b",
|
||||
"build/prefab/lib/linux_arm64_server/debug/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/7b/8e/e95a4dbbe3dd345463fc8fa0bd96",
|
||||
"build/prefab/lib/linux_arm64_server/release/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/ae/bb/c1e106cd2952f58e1e40c38f8ac8",
|
||||
"build/prefab/lib/linux_x86_64_gui/debug/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/51/24/8ecde92d034247c9d193b094c9a7",
|
||||
"build/prefab/lib/linux_x86_64_gui/release/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/55/16/9257bf17c2e1e2b69f9ca9565bfd",
|
||||
"build/prefab/lib/linux_x86_64_server/debug/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/8f/ce/613f1f5bd5154a0b0bc0498a1cd9",
|
||||
"build/prefab/lib/linux_x86_64_server/release/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/c9/09/5f2e451716a9a637fa4f57081d1a",
|
||||
"build/prefab/lib/mac_arm64_gui/debug/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/e3/22/3c2f4b5041b7529b43c6f02d2bb0",
|
||||
"build/prefab/lib/mac_arm64_gui/release/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/2f/53/c7463229114457f9961fe982cf6e",
|
||||
"build/prefab/lib/mac_arm64_server/debug/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/47/47/725d64124db479e4e3bfc869ad7e",
|
||||
"build/prefab/lib/mac_arm64_server/release/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/f3/61/d25c351d34cbcc9f5a13a07e37b0",
|
||||
"build/prefab/lib/mac_x86_64_gui/debug/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/a0/ec/eaee7f3df8e63262054d5c9fb478",
|
||||
"build/prefab/lib/mac_x86_64_gui/release/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/27/38/c234ba181b79f2f02960dbed6f74",
|
||||
"build/prefab/lib/mac_x86_64_server/debug/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/5b/b8/c26d5a60d055ec764f63670b5c1f",
|
||||
"build/prefab/lib/mac_x86_64_server/release/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/98/2f/7ed250c1d9c346cecb6e08a3b4a9",
|
||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "https://files.ballistica.net/cache/ba1/9e/b0/65db8b08f85ef9f83115c13168db",
|
||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "https://files.ballistica.net/cache/ba1/20/5b/8b6cebb37bcf05554ca39d3797e3",
|
||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "https://files.ballistica.net/cache/ba1/0d/57/f6ec440223b09c7aa5b3daa0104a",
|
||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "https://files.ballistica.net/cache/ba1/57/48/c35182859a71db36c15a88b68399",
|
||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "https://files.ballistica.net/cache/ba1/ca/6f/952eed4ce1dd6d4e721743d6f274",
|
||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "https://files.ballistica.net/cache/ba1/5c/bf/79a1a07dd329a9f84b9b31cc25b5",
|
||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "https://files.ballistica.net/cache/ba1/d7/d3/6fb6c212fd7dbf4c105bdf0d1e26",
|
||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "https://files.ballistica.net/cache/ba1/78/ad/d247c9c9050ff3efbcfd2f828115",
|
||||
"src/assets/ba_data/python/babase/_mgen/__init__.py": "https://files.ballistica.net/cache/ba1/52/c6/c11130af7b10d6c0321add5518fa",
|
||||
"src/assets/ba_data/python/babase/_mgen/enums.py": "https://files.ballistica.net/cache/ba1/38/c3/1dedd5e74f2508efc5974c8815a1",
|
||||
"src/ballistica/base/mgen/pyembed/binding_base.inc": "https://files.ballistica.net/cache/ba1/b4/3d/e352190a0e5673d101c0f3ee3ad2",
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
### 1.7.20 (build 21025, api 8, 2023-05-30)
|
||||
### 1.7.20 (build 21026, api 8, 2023-05-30)
|
||||
|
||||
- This seems like a good time for a `refactoring` release in anticipation of
|
||||
changes coming in 1.8. Basically this means that a lot of things will be
|
||||
|
||||
@ -31,7 +31,7 @@ if TYPE_CHECKING:
|
||||
|
||||
# Build number and version of the ballistica binary we expect to be
|
||||
# using.
|
||||
TARGET_BALLISTICA_BUILD = 21025
|
||||
TARGET_BALLISTICA_BUILD = 21026
|
||||
TARGET_BALLISTICA_VERSION = '1.7.20'
|
||||
|
||||
_g_env_config: EnvConfig | None = None
|
||||
|
||||
@ -40,11 +40,6 @@ namespace ballistica::base {
|
||||
|
||||
core::CoreFeatureSet* g_core{};
|
||||
BaseFeatureSet* g_base{};
|
||||
PlusSoftInterface* g_plus_soft{};
|
||||
classic::ClassicFeatureSet* g_classic{};
|
||||
ClassicSoftInterface* g_classic_soft{};
|
||||
// ui_v1::UIV1FeatureSet* g_ui_v1{};
|
||||
UIV1SoftInterface* g_ui_v1_soft{};
|
||||
|
||||
BaseFeatureSet::BaseFeatureSet()
|
||||
: python{new BasePython()},
|
||||
@ -115,13 +110,6 @@ void BaseFeatureSet::OnModuleExec(PyObject* module) {
|
||||
|
||||
g_base->python->ImportPythonObjs();
|
||||
|
||||
// Import any other C++ feature-set-front-ends we use.
|
||||
// FIXME: neither of these should be here.
|
||||
assert(g_classic == nullptr);
|
||||
g_classic = classic::ClassicFeatureSet::Import();
|
||||
// assert(g_ui_v1 == nullptr);
|
||||
// g_ui_v1 = ui_v1::UIV1FeatureSet::Import();
|
||||
|
||||
// let baenv know it can now feed us logs and run some checks.
|
||||
g_core->python->RunBaEnvOnBaBaseImport();
|
||||
|
||||
@ -238,11 +226,16 @@ auto BaseFeatureSet::HavePlus() -> bool {
|
||||
// hurt anything.
|
||||
tried_importing_plus_ = true;
|
||||
}
|
||||
return g_plus_soft != nullptr;
|
||||
return plus_soft_ != nullptr;
|
||||
}
|
||||
|
||||
void BaseFeatureSet::set_plus(PlusSoftInterface* plus) {
|
||||
assert(plus_soft_ == nullptr);
|
||||
plus_soft_ = plus;
|
||||
}
|
||||
|
||||
/// Access the plus feature-set. Will throw an exception if not present.
|
||||
auto BaseFeatureSet::Plus() -> PlusSoftInterface* {
|
||||
auto BaseFeatureSet::plus() -> PlusSoftInterface* {
|
||||
if (!tried_importing_plus_) {
|
||||
python->SoftImportPlus();
|
||||
// Important to set this *after* import attempt, or a second import attempt
|
||||
@ -250,7 +243,71 @@ auto BaseFeatureSet::Plus() -> PlusSoftInterface* {
|
||||
// hurt anything.
|
||||
tried_importing_plus_ = true;
|
||||
}
|
||||
return g_plus_soft;
|
||||
if (!plus_soft_) {
|
||||
throw Exception("plus feature-set not present.");
|
||||
}
|
||||
return plus_soft_;
|
||||
}
|
||||
|
||||
auto BaseFeatureSet::HaveClassic() -> bool {
|
||||
if (!tried_importing_classic_) {
|
||||
python->SoftImportClassic();
|
||||
// Important to set this *after* import attempt, or a second import attempt
|
||||
// while first is ongoing can insta-fail. Multiple import attempts shouldn't
|
||||
// hurt anything.
|
||||
tried_importing_classic_ = true;
|
||||
}
|
||||
return classic_soft_ != nullptr;
|
||||
}
|
||||
|
||||
/// Access the plus feature-set. Will throw an exception if not present.
|
||||
auto BaseFeatureSet::classic() -> ClassicSoftInterface* {
|
||||
if (!tried_importing_classic_) {
|
||||
python->SoftImportClassic();
|
||||
// Important to set this *after* import attempt, or a second import attempt
|
||||
// while first is ongoing can insta-fail. Multiple import attempts shouldn't
|
||||
// hurt anything.
|
||||
tried_importing_classic_ = true;
|
||||
}
|
||||
if (!classic_soft_) {
|
||||
throw Exception("classic feature-set not present.");
|
||||
}
|
||||
return classic_soft_;
|
||||
}
|
||||
void BaseFeatureSet::set_classic(ClassicSoftInterface* classic) {
|
||||
assert(classic_soft_ == nullptr);
|
||||
classic_soft_ = classic;
|
||||
}
|
||||
|
||||
auto BaseFeatureSet::HaveUIV1() -> bool {
|
||||
if (!tried_importing_ui_v1_) {
|
||||
python->SoftImportUIV1();
|
||||
// Important to set this *after* import attempt, or a second import attempt
|
||||
// while first is ongoing can insta-fail. Multiple import attempts shouldn't
|
||||
// hurt anything.
|
||||
tried_importing_ui_v1_ = true;
|
||||
}
|
||||
return ui_v1_soft_ != nullptr;
|
||||
}
|
||||
|
||||
/// Access the plus feature-set. Will throw an exception if not present.
|
||||
auto BaseFeatureSet::ui_v1() -> UIV1SoftInterface* {
|
||||
if (!tried_importing_ui_v1_) {
|
||||
python->SoftImportUIV1();
|
||||
// Important to set this *after* import attempt, or a second import attempt
|
||||
// while first is ongoing can insta-fail. Multiple import attempts shouldn't
|
||||
// hurt anything.
|
||||
tried_importing_ui_v1_ = true;
|
||||
}
|
||||
if (!ui_v1_soft_) {
|
||||
throw Exception("ui_v1 feature-set not present.");
|
||||
}
|
||||
return ui_v1_soft_;
|
||||
}
|
||||
|
||||
void BaseFeatureSet::set_ui_v1(UIV1SoftInterface* ui_v1) {
|
||||
assert(ui_v1_soft_ == nullptr);
|
||||
ui_v1_soft_ = ui_v1;
|
||||
}
|
||||
|
||||
auto BaseFeatureSet::GetAppInstanceUUID() -> const std::string& {
|
||||
@ -287,8 +344,8 @@ auto BaseFeatureSet::GetAppInstanceUUID() -> const std::string& {
|
||||
void BaseFeatureSet::PlusDirectSendV1CloudLogs(const std::string& prefix,
|
||||
const std::string& suffix,
|
||||
bool instant, int* result) {
|
||||
if (g_plus_soft != nullptr) {
|
||||
g_plus_soft->DirectSendV1CloudLogs(prefix, suffix, instant, result);
|
||||
if (plus_soft_ != nullptr) {
|
||||
plus_soft_->DirectSendV1CloudLogs(prefix, suffix, instant, result);
|
||||
}
|
||||
}
|
||||
|
||||
@ -308,7 +365,7 @@ auto BaseFeatureSet::FeatureSetFromData(PyObject* obj)
|
||||
auto BaseFeatureSet::IsUnmodifiedBlessedBuild() -> bool {
|
||||
// If we've got plus present, ask them. Otherwise assume no.
|
||||
if (HavePlus()) {
|
||||
return Plus()->IsUnmodifiedBlessedBuild();
|
||||
return plus()->IsUnmodifiedBlessedBuild();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@ -381,7 +438,7 @@ void BaseFeatureSet::V1CloudLog(const std::string& msg) {
|
||||
if (g_core == nullptr) {
|
||||
logsuffix = msg;
|
||||
}
|
||||
Plus()->DirectSendV1CloudLogs(logprefix, logsuffix, false, nullptr);
|
||||
plus()->DirectSendV1CloudLogs(logprefix, logsuffix, false, nullptr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -18,15 +18,6 @@ namespace ballistica::core {
|
||||
class CoreConfig;
|
||||
class CoreFeatureSet;
|
||||
} // namespace ballistica::core
|
||||
namespace ballistica::plus {
|
||||
class PlusFeatureSet;
|
||||
}
|
||||
namespace ballistica::classic {
|
||||
class ClassicFeatureSet;
|
||||
}
|
||||
namespace ballistica::ui_v1 {
|
||||
class UIV1FeatureSet;
|
||||
}
|
||||
|
||||
namespace ballistica::base {
|
||||
|
||||
@ -593,11 +584,6 @@ enum class SysMeshID {
|
||||
// are initially imported (just as regular Python modules do).
|
||||
extern core::CoreFeatureSet* g_core;
|
||||
extern base::BaseFeatureSet* g_base;
|
||||
extern PlusSoftInterface* g_plus_soft;
|
||||
extern classic::ClassicFeatureSet* g_classic;
|
||||
extern base::ClassicSoftInterface* g_classic_soft;
|
||||
extern base::UIV1SoftInterface* g_ui_v1_soft;
|
||||
// extern ui_v1::UIV1FeatureSet* g_ui_v1;
|
||||
|
||||
/// Our C++ front-end to our feature set. This is what other C++
|
||||
/// feature-sets can 'Import' from us.
|
||||
@ -629,11 +615,29 @@ class BaseFeatureSet : public FeatureSetNativeComponent,
|
||||
|
||||
void SetCurrentContext(const ContextRef& context);
|
||||
|
||||
/// Whether the plus feature-set is available.
|
||||
/// Try to load the plus feature-set and return whether it is available.
|
||||
auto HavePlus() -> bool;
|
||||
|
||||
/// Access the plus feature-set. Will throw an exception if not present.
|
||||
auto Plus() -> PlusSoftInterface*;
|
||||
auto plus() -> PlusSoftInterface*;
|
||||
|
||||
void set_plus(PlusSoftInterface* plus);
|
||||
|
||||
/// Try to load the classic feature-set and return whether it is available.
|
||||
auto HaveClassic() -> bool;
|
||||
|
||||
/// Access the classic feature-set. Will throw an exception if not present.
|
||||
auto classic() -> ClassicSoftInterface*;
|
||||
|
||||
void set_classic(ClassicSoftInterface* classic);
|
||||
|
||||
/// Try to load the ui_v1 feature-set and return whether it is available.
|
||||
auto HaveUIV1() -> bool;
|
||||
|
||||
/// Access the ui_v1 feature-set. Will throw an exception if not present.
|
||||
auto ui_v1() -> UIV1SoftInterface*;
|
||||
|
||||
void set_ui_v1(UIV1SoftInterface* ui_v1);
|
||||
|
||||
/// Return a string that should be universally unique to this particular
|
||||
/// running instance of the app.
|
||||
@ -721,11 +725,17 @@ class BaseFeatureSet : public FeatureSetNativeComponent,
|
||||
|
||||
AppMode* app_mode_;
|
||||
Console* console_{};
|
||||
PlusSoftInterface* plus_soft_{};
|
||||
ClassicSoftInterface* classic_soft_{};
|
||||
UIV1SoftInterface* ui_v1_soft_{};
|
||||
|
||||
std::string console_startup_messages_;
|
||||
bool tried_importing_plus_{};
|
||||
bool tried_importing_classic_{};
|
||||
bool tried_importing_ui_v1_{};
|
||||
bool called_start_app_{};
|
||||
bool app_running_{};
|
||||
bool called_run_app_to_completion_{};
|
||||
bool tried_importing_plus_{};
|
||||
};
|
||||
|
||||
} // namespace ballistica::base
|
||||
|
||||
@ -1308,7 +1308,12 @@ void JoystickInput::UpdateMapping() {
|
||||
return;
|
||||
}
|
||||
|
||||
auto* cpy{g_classic->python};
|
||||
auto* cl{g_base->HaveClassic() ? g_base->classic() : nullptr};
|
||||
|
||||
if (!cl) {
|
||||
Log(LogLevel::kWarning,
|
||||
"Classic not present; can't config joystick mapping.");
|
||||
}
|
||||
|
||||
// If we're a child, use our parent's id to search for config values and just
|
||||
// tack on a '2'.
|
||||
@ -1318,36 +1323,36 @@ void JoystickInput::UpdateMapping() {
|
||||
// Grab all button values from Python. Traditionally we stored these
|
||||
// with the first index 1 so we need to subtract 1 to get the zero-indexed
|
||||
// value. (grumble).
|
||||
jump_button_ = cpy->GetControllerValue(js, "buttonJump" + ext) - 1;
|
||||
punch_button_ = cpy->GetControllerValue(js, "buttonPunch" + ext) - 1;
|
||||
bomb_button_ = cpy->GetControllerValue(js, "buttonBomb" + ext) - 1;
|
||||
pickup_button_ = cpy->GetControllerValue(js, "buttonPickUp" + ext) - 1;
|
||||
start_button_ = cpy->GetControllerValue(js, "buttonStart" + ext) - 1;
|
||||
start_button_2_ = cpy->GetControllerValue(js, "buttonStart2" + ext) - 1;
|
||||
jump_button_ = cl->GetControllerValue(js, "buttonJump" + ext) - 1;
|
||||
punch_button_ = cl->GetControllerValue(js, "buttonPunch" + ext) - 1;
|
||||
bomb_button_ = cl->GetControllerValue(js, "buttonBomb" + ext) - 1;
|
||||
pickup_button_ = cl->GetControllerValue(js, "buttonPickUp" + ext) - 1;
|
||||
start_button_ = cl->GetControllerValue(js, "buttonStart" + ext) - 1;
|
||||
start_button_2_ = cl->GetControllerValue(js, "buttonStart2" + ext) - 1;
|
||||
hold_position_button_ =
|
||||
cpy->GetControllerValue(js, "buttonHoldPosition" + ext) - 1;
|
||||
run_button1_ = cpy->GetControllerValue(js, "buttonRun1" + ext) - 1;
|
||||
run_button2_ = cpy->GetControllerValue(js, "buttonRun2" + ext) - 1;
|
||||
cl->GetControllerValue(js, "buttonHoldPosition" + ext) - 1;
|
||||
run_button1_ = cl->GetControllerValue(js, "buttonRun1" + ext) - 1;
|
||||
run_button2_ = cl->GetControllerValue(js, "buttonRun2" + ext) - 1;
|
||||
vr_reorient_button_ =
|
||||
cpy->GetControllerValue(js, "buttonVRReorient" + ext) - 1;
|
||||
ignored_button_ = cpy->GetControllerValue(js, "buttonIgnored" + ext) - 1;
|
||||
ignored_button2_ = cpy->GetControllerValue(js, "buttonIgnored2" + ext) - 1;
|
||||
ignored_button3_ = cpy->GetControllerValue(js, "buttonIgnored3" + ext) - 1;
|
||||
ignored_button4_ = cpy->GetControllerValue(js, "buttonIgnored4" + ext) - 1;
|
||||
cl->GetControllerValue(js, "buttonVRReorient" + ext) - 1;
|
||||
ignored_button_ = cl->GetControllerValue(js, "buttonIgnored" + ext) - 1;
|
||||
ignored_button2_ = cl->GetControllerValue(js, "buttonIgnored2" + ext) - 1;
|
||||
ignored_button3_ = cl->GetControllerValue(js, "buttonIgnored3" + ext) - 1;
|
||||
ignored_button4_ = cl->GetControllerValue(js, "buttonIgnored4" + ext) - 1;
|
||||
int old_run_trigger_1 = run_trigger1_;
|
||||
run_trigger1_ = cpy->GetControllerValue(js, "triggerRun1" + ext) - 1;
|
||||
run_trigger1_ = cl->GetControllerValue(js, "triggerRun1" + ext) - 1;
|
||||
int old_run_trigger_2 = run_trigger2_;
|
||||
run_trigger2_ = cpy->GetControllerValue(js, "triggerRun2" + ext) - 1;
|
||||
up_button_ = cpy->GetControllerValue(js, "buttonUp" + ext) - 1;
|
||||
left_button_ = cpy->GetControllerValue(js, "buttonLeft" + ext) - 1;
|
||||
right_button_ = cpy->GetControllerValue(js, "buttonRight" + ext) - 1;
|
||||
down_button_ = cpy->GetControllerValue(js, "buttonDown" + ext) - 1;
|
||||
up_button2_ = cpy->GetControllerValue(js, "buttonUp2" + ext) - 1;
|
||||
left_button2_ = cpy->GetControllerValue(js, "buttonLeft2" + ext) - 1;
|
||||
right_button2_ = cpy->GetControllerValue(js, "buttonRight2" + ext) - 1;
|
||||
down_button2_ = cpy->GetControllerValue(js, "buttonDown2" + ext) - 1;
|
||||
run_trigger2_ = cl->GetControllerValue(js, "triggerRun2" + ext) - 1;
|
||||
up_button_ = cl->GetControllerValue(js, "buttonUp" + ext) - 1;
|
||||
left_button_ = cl->GetControllerValue(js, "buttonLeft" + ext) - 1;
|
||||
right_button_ = cl->GetControllerValue(js, "buttonRight" + ext) - 1;
|
||||
down_button_ = cl->GetControllerValue(js, "buttonDown" + ext) - 1;
|
||||
up_button2_ = cl->GetControllerValue(js, "buttonUp2" + ext) - 1;
|
||||
left_button2_ = cl->GetControllerValue(js, "buttonLeft2" + ext) - 1;
|
||||
right_button2_ = cl->GetControllerValue(js, "buttonRight2" + ext) - 1;
|
||||
down_button2_ = cl->GetControllerValue(js, "buttonDown2" + ext) - 1;
|
||||
unassigned_buttons_run_ = static_cast<bool>(
|
||||
cpy->GetControllerValue(js, "unassignedButtonsRun" + ext));
|
||||
cl->GetControllerValue(js, "unassignedButtonsRun" + ext));
|
||||
|
||||
// If our run trigger has changed, reset its calibration.
|
||||
// NOTE: It looks like on Mac we're getting analog trigger values from -1 to 1
|
||||
@ -1362,21 +1367,21 @@ void JoystickInput::UpdateMapping() {
|
||||
run_trigger2_max_ = 0.8f;
|
||||
}
|
||||
|
||||
int ival = cpy->GetControllerValue(js, "uiOnly" + ext);
|
||||
int ival = cl->GetControllerValue(js, "uiOnly" + ext);
|
||||
if (ival == -1) {
|
||||
ui_only_ = false;
|
||||
} else {
|
||||
ui_only_ = static_cast<bool>(ival);
|
||||
}
|
||||
|
||||
ival = cpy->GetControllerValue(js, "ignoreCompletely" + ext);
|
||||
ival = cl->GetControllerValue(js, "ignoreCompletely" + ext);
|
||||
if (ival == -1) {
|
||||
ignore_completely_ = false;
|
||||
} else {
|
||||
ignore_completely_ = static_cast<bool>(ival);
|
||||
}
|
||||
|
||||
ival = cpy->GetControllerValue(js, "autoRecalibrateAnalogSticks" + ext);
|
||||
ival = cl->GetControllerValue(js, "autoRecalibrateAnalogSticks" + ext);
|
||||
|
||||
{
|
||||
bool was_on = auto_recalibrate_analog_stick_;
|
||||
@ -1402,7 +1407,7 @@ void JoystickInput::UpdateMapping() {
|
||||
}
|
||||
}
|
||||
|
||||
ival = cpy->GetControllerValue(js, "startButtonActivatesDefaultWidget" + ext);
|
||||
ival = cl->GetControllerValue(js, "startButtonActivatesDefaultWidget" + ext);
|
||||
|
||||
if (ival == -1) {
|
||||
start_button_activates_default_widget_ = true;
|
||||
@ -1411,7 +1416,7 @@ void JoystickInput::UpdateMapping() {
|
||||
}
|
||||
|
||||
// Update calibration stuff.
|
||||
float as = cpy->GetControllerFloatValue(js, "analogStickDeadZone" + ext);
|
||||
float as = cl->GetControllerFloatValue(js, "analogStickDeadZone" + ext);
|
||||
|
||||
if (as < 0) {
|
||||
as = 1.0f;
|
||||
@ -1425,7 +1430,7 @@ void JoystickInput::UpdateMapping() {
|
||||
calibration_threshold_ = kJoystickCalibrationThreshold * as;
|
||||
calibration_break_threshold_ = kJoystickCalibrationBreakThreshold * as;
|
||||
|
||||
hat_ = cpy->GetControllerValue(js, "dpad" + ext) - 1;
|
||||
hat_ = cl->GetControllerValue(js, "dpad" + ext) - 1;
|
||||
|
||||
// If unset, use our default.
|
||||
if (hat_ == -2) {
|
||||
@ -1437,7 +1442,7 @@ void JoystickInput::UpdateMapping() {
|
||||
}
|
||||
|
||||
// Grab our analog stick.
|
||||
analog_lr_ = cpy->GetControllerValue(js, "analogStickLR" + ext) - 1;
|
||||
analog_lr_ = cl->GetControllerValue(js, "analogStickLR" + ext) - 1;
|
||||
|
||||
// If we got unset, set to our default.
|
||||
if (analog_lr_ == -2) {
|
||||
@ -1448,7 +1453,7 @@ void JoystickInput::UpdateMapping() {
|
||||
}
|
||||
}
|
||||
|
||||
analog_ud_ = cpy->GetControllerValue(js, "analogStickUD" + ext) - 1;
|
||||
analog_ud_ = cl->GetControllerValue(js, "analogStickUD" + ext) - 1;
|
||||
|
||||
// If we got unset, set to our default.
|
||||
if (analog_ud_ == -2) {
|
||||
@ -1461,7 +1466,7 @@ void JoystickInput::UpdateMapping() {
|
||||
|
||||
// See whether we have a child-joystick and create it if need be.
|
||||
if (!parent_joy_stick_) {
|
||||
int enable = cpy->GetControllerValue(js, "enableSecondary");
|
||||
int enable = cl->GetControllerValue(js, "enableSecondary");
|
||||
if (enable == -1) {
|
||||
enable = 0;
|
||||
}
|
||||
|
||||
@ -375,7 +375,7 @@ void KeyboardInput::UpdateRun(SDL_Keycode key, bool down) {
|
||||
void KeyboardInput::UpdateMapping() {
|
||||
assert(g_base->InLogicThread());
|
||||
|
||||
auto* cpy = g_classic->python;
|
||||
auto* cl{g_base->HaveClassic() ? g_base->classic() : nullptr};
|
||||
|
||||
SDL_Keycode up_key_default, down_key_default, left_key_default,
|
||||
right_key_default, jump_key_default, punch_key_default, bomb_key_default,
|
||||
@ -413,44 +413,44 @@ void KeyboardInput::UpdateMapping() {
|
||||
left_key_assigned_ = right_key_assigned_ = up_key_assigned_ =
|
||||
down_key_assigned_ = false;
|
||||
|
||||
int val = cpy->GetControllerValue(this, "buttonJump");
|
||||
int val = cl ? cl->GetControllerValue(this, "buttonJump") : -1;
|
||||
jump_key_ = (val == -1) ? jump_key_default : (SDL_Keycode)val;
|
||||
UpdateArrowKeys(jump_key_);
|
||||
|
||||
val = cpy->GetControllerValue(this, "buttonPunch");
|
||||
val = cl ? cl->GetControllerValue(this, "buttonPunch") : -1;
|
||||
punch_key_ = (val == -1) ? punch_key_default : (SDL_Keycode)val;
|
||||
UpdateArrowKeys(punch_key_);
|
||||
|
||||
val = cpy->GetControllerValue(this, "buttonBomb");
|
||||
val = cl ? cl->GetControllerValue(this, "buttonBomb") : -1;
|
||||
bomb_key_ = (val == -1) ? bomb_key_default : (SDL_Keycode)val;
|
||||
UpdateArrowKeys(bomb_key_);
|
||||
|
||||
val = cpy->GetControllerValue(this, "buttonPickUp");
|
||||
val = cl ? cl->GetControllerValue(this, "buttonPickUp") : -1;
|
||||
pick_up_key_ = (val == -1) ? pick_up_key_default : (SDL_Keycode)val;
|
||||
UpdateArrowKeys(pick_up_key_);
|
||||
|
||||
val = cpy->GetControllerValue(this, "buttonHoldPosition");
|
||||
val = cl ? cl->GetControllerValue(this, "buttonHoldPosition") : -1;
|
||||
hold_position_key_ =
|
||||
(val == -1) ? hold_position_key_default : (SDL_Keycode)val;
|
||||
UpdateArrowKeys(hold_position_key_);
|
||||
|
||||
val = cpy->GetControllerValue(this, "buttonStart");
|
||||
val = cl ? cl->GetControllerValue(this, "buttonStart") : -1;
|
||||
start_key_ = (val == -1) ? start_key_default : (SDL_Keycode)val;
|
||||
UpdateArrowKeys(start_key_);
|
||||
|
||||
val = cpy->GetControllerValue(this, "buttonUp");
|
||||
val = cl ? cl->GetControllerValue(this, "buttonUp") : -1;
|
||||
up_key_ = (val == -1) ? up_key_default : (SDL_Keycode)val;
|
||||
UpdateArrowKeys(up_key_);
|
||||
|
||||
val = cpy->GetControllerValue(this, "buttonDown");
|
||||
val = cl ? cl->GetControllerValue(this, "buttonDown") : -1;
|
||||
down_key_ = (val == -1) ? down_key_default : (SDL_Keycode)val;
|
||||
UpdateArrowKeys(down_key_);
|
||||
|
||||
val = cpy->GetControllerValue(this, "buttonLeft");
|
||||
val = cl ? cl->GetControllerValue(this, "buttonLeft") : -1;
|
||||
left_key_ = (val == -1) ? left_key_default : (SDL_Keycode)val;
|
||||
UpdateArrowKeys(left_key_);
|
||||
|
||||
val = cpy->GetControllerValue(this, "buttonRight");
|
||||
val = cl ? cl->GetControllerValue(this, "buttonRight") : -1;
|
||||
right_key_ = (val == -1) ? right_key_default : (SDL_Keycode)val;
|
||||
UpdateArrowKeys(right_key_);
|
||||
|
||||
|
||||
@ -65,7 +65,7 @@ void Logic::OnAppStart() {
|
||||
g_core->platform->OnAppStart();
|
||||
g_base->app_mode()->OnAppStart();
|
||||
if (g_base->HavePlus()) {
|
||||
g_base->Plus()->OnAppStart();
|
||||
g_base->plus()->OnAppStart();
|
||||
}
|
||||
g_base->python->OnAppStart();
|
||||
} catch (const std::exception& e) {
|
||||
@ -89,7 +89,7 @@ void Logic::OnAppPause() {
|
||||
// Note: keep these in opposite order of OnAppStart.
|
||||
g_base->python->OnAppPause();
|
||||
if (g_base->HavePlus()) {
|
||||
g_base->Plus()->OnAppPause();
|
||||
g_base->plus()->OnAppPause();
|
||||
}
|
||||
g_base->app_mode()->OnAppPause();
|
||||
g_core->platform->OnAppPause();
|
||||
@ -110,7 +110,7 @@ void Logic::OnAppResume() {
|
||||
g_core->platform->OnAppResume();
|
||||
g_base->app_mode()->OnAppResume();
|
||||
if (g_base->HavePlus()) {
|
||||
g_base->Plus()->OnAppResume();
|
||||
g_base->plus()->OnAppResume();
|
||||
}
|
||||
g_base->python->OnAppResume();
|
||||
}
|
||||
@ -125,7 +125,7 @@ void Logic::OnAppShutdown() {
|
||||
// Note: keep these in opposite order of OnAppStart.
|
||||
g_base->python->OnAppShutdown();
|
||||
if (g_base->HavePlus()) {
|
||||
g_base->Plus()->OnAppShutdown();
|
||||
g_base->plus()->OnAppShutdown();
|
||||
}
|
||||
g_base->app_mode()->OnAppShutdown();
|
||||
g_core->platform->OnAppResume();
|
||||
@ -154,7 +154,7 @@ void Logic::ApplyAppConfig() {
|
||||
g_core->platform->ApplyAppConfig();
|
||||
g_base->app_mode()->ApplyAppConfig();
|
||||
if (g_base->HavePlus()) {
|
||||
g_base->Plus()->ApplyAppConfig();
|
||||
g_base->plus()->ApplyAppConfig();
|
||||
}
|
||||
g_base->python->ApplyAppConfig();
|
||||
|
||||
@ -259,7 +259,7 @@ void Logic::OnScreenSizeChange(float virtual_width, float virtual_height,
|
||||
g_core->platform->OnScreenSizeChange();
|
||||
g_base->app_mode()->OnScreenSizeChange();
|
||||
if (g_base->HavePlus()) {
|
||||
g_base->Plus()->OnScreenSizeChange();
|
||||
g_base->plus()->OnScreenSizeChange();
|
||||
}
|
||||
g_base->python->OnScreenSizeChange();
|
||||
}
|
||||
@ -279,7 +279,7 @@ void Logic::StepDisplayTime() {
|
||||
g_core->platform->StepDisplayTime();
|
||||
g_base->app_mode()->StepDisplayTime();
|
||||
if (g_base->HavePlus()) {
|
||||
g_base->Plus()->StepDisplayTime();
|
||||
g_base->plus()->StepDisplayTime();
|
||||
}
|
||||
g_base->python->StepDisplayTime();
|
||||
g_base->app->LogicThreadStepDisplayTime();
|
||||
|
||||
@ -76,6 +76,26 @@ void BasePython::SoftImportPlus() {
|
||||
}
|
||||
}
|
||||
|
||||
void BasePython::SoftImportClassic() {
|
||||
auto gil{Python::ScopedInterpreterLock()};
|
||||
auto result = PythonRef::Stolen(PyImport_ImportModule("_baclassic"));
|
||||
if (!result.Exists()) {
|
||||
// Ignore any errors here for now. All that will matter is whether plus
|
||||
// gave us its interface.
|
||||
PyErr_Clear();
|
||||
}
|
||||
}
|
||||
|
||||
void BasePython::SoftImportUIV1() {
|
||||
auto gil{Python::ScopedInterpreterLock()};
|
||||
auto result = PythonRef::Stolen(PyImport_ImportModule("_bauiv1"));
|
||||
if (!result.Exists()) {
|
||||
// Ignore any errors here for now. All that will matter is whether plus
|
||||
// gave us its interface.
|
||||
PyErr_Clear();
|
||||
}
|
||||
}
|
||||
|
||||
void BasePython::ReadConfig() {
|
||||
// Read the config file and store the config dict for easy access.
|
||||
objs().Get(ObjID::kReadConfigCall).Call();
|
||||
|
||||
@ -157,6 +157,8 @@ class BasePython {
|
||||
auto DoOnce() -> bool;
|
||||
|
||||
void SoftImportPlus();
|
||||
void SoftImportClassic();
|
||||
void SoftImportUIV1();
|
||||
|
||||
private:
|
||||
std::set<std::string> do_once_locations_;
|
||||
|
||||
@ -11,6 +11,11 @@ namespace ballistica::base {
|
||||
/// case.
|
||||
class ClassicSoftInterface {
|
||||
public:
|
||||
virtual auto GetControllerValue(base::InputDevice* device,
|
||||
const std::string& value_name) -> int = 0;
|
||||
virtual auto GetControllerFloatValue(base::InputDevice* device,
|
||||
const std::string& value_name)
|
||||
-> float = 0;
|
||||
};
|
||||
|
||||
} // namespace ballistica::base
|
||||
|
||||
@ -3,6 +3,11 @@
|
||||
#ifndef BALLISTICA_BASE_SUPPORT_UI_V1_SOFT_H_
|
||||
#define BALLISTICA_BASE_SUPPORT_UI_V1_SOFT_H_
|
||||
|
||||
// Predeclare some types we use.
|
||||
namespace ballistica::ui_v1 {
|
||||
class RootUI;
|
||||
}
|
||||
|
||||
namespace ballistica::base {
|
||||
|
||||
/// 'Soft' interface to the ui_v1 feature-set.
|
||||
@ -14,6 +19,7 @@ class UIV1SoftInterface {
|
||||
virtual void DoHandleDeviceMenuPress(base::InputDevice* device) = 0;
|
||||
virtual void DoShowURL(const std::string& url) = 0;
|
||||
virtual void DoQuitWindow() = 0;
|
||||
virtual auto NewRootUI() -> ui_v1::RootUI* = 0;
|
||||
};
|
||||
|
||||
} // namespace ballistica::base
|
||||
|
||||
@ -58,7 +58,7 @@ void UI::StepDisplayTime() { assert(g_base->InLogicThread()); }
|
||||
void UI::OnAppStart() {
|
||||
assert(g_base->InLogicThread());
|
||||
|
||||
root_ui_ = new ui_v1::RootUI();
|
||||
root_ui_ = g_base->ui_v1()->NewRootUI();
|
||||
|
||||
// Make sure we know when forced-ui-scale is enabled.
|
||||
if (force_scale_) {
|
||||
@ -121,11 +121,11 @@ void UI::PushMainMenuPressCall(InputDevice* device) {
|
||||
|
||||
void UI::MainMenuPress(InputDevice* device) {
|
||||
assert(g_base->InLogicThread());
|
||||
if (g_ui_v1_soft) {
|
||||
g_ui_v1_soft->DoHandleDeviceMenuPress(device);
|
||||
if (g_base->HaveUIV1()) {
|
||||
g_base->ui_v1()->DoHandleDeviceMenuPress(device);
|
||||
} else {
|
||||
Log(LogLevel::kWarning,
|
||||
"UI::MainMenuPress called without g_ui_v1_soft; unexpected.");
|
||||
"UI::MainMenuPress called without ui_v1 present; unexpected.");
|
||||
}
|
||||
}
|
||||
|
||||
@ -411,8 +411,8 @@ void UI::Draw(FrameDef* frame_def) {
|
||||
}
|
||||
|
||||
void UI::ShowURL(const std::string& url) {
|
||||
if (g_ui_v1_soft) {
|
||||
g_ui_v1_soft->DoShowURL(url);
|
||||
if (g_base->HaveUIV1()) {
|
||||
g_base->ui_v1()->DoShowURL(url);
|
||||
} else {
|
||||
Log(LogLevel::kWarning,
|
||||
"UI::ShowURL called without g_ui_v1_soft present; unexpected.");
|
||||
@ -427,7 +427,7 @@ void UI::ConfirmQuit() {
|
||||
} else {
|
||||
// If input is locked or the in-app-console is up or we don't have ui-v1,
|
||||
// just quit immediately; a confirm screen wouldn't work anyway.
|
||||
if (g_base->input->IsInputLocked() || g_ui_v1_soft == nullptr
|
||||
if (g_base->input->IsInputLocked() || !g_base->HaveUIV1()
|
||||
|| (g_base->console() != nullptr && g_base->console()->active())) {
|
||||
// Just go through _babase.quit().
|
||||
// FIXME: Shouldn't need to go out to the Python layer here;
|
||||
@ -438,7 +438,7 @@ void UI::ConfirmQuit() {
|
||||
} else {
|
||||
ScopedSetContext ssc(nullptr);
|
||||
g_base->audio->PlaySound(g_base->assets->SysSound(SysSoundID::kSwish));
|
||||
g_ui_v1_soft->DoQuitWindow();
|
||||
g_base->ui_v1()->DoQuitWindow();
|
||||
|
||||
// If we have a keyboard, give it UI ownership.
|
||||
InputDevice* keyboard = g_base->input->keyboard_input();
|
||||
|
||||
@ -38,8 +38,9 @@ void ClassicFeatureSet::OnModuleExec(PyObject* module) {
|
||||
assert(g_base == nullptr); // Should be getting set once here.
|
||||
g_base = base::BaseFeatureSet::Import();
|
||||
|
||||
// Let base know that we exist.
|
||||
base::g_classic_soft = g_classic;
|
||||
// Let base know we exist.
|
||||
// (save it the trouble of trying to load us if it uses us passively).
|
||||
g_base->set_classic(g_classic);
|
||||
|
||||
g_core->BootLog("_baclassic exec end");
|
||||
}
|
||||
@ -57,4 +58,14 @@ auto ClassicFeatureSet::Import() -> ClassicFeatureSet* {
|
||||
return ImportThroughPythonModule<ClassicFeatureSet>("_baclassic");
|
||||
}
|
||||
|
||||
int ClassicFeatureSet::GetControllerValue(base::InputDevice* device,
|
||||
const std::string& value_name) {
|
||||
return python->GetControllerValue(device, value_name);
|
||||
}
|
||||
|
||||
float ClassicFeatureSet::GetControllerFloatValue(
|
||||
base::InputDevice* device, const std::string& value_name) {
|
||||
return python->GetControllerFloatValue(device, value_name);
|
||||
}
|
||||
|
||||
} // namespace ballistica::classic
|
||||
|
||||
@ -67,6 +67,10 @@ class ClassicFeatureSet : public FeatureSetNativeComponent,
|
||||
|
||||
/// Called when our associated Python module is instantiated.
|
||||
static void OnModuleExec(PyObject* module);
|
||||
auto GetControllerValue(base::InputDevice* device,
|
||||
const std::string& value_name) -> int override;
|
||||
auto GetControllerFloatValue(base::InputDevice* device,
|
||||
const std::string& value_name) -> float override;
|
||||
|
||||
ClassicPython* const python;
|
||||
V1Account* const v1_account;
|
||||
|
||||
@ -190,7 +190,7 @@ void V1Account::SetLogin(V1AccountType account_type, V1LoginState login_state,
|
||||
}
|
||||
if (call_login_did_change) {
|
||||
// Inform a few subsystems of the change.
|
||||
g_base->Plus()->V1LoginDidChange();
|
||||
g_base->plus()->V1LoginDidChange();
|
||||
g_core->platform->V1LoginDidChange();
|
||||
}
|
||||
}
|
||||
|
||||
@ -150,8 +150,11 @@ void CoreFeatureSet::PostInit() {
|
||||
}
|
||||
|
||||
auto CoreFeatureSet::SoftImportBase() -> BaseSoftInterface* {
|
||||
if (!g_base_soft) {
|
||||
if (!tried_importing_base_) {
|
||||
python->SoftImportBase();
|
||||
// Important to set this *AFTER*. Otherwise imports can fail if there is
|
||||
// already one in progress.
|
||||
tried_importing_base_ = true;
|
||||
}
|
||||
return g_base_soft;
|
||||
}
|
||||
|
||||
@ -141,6 +141,7 @@ class CoreFeatureSet {
|
||||
void UpdateAppTime();
|
||||
explicit CoreFeatureSet(CoreConfig config);
|
||||
void PostInit();
|
||||
bool tried_importing_base_{};
|
||||
EventLoop* main_event_loop_{};
|
||||
CoreConfig core_config_;
|
||||
bool started_suicide_{};
|
||||
|
||||
@ -416,7 +416,7 @@ void ConnectionToClient::HandleMessagePacket(
|
||||
if (!token_.empty()) {
|
||||
// Kick off a query to the master-server for this client's info.
|
||||
// FIXME: we need to add retries for this in case of failure.
|
||||
g_base->Plus()->ClientInfoQuery(
|
||||
g_base->plus()->ClientInfoQuery(
|
||||
token_, our_handshake_player_spec_str_ + our_handshake_salt_,
|
||||
peer_hash_, build_number_);
|
||||
}
|
||||
|
||||
@ -197,7 +197,7 @@ void ConnectionToHost::HandleGamePacket(const std::vector<uint8_t>& data) {
|
||||
set_peer_spec(PlayerSpec(string_buffer.data()));
|
||||
}
|
||||
|
||||
peer_hash_ = g_base->Plus()->CalcV1PeerHash(peer_hash_input_);
|
||||
peer_hash_ = g_base->plus()->CalcV1PeerHash(peer_hash_input_);
|
||||
|
||||
set_can_communicate(true);
|
||||
appmode->LaunchClientSession();
|
||||
@ -222,7 +222,7 @@ void ConnectionToHost::HandleGamePacket(const std::vector<uint8_t>& data) {
|
||||
JsonDict dict;
|
||||
dict.AddNumber("b", kEngineBuildNumber);
|
||||
|
||||
g_base->Plus()->V1SetClientInfo(&dict);
|
||||
g_base->plus()->V1SetClientInfo(&dict);
|
||||
|
||||
// Pass the hash we generated from their handshake; they can use
|
||||
// this to make sure we're who we say we are.
|
||||
|
||||
@ -1341,7 +1341,7 @@ static auto PyGetGameRoster(PyObject* self, PyObject* args, PyObject* keywds)
|
||||
// Let's also include a public account-id if we have one.
|
||||
std::string account_id;
|
||||
if (clientid == -1) {
|
||||
account_id = g_base->Plus()->GetPublicV1AccountID();
|
||||
account_id = g_base->plus()->GetPublicV1AccountID();
|
||||
} else {
|
||||
if (auto* appmode = SceneV1AppMode::GetActiveOrWarn()) {
|
||||
auto client2 =
|
||||
|
||||
@ -1203,7 +1203,7 @@ void SceneV1AppMode::SetPublicPartyEnabled(bool val) {
|
||||
return;
|
||||
}
|
||||
public_party_enabled_ = val;
|
||||
g_base->Plus()->PushPublicPartyState();
|
||||
g_base->plus()->PushPublicPartyState();
|
||||
}
|
||||
|
||||
void SceneV1AppMode::SetPublicPartySize(int count) {
|
||||
@ -1216,7 +1216,7 @@ void SceneV1AppMode::SetPublicPartySize(int count) {
|
||||
// Push our new state to the server *ONLY* if public-party is turned on
|
||||
// (wasteful otherwise).
|
||||
if (public_party_enabled_) {
|
||||
g_base->Plus()->PushPublicPartyState();
|
||||
g_base->plus()->PushPublicPartyState();
|
||||
}
|
||||
}
|
||||
|
||||
@ -1230,7 +1230,7 @@ void SceneV1AppMode::SetPublicPartyQueueEnabled(bool enabled) {
|
||||
// Push our new state to the server *ONLY* if public-party is turned on
|
||||
// (wasteful otherwise).
|
||||
if (public_party_enabled_) {
|
||||
g_base->Plus()->PushPublicPartyState();
|
||||
g_base->plus()->PushPublicPartyState();
|
||||
}
|
||||
}
|
||||
|
||||
@ -1244,7 +1244,7 @@ void SceneV1AppMode::SetPublicPartyMaxSize(int count) {
|
||||
// Push our new state to the server *ONLY* if public-party is turned on
|
||||
// (wasteful otherwise).
|
||||
if (public_party_enabled_) {
|
||||
g_base->Plus()->PushPublicPartyState();
|
||||
g_base->plus()->PushPublicPartyState();
|
||||
}
|
||||
}
|
||||
|
||||
@ -1258,7 +1258,7 @@ void SceneV1AppMode::SetPublicPartyName(const std::string& name) {
|
||||
// Push our new state to the server *ONLY* if public-party is turned on
|
||||
// (wasteful otherwise).
|
||||
if (public_party_enabled_) {
|
||||
g_base->Plus()->PushPublicPartyState();
|
||||
g_base->plus()->PushPublicPartyState();
|
||||
}
|
||||
}
|
||||
|
||||
@ -1272,7 +1272,7 @@ void SceneV1AppMode::SetPublicPartyStatsURL(const std::string& url) {
|
||||
// Push our new state to the server *ONLY* if public-party is turned on
|
||||
// (wasteful otherwise).
|
||||
if (public_party_enabled_) {
|
||||
g_base->Plus()->PushPublicPartyState();
|
||||
g_base->plus()->PushPublicPartyState();
|
||||
}
|
||||
}
|
||||
|
||||
@ -1295,7 +1295,7 @@ void SceneV1AppMode::SetPublicPartyPlayerCount(int count) {
|
||||
// Push our new state to the server *ONLY* if public-party is turned on
|
||||
// (wasteful otherwise).
|
||||
if (public_party_enabled_) {
|
||||
g_base->Plus()->PushPublicPartyState();
|
||||
g_base->plus()->PushPublicPartyState();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -243,7 +243,7 @@ auto SceneV1InputDeviceDelegate::GetPublicV1AccountID() const -> std::string {
|
||||
// This default implementation assumes the device is local
|
||||
// so just returns the locally signed in account's public id.
|
||||
|
||||
return g_base->Plus()->GetPublicV1AccountID();
|
||||
return g_base->plus()->GetPublicV1AccountID();
|
||||
}
|
||||
|
||||
auto SceneV1InputDeviceDelegate::GetPlayerProfiles() const -> PyObject* {
|
||||
|
||||
@ -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 = 21025;
|
||||
const int kEngineBuildNumber = 21026;
|
||||
const char* kEngineVersion = "1.7.20";
|
||||
|
||||
auto MonolithicMain(const core::CoreConfig& core_config) -> int {
|
||||
|
||||
@ -2397,7 +2397,7 @@ static auto PyShowAd(PyObject* self, PyObject* args, PyObject* keywds)
|
||||
&on_completion_call_obj, &pass_actually_showed)) {
|
||||
return nullptr;
|
||||
}
|
||||
g_base->Plus()->SetAdCompletionCall(on_completion_call_obj,
|
||||
g_base->plus()->SetAdCompletionCall(on_completion_call_obj,
|
||||
static_cast<bool>(pass_actually_showed));
|
||||
|
||||
// In cases where we support ads, store our callback and kick one off.
|
||||
@ -2407,7 +2407,7 @@ static auto PyShowAd(PyObject* self, PyObject* args, PyObject* keywds)
|
||||
if (g_core->platform->GetHasAds()) {
|
||||
g_core->platform->ShowAd(purpose);
|
||||
} else {
|
||||
g_base->Plus()->PushAdViewComplete(purpose, false);
|
||||
g_base->plus()->PushAdViewComplete(purpose, false);
|
||||
}
|
||||
Py_RETURN_NONE;
|
||||
BA_PYTHON_CATCH;
|
||||
@ -2442,7 +2442,7 @@ static auto PyShowAd2(PyObject* self, PyObject* args, PyObject* keywds)
|
||||
&on_completion_call_obj, &pass_actually_showed)) {
|
||||
return nullptr;
|
||||
}
|
||||
g_base->Plus()->SetAdCompletionCall(on_completion_call_obj,
|
||||
g_base->plus()->SetAdCompletionCall(on_completion_call_obj,
|
||||
static_cast<bool>(pass_actually_showed));
|
||||
|
||||
// In cases where we support ads, store our callback and kick one off.
|
||||
@ -2452,7 +2452,7 @@ static auto PyShowAd2(PyObject* self, PyObject* args, PyObject* keywds)
|
||||
if (g_core->platform->GetHasAds()) {
|
||||
g_core->platform->ShowAd(purpose);
|
||||
} else {
|
||||
g_base->Plus()->PushAdViewComplete(purpose, false);
|
||||
g_base->plus()->PushAdViewComplete(purpose, false);
|
||||
}
|
||||
Py_RETURN_NONE;
|
||||
BA_PYTHON_CATCH;
|
||||
|
||||
@ -3,6 +3,7 @@
|
||||
#include "ballistica/ui_v1/ui_v1.h"
|
||||
|
||||
#include "ballistica/ui_v1/python/ui_v1_python.h"
|
||||
#include "ballistica/ui_v1/support/root_ui.h"
|
||||
|
||||
namespace ballistica::ui_v1 {
|
||||
|
||||
@ -44,8 +45,9 @@ void UIV1FeatureSet::OnModuleExec(PyObject* module) {
|
||||
assert(g_base == nullptr); // Should be getting set once here.
|
||||
g_base = base::BaseFeatureSet::Import();
|
||||
|
||||
// Let base know that we exist.
|
||||
base::g_ui_v1_soft = g_ui_v1;
|
||||
// Let base know we exist.
|
||||
// (save it the trouble of trying to load us if it uses us passively).
|
||||
g_base->set_ui_v1(g_ui_v1);
|
||||
|
||||
g_core->BootLog("_bauiv1 exec end");
|
||||
}
|
||||
@ -67,4 +69,5 @@ void UIV1FeatureSet::DoQuitWindow() {
|
||||
g_ui_v1->python->objs().Get(ui_v1::UIV1Python::ObjID::kQuitWindowCall).Call();
|
||||
}
|
||||
|
||||
RootUI* UIV1FeatureSet::NewRootUI() { return new RootUI(); }
|
||||
} // namespace ballistica::ui_v1
|
||||
|
||||
@ -57,6 +57,7 @@ class UIV1FeatureSet : public FeatureSetNativeComponent,
|
||||
void DoHandleDeviceMenuPress(base::InputDevice* device) override;
|
||||
void DoShowURL(const std::string& url) override;
|
||||
void DoQuitWindow() override;
|
||||
auto NewRootUI() -> ui_v1::RootUI* override;
|
||||
|
||||
UIV1Python* const python;
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user