diff --git a/.efrocachemap b/.efrocachemap
index 5c6393cb..cb814059 100644
--- a/.efrocachemap
+++ b/.efrocachemap
@@ -3995,50 +3995,50 @@
"assets/src/ba_data/python/ba/_generated/__init__.py": "https://files.ballistica.net/cache/ba1/ee/e8/cad05aa531c7faf7ff7b96db7f6e",
"assets/src/ba_data/python/ba/_generated/enums.py": "https://files.ballistica.net/cache/ba1/b2/e5/0ee0561e16257a32830645239f34",
"ballisticacore-windows/Generic/BallisticaCore.ico": "https://files.ballistica.net/cache/ba1/89/c0/e32c7d2a35dc9aef57cc73b0911a",
- "build/prefab/full/linux_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/98/2c/3a57b1e26899a8ce72deddfedc2d",
- "build/prefab/full/linux_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/65/ae/a6e93b58ec3db43bdc9141ff2292",
- "build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/16/1e/f5561596304ba3f4c5e1e689a417",
- "build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/1b/c6/8c7e33ce20abfdb5400fac24d912",
- "build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/2e/40/e7a558c524f184060a1a285a3bd4",
- "build/prefab/full/linux_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/fb/c1/e0a9dda43fac36bab931339e0549",
- "build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/44/cd/55425e1bd9a2355f5f26d103247e",
- "build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/5c/80/d897514c88cb34e558964c3fd84e",
- "build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/ff/3f/5f6d6b1ef938fcf5dab41c9bf6b4",
- "build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/c3/26/28015b10cee6fa0e5b4f5a8cf74c",
- "build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/52/45/fb6e9c424f5b02fe1282e4750ba1",
- "build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/8a/ec/5277ccd466bba1f9e2787dca8702",
- "build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/c3/43/0b694331a64171c28b3f7bf3070d",
- "build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/77/e3/02852c073ca65312a31423bb9ac9",
- "build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/72/56/abde9450dcf0d34fab2e51c37f18",
- "build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/e7/6d/508a7e7eb92ef5893591d1bc1705",
- "build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/a4/6c/0a43b4165e225c625db50225ea88",
- "build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/30/5c/49531bd06432ea2468a2a8d8cad3",
- "build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/eb/a5/732bdadc7d22a861f0f395774069",
- "build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/e8/7b/7f577295652610d105ddcb65ea38",
- "build/prefab/lib/linux_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/a4/3e/9436a48d22a818f5c38ec6c79662",
- "build/prefab/lib/linux_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/5e/0f/f4f6f8a2379f03ac45d475c10d69",
- "build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/6f/59/cf17fc32ed37c901d7ef5f838918",
- "build/prefab/lib/linux_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/05/a3/21155690a20d59ddc49388bf2dc2",
- "build/prefab/lib/linux_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/a9/ba/501984f66a889f1482856e515fb2",
- "build/prefab/lib/linux_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/77/d6/ace05e23b2b241dcadec1aba7253",
- "build/prefab/lib/linux_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/47/f6/3019e4ef93ac786057a77f3fff1d",
- "build/prefab/lib/linux_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/cd/dd/47d65260ca9c04eda20adccd6f71",
- "build/prefab/lib/mac_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/24/6e/a05c396868c18e8c66ef52b49166",
- "build/prefab/lib/mac_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/b0/8e/e14993bad63ef92ba5ccb532dbb4",
- "build/prefab/lib/mac_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/c5/39/75d3dde444ab63aa2c1d49b212f8",
- "build/prefab/lib/mac_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/0f/92/8630636fbcdbeee3c95660342639",
- "build/prefab/lib/mac_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/7b/5f/6f8a0d6cd233aae4b7d394f3dc9e",
- "build/prefab/lib/mac_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/fb/f2/759a510b82faeb4ab5acc2c3052b",
- "build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/84/e7/553f60e4603414a35598284c13d6",
- "build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d9/1c/411f47bc58390560f347ece26172",
- "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/4e/27/fac43344cb6ad625ee6b8f4eb025",
- "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/64/71/fd8c80764edb5c8b3c3e9302283c",
- "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/2f/9c/100bc1657b231fad168f36d2b5f9",
- "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/4d/91/c51ecec26a14c86ac04ac864b92e",
- "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/13/3b/476da858cec08be51883372cfc4f",
- "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/58/ed/9738b4be3c927e807cfaa38a7df8",
- "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/97/e9/a10d1fc18dd3360dfad40624efd5",
- "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/38/61/9da5f4158128bb2330645f44ae8c",
+ "build/prefab/full/linux_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/e6/fa/a6d850360d1a7cbf35ceb764ad32",
+ "build/prefab/full/linux_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/58/f9/1c7086b632a9ebdb5ba19dfab3cf",
+ "build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/05/53/9039866ebcd2dd69645fcd872cd9",
+ "build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/62/b5/79f78facfdd4cd86dc1d4767cc15",
+ "build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/3f/d4/e6c1a8f06f1d23eee27fb7164839",
+ "build/prefab/full/linux_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/42/d1/268f4cebbbab626f668e22d08689",
+ "build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/29/9f/cd098d7d87936893eafcd1cd52c0",
+ "build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/35/32/0e9e8d112b8aa02e787fd72ca2e6",
+ "build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/da/92/be9c4085ed3fe8cb8aeb6dd4b6b8",
+ "build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/6a/65/3a80fd6a0594d157b8ab92883b2f",
+ "build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/ba/39/be2b8f7b86feebde32147640de7a",
+ "build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/92/ad/ba0c7c1286337c1837d018fe9320",
+ "build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/a5/09/f4d4da0f458f26fb551f97a321c4",
+ "build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/b4/26/a6bc39c9413bc1d12d0d4c6a14d8",
+ "build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/be/f0/b0864fb2909027994f99862af75c",
+ "build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/25/0b/10f2197f805915c0124dd0948975",
+ "build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/d5/fc/bd1594788c70e4a1c217247c1fbb",
+ "build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/98/b2/b549c884954266dad836090d53ca",
+ "build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/33/b3/9ea1255d8a81a20b7cc400f0b9c0",
+ "build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/15/f1/bc11435032c10e5d4f60bb6cb951",
+ "build/prefab/lib/linux_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/ae/65/9f762ac4a1c07bbc85714f4ff487",
+ "build/prefab/lib/linux_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/60/12/7d0d2c7fa57705f26f9ee25f5eb7",
+ "build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/88/89/8afc89527d34b8b32d792b1768cc",
+ "build/prefab/lib/linux_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/00/3b/26438d3e877a2a5b30ff0622d1d9",
+ "build/prefab/lib/linux_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/54/37/ed1a28f6d2f8801939c3af3f2cbe",
+ "build/prefab/lib/linux_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/84/c0/33d97960b9bbb74f3764ddfb5510",
+ "build/prefab/lib/linux_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/8b/2f/dd23665f6b590f0d1392634d58fc",
+ "build/prefab/lib/linux_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/54/5d/2a9fbe5f0011bfc45e560f56376e",
+ "build/prefab/lib/mac_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/85/08/152e657b8ed6917233ecabd88813",
+ "build/prefab/lib/mac_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/fa/5c/16405030ec49d878d8b6de06c665",
+ "build/prefab/lib/mac_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/ec/8e/e320531f0d1f280afdb841c85667",
+ "build/prefab/lib/mac_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/4c/14/536c47d64624acdb36ccc393ecf4",
+ "build/prefab/lib/mac_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/fe/db/cf274ff81ccc70090fac58bdbdda",
+ "build/prefab/lib/mac_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d0/cc/dd5234f21a502657aeb042440f49",
+ "build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/8e/69/d9407dd92b1397548cd274c16b5f",
+ "build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/df/83/0a461388cf1b14a7e5b8356af40f",
+ "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/42/b4/3456304a0c61e7ea54de0c714b64",
+ "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/00/cf/15cff772100169a8e17eb1e9420f",
+ "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/08/0a/3c1628d8387d54ac1afc3b946662",
+ "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/3f/d3/e6faece149393d0933f4bdc01989",
+ "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/f8/3e/266e72c426e172f39f7808931850",
+ "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/20/e5/cf23928643af4440a129b6b05ce0",
+ "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/d8/a1/ce2de181c40cad598c6f41ee50e9",
+ "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/6f/74/a733036d25bf2a4ca529b37c4dce",
"src/ballistica/generated/python_embedded/binding.inc": "https://files.ballistica.net/cache/ba1/7d/3e/229a581cb2454ed856f1d8b564a7",
"src/ballistica/generated/python_embedded/bootstrap.inc": "https://files.ballistica.net/cache/ba1/98/12/571b2160d69d42580e8f31fa6a8d"
}
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3d40e5f0..2304e60c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,4 @@
-### 1.7.7 (build 20741, api 7, 2022-09-02)
+### 1.7.7 (build 20746, api 7, 2022-09-03)
- Added `ba.app.meta.load_exported_classes()` for loading classes discovered by the meta subsystem cleanly in a background thread.
- Improved logging of missing playlist game types.
- Some ba.Lstr functionality can now be used in background threads.
diff --git a/assets/src/ba_data/python/._ba_sources_hash b/assets/src/ba_data/python/._ba_sources_hash
index a56118c4..c14ba9b2 100644
--- a/assets/src/ba_data/python/._ba_sources_hash
+++ b/assets/src/ba_data/python/._ba_sources_hash
@@ -1 +1 @@
-121748926490457154634465746862153767685
\ No newline at end of file
+58669269684775875412740144262313315598
\ No newline at end of file
diff --git a/assets/src/ba_data/python/ba/_bootstrap.py b/assets/src/ba_data/python/ba/_bootstrap.py
index 5e0f9b46..870d36bf 100644
--- a/assets/src/ba_data/python/ba/_bootstrap.py
+++ b/assets/src/ba_data/python/ba/_bootstrap.py
@@ -32,7 +32,7 @@ def bootstrap() -> None:
# Give a soft warning if we're being used with a different binary
# version than we expect.
- expected_build = 20741
+ expected_build = 20746
running_build: int = env['build_number']
if running_build != expected_build:
print(
diff --git a/ballisticacore-cmake/CMakeLists.txt b/ballisticacore-cmake/CMakeLists.txt
index f93aa0ce..c360dfc9 100644
--- a/ballisticacore-cmake/CMakeLists.txt
+++ b/ballisticacore-cmake/CMakeLists.txt
@@ -457,6 +457,7 @@ add_executable(ballisticacore
${BA_SRC_ROOT}/ballistica/input/remote_app.h
${BA_SRC_ROOT}/ballistica/input/std_input_module.cc
${BA_SRC_ROOT}/ballistica/input/std_input_module.h
+ ${BA_SRC_ROOT}/ballistica/internal/internal.h
${BA_SRC_ROOT}/ballistica/math/matrix44f.cc
${BA_SRC_ROOT}/ballistica/math/matrix44f.h
${BA_SRC_ROOT}/ballistica/math/point2d.h
diff --git a/ballisticacore-windows/Generic/BallisticaCoreGeneric.vcxproj b/ballisticacore-windows/Generic/BallisticaCoreGeneric.vcxproj
index 541493f4..b3321fa3 100644
--- a/ballisticacore-windows/Generic/BallisticaCoreGeneric.vcxproj
+++ b/ballisticacore-windows/Generic/BallisticaCoreGeneric.vcxproj
@@ -448,6 +448,7 @@
+
diff --git a/ballisticacore-windows/Generic/BallisticaCoreGeneric.vcxproj.filters b/ballisticacore-windows/Generic/BallisticaCoreGeneric.vcxproj.filters
index c799e77f..238bfeae 100644
--- a/ballisticacore-windows/Generic/BallisticaCoreGeneric.vcxproj.filters
+++ b/ballisticacore-windows/Generic/BallisticaCoreGeneric.vcxproj.filters
@@ -778,6 +778,9 @@
ballistica\input
+
+ ballistica\internal
+
ballistica\math
@@ -1667,6 +1670,7 @@
+
diff --git a/ballisticacore-windows/Headless/BallisticaCoreHeadless.vcxproj b/ballisticacore-windows/Headless/BallisticaCoreHeadless.vcxproj
index 2d56df4c..7be524c3 100644
--- a/ballisticacore-windows/Headless/BallisticaCoreHeadless.vcxproj
+++ b/ballisticacore-windows/Headless/BallisticaCoreHeadless.vcxproj
@@ -443,6 +443,7 @@
+
diff --git a/ballisticacore-windows/Headless/BallisticaCoreHeadless.vcxproj.filters b/ballisticacore-windows/Headless/BallisticaCoreHeadless.vcxproj.filters
index c799e77f..238bfeae 100644
--- a/ballisticacore-windows/Headless/BallisticaCoreHeadless.vcxproj.filters
+++ b/ballisticacore-windows/Headless/BallisticaCoreHeadless.vcxproj.filters
@@ -778,6 +778,9 @@
ballistica\input
+
+ ballistica\internal
+
ballistica\math
@@ -1667,6 +1670,7 @@
+
diff --git a/src/ballistica/app/vr_app.cc b/src/ballistica/app/vr_app.cc
index d305f143..25de8698 100644
--- a/src/ballistica/app/vr_app.cc
+++ b/src/ballistica/app/vr_app.cc
@@ -11,7 +11,8 @@ namespace ballistica {
VRApp::VRApp(Thread* thread) : App(thread) {}
-void VRApp::PushVRSimpleRemoteStateCall(const VRSimpleRemoteState& state) {
+auto VRApp::PushVRSimpleRemoteStateCall(const VRSimpleRemoteState& state)
+ -> void {
PushCall([this, state] {
// Convert this to a full hands state, adding in some simple elbow
// positioning of our own and left/right.
@@ -34,7 +35,7 @@ void VRApp::PushVRSimpleRemoteStateCall(const VRSimpleRemoteState& state) {
});
}
-void VRApp::VRSetDrawDimensions(int w, int h) {
+auto VRApp::VRSetDrawDimensions(int w, int h) -> void {
g_graphics_server->VideoResize(w, h);
}
@@ -55,7 +56,7 @@ void VRApp::VRPreDraw() {
}
}
-void VRApp::VRPostDraw() {
+auto VRApp::VRPostDraw() -> void {
assert(InMainThread());
if (!g_graphics_server || !g_graphics_server->renderer()) {
return;
@@ -67,15 +68,15 @@ void VRApp::VRPostDraw() {
RunRenderUpkeepCycle();
}
-void VRApp::VRSetHead(float tx, float ty, float tz, float yaw, float pitch,
- float roll) {
+auto VRApp::VRSetHead(float tx, float ty, float tz, float yaw, float pitch,
+ float roll) -> void {
assert(InMainThread());
Renderer* renderer = g_graphics_server->renderer();
if (renderer == nullptr) return;
renderer->VRSetHead(tx, ty, tz, yaw, pitch, roll);
}
-void VRApp::VRSetHands(const VRHandsState& state) {
+auto VRApp::VRSetHands(const VRHandsState& state) -> void {
assert(InMainThread());
// Pass this along to the renderer (in this same thread) for drawing
@@ -88,10 +89,10 @@ void VRApp::VRSetHands(const VRHandsState& state) {
g_game->PushVRHandsState(state);
}
-void VRApp::VRDrawEye(int eye, float yaw, float pitch, float roll, float tan_l,
+auto VRApp::VRDrawEye(int eye, float yaw, float pitch, float roll, float tan_l,
float tan_r, float tan_b, float tan_t, float eye_x,
- float eye_y, float eye_z, int viewport_x,
- int viewport_y) {
+ float eye_y, float eye_z, int viewport_x, int viewport_y)
+ -> void {
if (!g_graphics_server || !g_graphics_server->renderer()) {
return;
}
diff --git a/src/ballistica/app/vr_app.h b/src/ballistica/app/vr_app.h
index ffa0b694..2b1a7111 100644
--- a/src/ballistica/app/vr_app.h
+++ b/src/ballistica/app/vr_app.h
@@ -20,23 +20,24 @@ class VRApp : public App {
};
/// Return g_app as a VRApp. (assumes it actually is one).
- static VRApp* get() {
+ static auto get() -> VRApp* {
assert(g_app != nullptr);
assert(dynamic_cast(g_app) == static_cast(g_app));
return static_cast(g_app);
}
explicit VRApp(Thread* thread);
- void PushVRSimpleRemoteStateCall(const VRSimpleRemoteState& state);
- void VRSetDrawDimensions(int w, int h);
- void VRPreDraw();
- void VRPostDraw();
- void VRSetHead(float tx, float ty, float tz, float yaw, float pitch,
- float roll);
- void VRSetHands(const VRHandsState& state);
- void VRDrawEye(int eye, float yaw, float pitch, float roll, float tan_l,
+ auto PushVRSimpleRemoteStateCall(const VRSimpleRemoteState& state) -> void;
+ auto VRSetDrawDimensions(int w, int h) -> void;
+ auto VRPreDraw() -> void;
+ auto VRPostDraw() -> void;
+ auto VRSetHead(float tx, float ty, float tz, float yaw, float pitch,
+ float roll) -> void;
+ auto VRSetHands(const VRHandsState& state) -> void;
+ auto VRDrawEye(int eye, float yaw, float pitch, float roll, float tan_l,
float tan_r, float tan_b, float tan_t, float eye_x,
- float eye_y, float eye_z, int viewport_x, int viewport_y);
+ float eye_y, float eye_z, int viewport_x, int viewport_y)
+ -> void;
private:
FrameDef* vr_render_frame_def_{};
diff --git a/src/ballistica/ballistica.cc b/src/ballistica/ballistica.cc
index 65d4544b..1ecd65cf 100644
--- a/src/ballistica/ballistica.cc
+++ b/src/ballistica/ballistica.cc
@@ -22,7 +22,7 @@
namespace ballistica {
// These are set automatically via script; don't modify them here.
-const int kAppBuildNumber = 20741;
+const int kAppBuildNumber = 20746;
const char* kAppVersion = "1.7.7";
// Our standalone globals.
@@ -269,7 +269,7 @@ auto InNetworkWriteThread() -> bool {
&& g_network_write_module->thread()->IsCurrent());
}
-void Log(const std::string& msg, bool to_stdout, bool to_server) {
+auto Log(const std::string& msg, bool to_stdout, bool to_server) -> void {
Logging::Log(msg, to_stdout, to_server);
}
@@ -283,7 +283,7 @@ void ScreenMessage(const std::string& s, const Vector3f& color) {
}
}
-void ScreenMessage(const std::string& msg) {
+auto ScreenMessage(const std::string& msg) -> void {
ScreenMessage(msg, {1.0f, 1.0f, 1.0f});
}
diff --git a/src/ballistica/game/connection/connection_to_client.cc b/src/ballistica/game/connection/connection_to_client.cc
index abc59536..c67a7325 100644
--- a/src/ballistica/game/connection/connection_to_client.cc
+++ b/src/ballistica/game/connection/connection_to_client.cc
@@ -2,7 +2,6 @@
#include "ballistica/game/connection/connection_to_client.h"
-// #include "ballistica/app/app_internal.h"
#include "ballistica/audio/audio.h"
#include "ballistica/game/client_controller_interface.h"
#include "ballistica/game/connection/connection_set.h"
diff --git a/src/ballistica/internal/internal.h b/src/ballistica/internal/internal.h
new file mode 100644
index 00000000..2b9661bb
--- /dev/null
+++ b/src/ballistica/internal/internal.h
@@ -0,0 +1,18 @@
+// Released under the MIT License. See LICENSE for details.
+
+#ifndef BALLISTICA_INTERNAL_INTERNAL_H_
+#define BALLISTICA_INTERNAL_INTERNAL_H_
+
+namespace ballistica {
+
+/// Our high level app interface module.
+/// It runs in the main thread and is what platform wrappers
+/// should primarily interact with.
+class AppInternalBase {
+ public:
+ virtual ~AppInternalBase() {}
+};
+
+} // namespace ballistica
+
+#endif // BALLISTICA_INTERNAL_INTERNAL_H_
diff --git a/src/ballistica/python/python.cc b/src/ballistica/python/python.cc
index e01a7dc0..2d73f28a 100644
--- a/src/ballistica/python/python.cc
+++ b/src/ballistica/python/python.cc
@@ -946,6 +946,7 @@ void Python::Reset(bool do_init) {
BA_PRECONDITION(m = PyImport_AddModule("__main__"));
BA_PRECONDITION(main_dict_ = PyModule_GetDict(m));
+ // Make sure we're running the Python version we require.
const char* ver = Py_GetVersion();
if (strncmp(ver, "3.10", 4) != 0) {
throw Exception("We require Python 3.10.x; instead found "
@@ -960,7 +961,7 @@ void Python::Reset(bool do_init) {
// Run a few core bootstrappy things first:
// - get stdout/stderr redirection up so we can intercept python output
// - add our user and system script dirs to python path
- // - import and instantiate our app-state class
+ // - create the ba.app instance.
#include "ballistica/generated/python_embedded/bootstrap.inc"
PyObject* result =
@@ -975,7 +976,7 @@ void Python::Reset(bool do_init) {
}
Py_DECREF(result);
- // Import and grab all the Python stuff we use.
+ // Import and grab all the Python stuff we use from C++.
#include "ballistica/generated/python_embedded/binding.inc"
AppInternalPythonPostInit();
diff --git a/src/ballistica/python/python.h b/src/ballistica/python/python.h
index 967f1803..bd3e82a1 100644
--- a/src/ballistica/python/python.h
+++ b/src/ballistica/python/python.h
@@ -35,7 +35,7 @@ class Python {
static auto current_label() -> const char* { return current_label_; }
private:
- const char* prev_label_ = nullptr;
+ const char* prev_label_{};
static const char* current_label_;
BA_DISALLOW_CLASS_COPIES(ScopedCallLabel);
};
@@ -63,7 +63,7 @@ class Python {
static auto HaveGIL() -> bool;
/// Attempt to print the python stack trace.
- static void PrintStackTrace();
+ static auto PrintStackTrace() -> void;
/// Pass any PyObject* (including nullptr) to get a readable string
/// (basically equivalent of str(foo)).
@@ -75,14 +75,14 @@ class Python {
auto ValidatedPackageAssetName(PyObject* package, const char* name)
-> std::string;
- static void LogContextForCallableLabel(const char* label);
- static void LogContextEmpty();
- static void LogContextAuto();
- static void LogContextNonLogicThread();
+ static auto LogContextForCallableLabel(const char* label) -> void;
+ static auto LogContextEmpty() -> void;
+ static auto LogContextAuto() -> void;
+ static auto LogContextNonLogicThread() -> void;
Python();
~Python();
- void Reset(bool init = true);
+ auto Reset(bool init = true) -> void;
/// Add classes to the newly created ba module.
static auto InitModuleClasses(PyObject* module) -> void;
@@ -93,19 +93,19 @@ class Python {
const std::string& value_name) -> int;
auto GetControllerFloatValue(InputDevice* input_device,
const std::string& value_name) -> float;
- void HandleDeviceMenuPress(InputDevice* input_device);
+ auto HandleDeviceMenuPress(InputDevice* input_device) -> void;
auto GetLastPlayerNameFromInputDevice(InputDevice* input_device)
-> std::string;
- void AcquireGIL();
- void ReleaseGIL();
+ auto AcquireGIL() -> void;
+ auto ReleaseGIL() -> void;
- void LaunchStringEdit(TextWidget* w);
- void CaptureGamePadInput(PyObject* obj);
- void ReleaseGamePadInput();
- void CaptureKeyboardInput(PyObject* obj);
- void ReleaseKeyboardInput();
- void HandleFriendScoresCB(const FriendScoreSet& ss);
- void IssueCallInLogicThreadWarning(PyObject* call);
+ auto LaunchStringEdit(TextWidget* w) -> void;
+ auto CaptureGamePadInput(PyObject* obj) -> void;
+ auto ReleaseGamePadInput() -> void;
+ auto CaptureKeyboardInput(PyObject* obj) -> void;
+ auto ReleaseKeyboardInput() -> void;
+ auto HandleFriendScoresCB(const FriendScoreSet& ss) -> void;
+ auto IssueCallInLogicThreadWarning(PyObject* call) -> void;
/// Borrowed from python's source code: used in overriding of objects' dir()
/// results.
@@ -125,24 +125,24 @@ class Python {
auto FilterChatMessage(std::string* message, int client_id) -> bool;
/// Pass a chat message along to the python UI layer for handling..
- void HandleLocalChatMessage(const std::string& message);
+ auto HandleLocalChatMessage(const std::string& message) -> void;
- void DispatchScoresToBeatResponse(
+ auto DispatchScoresToBeatResponse(
bool success, const std::list& scores_to_beat,
- void* PyCallback);
+ void* PyCallback) -> void;
/// Pop up an in-game window to show a url (NOT in a browser).
- void ShowURL(const std::string& url);
+ auto ShowURL(const std::string& url) -> void;
- void AddCleanFrameCommand(const Object::Ref& c);
- void RunCleanFrameCommands();
+ auto AddCleanFrameCommand(const Object::Ref& c) -> void;
+ auto RunCleanFrameCommands() -> void;
/// Return a minimal filename/position string such as 'foo.py:201' based
- /// on the python stack state. This shouldn't be too expensive to fetch and
+ /// on the Python stack state. This shouldn't be too expensive to fetch and
/// is useful as an object identifier/etc.
static auto GetPythonFileLocation(bool pretty = true) -> std::string;
- void set_env_obj(PyObject* obj) { env_ = obj; }
+ auto set_env_obj(PyObject* obj) -> void { env_ = obj; }
auto env_obj() const -> PyObject* {
assert(env_);
return env_;
@@ -151,7 +151,7 @@ class Python {
assert(main_dict_);
return main_dict_;
}
- void PlayMusic(const std::string& music_type, bool continuous);
+ auto PlayMusic(const std::string& music_type, bool continuous) -> void;
// Fetch raw values from the config dict. The default value is returned if
// the requested value is not present or not of a compatible type.
@@ -166,14 +166,14 @@ class Python {
-> std::optional;
auto GetRawConfigValue(const char* name, int default_value) -> int;
auto GetRawConfigValue(const char* name, bool default_value) -> bool;
- void SetRawConfigValue(const char* name, float value);
+ auto SetRawConfigValue(const char* name, float value) -> void;
- void RunDeepLink(const std::string& url);
+ auto RunDeepLink(const std::string& url) -> void;
auto GetResource(const char* key, const char* fallback_resource = nullptr,
const char* fallback_value = nullptr) -> std::string;
auto GetTranslation(const char* category, const char* s) -> std::string;
- // For checking and pulling values out of python objects.
+ // For checking and pulling values out of Python objects.
// These will all throw Exceptions on errors.
static auto GetPyString(PyObject* o) -> std::string;
static auto GetPyInt64(PyObject* o) -> int64_t;
@@ -233,14 +233,15 @@ class Python {
static auto GetPyEnum_InputType(PyObject* obj) -> InputType;
static auto GetNodeAttr(Node* node, const char* attribute_name) -> PyObject*;
- static void SetNodeAttr(Node* node, const char* attr_name,
- PyObject* value_obj);
+ static auto SetNodeAttr(Node* node, const char* attr_name,
+ PyObject* value_obj) -> void;
/// Set Python exception from C++ Exception.
- static void SetPythonException(const Exception& exc);
+ static auto SetPythonException(const Exception& exc) -> void;
- static void DoBuildNodeMessage(PyObject* args, int arg_offset,
- Buffer* b, PyObject** user_message_obj);
+ static auto DoBuildNodeMessage(PyObject* args, int arg_offset,
+ Buffer* b, PyObject** user_message_obj)
+ -> void;
auto DoNewNode(PyObject* args, PyObject* keywds) -> Node*;
/// Identifiers for specific Python objects we grab references to for easy
@@ -382,40 +383,41 @@ class Python {
/// Push a call to a preset obj to the game thread
/// (will be run in the UI context).
- void PushObjCall(ObjID obj);
+ auto PushObjCall(ObjID obj) -> void;
/// Push a call with a single string arg.
- void PushObjCall(ObjID obj, const std::string& arg);
+ auto PushObjCall(ObjID obj, const std::string& arg) -> void;
- /// Register python location and returns true if it has not
+ /// Register Python location and returns true if it has not
/// yet been registered. (for print-once type stuff).
auto DoOnce() -> bool;
/// Check values passed to timer functions; triggers warnings
/// for cases that look like they're passing milliseconds as seconds
/// or vice versa... (can remove this once things are settled in).
- void TimeFormatCheck(TimeFormat time_format, PyObject* length_obj);
+ auto TimeFormatCheck(TimeFormat time_format, PyObject* length_obj) -> void;
private:
/// Check/set debug related initialization.
- void SetupInterpreterDebugState();
+ auto SetupInterpreterDebugState() -> void;
/// Set up system paths if needed (for embedded builds).
- void SetupPythonHome();
+ auto SetupPythonHome() -> void;
/// Set the value for a named object.
- void StoreObj(ObjID id, PyObject* pyobj, bool incref = false);
+ auto StoreObj(ObjID id, PyObject* pyobj, bool incref = false) -> void;
/// Set the value for a named object and verify that it is a callable.
- void StoreObjCallable(ObjID id, PyObject* pyobj, bool incref = false);
+ auto StoreObjCallable(ObjID id, PyObject* pyobj, bool incref = false) -> void;
/// Set the value for a named object to the result of a Python expression.
- void StoreObj(ObjID id, const char* expression, PyObject* context = nullptr);
+ auto StoreObj(ObjID id, const char* expression, PyObject* context = nullptr)
+ -> void;
/// Set the value for a named object to the result of a Python expression
/// and verify that it is callable.
- void StoreObjCallable(ObjID id, const char* expression,
- PyObject* context = nullptr);
+ auto StoreObjCallable(ObjID id, const char* expression,
+ PyObject* context = nullptr) -> void;
std::set do_once_locations_;
PythonRef objs_[static_cast(ObjID::kLast)];
diff --git a/tools/batools/project.py b/tools/batools/project.py
index 8b7dd96b..0bd71885 100755
--- a/tools/batools/project.py
+++ b/tools/batools/project.py
@@ -618,7 +618,7 @@ class Updater:
# Misc sanity checks.
if not self._public:
# Make sure we're set to prod master server.
- with open('src/ballistica/networking/master_server_config.h',
+ with open('src/ballistica/internal/master_server_config.h',
encoding='utf-8') as infile:
msconfig = infile.read()
if ('// V2 Master Server:\n'