diff --git a/.efrocachemap b/.efrocachemap
index ab9c2b12..e5cb494f 100644
--- a/.efrocachemap
+++ b/.efrocachemap
@@ -4056,50 +4056,50 @@
"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": "3c2b2b37faa0c827e7a515dba7a8fa25",
- "build/prefab/full/linux_arm64_gui/release/ballisticakit": "ef802531bbf82293b0ed52083d945cdc",
- "build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "508cc12c611316ed5276ee7d926e7b70",
- "build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "801c672cc7836c94ed090f3f11ad90a3",
- "build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "438173f578d3e0b407276434e1ba37a6",
- "build/prefab/full/linux_x86_64_gui/release/ballisticakit": "37e256cb735133aae96ba51cb06d01a6",
- "build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "23bfa2b732e6a703875e14572c3fd1eb",
- "build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "68f0f68d32d272a90080fd7746f84b47",
- "build/prefab/full/mac_arm64_gui/debug/ballisticakit": "a164e99217a28cd26e322d6413cf64cf",
- "build/prefab/full/mac_arm64_gui/release/ballisticakit": "c83d961a17c8c28da7c7eca5192a6314",
- "build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "9eefdf54ed08d80ef2226f14129e000a",
- "build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "a4db7791ab708bc197cf5bf7ecc22224",
- "build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "728633cfb493d99846955c08b85bec16",
- "build/prefab/full/mac_x86_64_gui/release/ballisticakit": "efca925b71252880a692741d38d26519",
- "build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "a4bf11f9b1d0cf394fc7606928c02cf1",
- "build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "b40f16dbc3b6c98ca61ef22391ab9a67",
- "build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "d2ac3dea823f0ed27ab3bd45b2af6eb1",
- "build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "8a34d3924ae61f01003ebf8ea7166f91",
- "build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "7ee211897490829f29ba1defd952400f",
- "build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "144670c1e891b8378a85e8d408c0d7ce",
- "build/prefab/lib/linux_arm64_gui/debug/libballisticaplus.a": "5156f353592c4211f25ee238afe038fc",
- "build/prefab/lib/linux_arm64_gui/release/libballisticaplus.a": "dd16f8d0f18ef126d051c5cd725b1568",
- "build/prefab/lib/linux_arm64_server/debug/libballisticaplus.a": "5156f353592c4211f25ee238afe038fc",
- "build/prefab/lib/linux_arm64_server/release/libballisticaplus.a": "dd16f8d0f18ef126d051c5cd725b1568",
- "build/prefab/lib/linux_x86_64_gui/debug/libballisticaplus.a": "d81a643b59391309b04187879cd045aa",
- "build/prefab/lib/linux_x86_64_gui/release/libballisticaplus.a": "050b8028c1b14c314dc44ad33bf66cb7",
- "build/prefab/lib/linux_x86_64_server/debug/libballisticaplus.a": "d81a643b59391309b04187879cd045aa",
- "build/prefab/lib/linux_x86_64_server/release/libballisticaplus.a": "050b8028c1b14c314dc44ad33bf66cb7",
- "build/prefab/lib/mac_arm64_gui/debug/libballisticaplus.a": "19dd80f1ff879e120b89fb94767418a4",
- "build/prefab/lib/mac_arm64_gui/release/libballisticaplus.a": "81dd9ab9d64e8f3a038b5942a90c7ec5",
- "build/prefab/lib/mac_arm64_server/debug/libballisticaplus.a": "19dd80f1ff879e120b89fb94767418a4",
- "build/prefab/lib/mac_arm64_server/release/libballisticaplus.a": "81dd9ab9d64e8f3a038b5942a90c7ec5",
- "build/prefab/lib/mac_x86_64_gui/debug/libballisticaplus.a": "fa8a5b2de21d629d7542b0c7335ffdf0",
- "build/prefab/lib/mac_x86_64_gui/release/libballisticaplus.a": "b4f192949f671e0d20536bfbb04591e3",
- "build/prefab/lib/mac_x86_64_server/debug/libballisticaplus.a": "0f6bd992d92d00526ce8746aee66dc9e",
- "build/prefab/lib/mac_x86_64_server/release/libballisticaplus.a": "b4f192949f671e0d20536bfbb04591e3",
- "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "6bb9e5a8ef46a5ea9040ebc65af567b2",
- "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "ebc29b9a80eb67258093f7ca35a467ff",
- "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "984f0cc74452ae6d597f316615f92165",
- "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "9884ec826b4662d367291945afc0319b",
- "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "211deddf90855ac10fb191370b1a8b9f",
- "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "93d3a7cd4f9ab503d595650ce6c4733d",
- "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "227ad657446b051c5f2cc901d459612e",
- "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "5742a499a4526b460ffcbda7ad163027",
+ "build/prefab/full/linux_arm64_gui/debug/ballisticakit": "c1c0394f8ef67f66f3e687302be1bae5",
+ "build/prefab/full/linux_arm64_gui/release/ballisticakit": "bb034b440d7119e6fdfbbf79e7473f22",
+ "build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "23ead987200b5474e08c0ec0584ffce1",
+ "build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "a5bd9ad61f73c8e9fb595921278deb7b",
+ "build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "e359b657fc29d2e6cbf8d535145630ac",
+ "build/prefab/full/linux_x86_64_gui/release/ballisticakit": "c2f3a37e6a147817265eca40d2cec4ec",
+ "build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "322d96f59ae50524b28825123036677d",
+ "build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "ef808bb9694e6bd7f83a016734c0d80a",
+ "build/prefab/full/mac_arm64_gui/debug/ballisticakit": "ee0beb547c973797c413a46bef1e1c92",
+ "build/prefab/full/mac_arm64_gui/release/ballisticakit": "1048789848f35cff82c7de97422caf76",
+ "build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "741c6a2e23cc1c9fb4ae4d71e3ce353d",
+ "build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "dd2b5da1a59a0ff8bd672feb6fd69da4",
+ "build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "c8fc022822d28cfc489928d9a29e87c4",
+ "build/prefab/full/mac_x86_64_gui/release/ballisticakit": "e1e9d1d6ccbc21dd2a8ea98bc7a0dcf3",
+ "build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "64747b6f0d8416a8a6a730a1d66ea9fb",
+ "build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "2adfbda7c4c22d03736db3dca776b2e9",
+ "build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "e96102ef9e23b611fc359f990429317e",
+ "build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "1e6bb4e9fcdb71ead226351eacaf461b",
+ "build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "c0cf1456214fbd5aeabff60695ce5f82",
+ "build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "d28ed224f9b9e0cad81b3a1b8a722c5c",
+ "build/prefab/lib/linux_arm64_gui/debug/libballisticaplus.a": "757a2a4e9294211fa0018bdc67e0b1c7",
+ "build/prefab/lib/linux_arm64_gui/release/libballisticaplus.a": "48dd3167591df4494852c6c3e9047f1b",
+ "build/prefab/lib/linux_arm64_server/debug/libballisticaplus.a": "757a2a4e9294211fa0018bdc67e0b1c7",
+ "build/prefab/lib/linux_arm64_server/release/libballisticaplus.a": "48dd3167591df4494852c6c3e9047f1b",
+ "build/prefab/lib/linux_x86_64_gui/debug/libballisticaplus.a": "b8f3d468d46917abf4019df92594742c",
+ "build/prefab/lib/linux_x86_64_gui/release/libballisticaplus.a": "9a9e18d3856e343c3ca6ac136a64235a",
+ "build/prefab/lib/linux_x86_64_server/debug/libballisticaplus.a": "b8f3d468d46917abf4019df92594742c",
+ "build/prefab/lib/linux_x86_64_server/release/libballisticaplus.a": "9a9e18d3856e343c3ca6ac136a64235a",
+ "build/prefab/lib/mac_arm64_gui/debug/libballisticaplus.a": "d667b00185c20f91f8a4cfca56291431",
+ "build/prefab/lib/mac_arm64_gui/release/libballisticaplus.a": "f2f9159cd08054e71ed87db479b18d21",
+ "build/prefab/lib/mac_arm64_server/debug/libballisticaplus.a": "d667b00185c20f91f8a4cfca56291431",
+ "build/prefab/lib/mac_arm64_server/release/libballisticaplus.a": "f2f9159cd08054e71ed87db479b18d21",
+ "build/prefab/lib/mac_x86_64_gui/debug/libballisticaplus.a": "c5be9635152219c67b8e15969802b191",
+ "build/prefab/lib/mac_x86_64_gui/release/libballisticaplus.a": "0c0e93911fda8343f06b76a84b2331a3",
+ "build/prefab/lib/mac_x86_64_server/debug/libballisticaplus.a": "8b1daae0ffa7a0de9624c645bd4ad71c",
+ "build/prefab/lib/mac_x86_64_server/release/libballisticaplus.a": "0c0e93911fda8343f06b76a84b2331a3",
+ "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "7a14948fa1f96abeeac83e7d7f21182c",
+ "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "578472bcfa184250aeb490d77bd9d63c",
+ "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "721144d309b981fc9944d127c33bd304",
+ "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "da41b51b970e32b772b3f930c84765d3",
+ "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "7fc9e2da84f6d1787aa9d380d556920a",
+ "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "cc3ee167b8f20861f8b804dd01ba206e",
+ "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "ac826c9913b4f5ac23982ede5d930b97",
+ "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "1457099fc2eed44633b60d0ba6dad9a7",
"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": "9f71f171464dc004dbaab87e9bb4b03b",
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4c7bd3b7..52c7dd26 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,4 @@
-### 1.7.28 (build 21411, api 8, 2023-10-04)
+### 1.7.28 (build 21417, api 8, 2023-10-04)
- Massively cleaned up code related to rendering and window systems (OpenGL,
SDL, etc). This code had been growing into a nasty tangle for 15 years
@@ -98,6 +98,9 @@
- Removed the bits from `babase.app` that were deprecated in 1.7.27. I know that
was only one version ago, but this version has been cooking for a while now.
- Visual Studio projects have been updated to target Visual Studio 2022.
+- Now that all our compilers support it, updating from the C++17 standard to
+ C++20. This will allow a few useful things such as being able to pack 8 bools
+ into 1 byte.
### 1.7.27 (build 21282, api 8, 2023-08-30)
diff --git a/ballisticakit-cmake/CMakeLists.txt b/ballisticakit-cmake/CMakeLists.txt
index ba1dec31..7aa1ccc3 100644
--- a/ballisticakit-cmake/CMakeLists.txt
+++ b/ballisticakit-cmake/CMakeLists.txt
@@ -5,8 +5,8 @@ include(CheckIncludeFile)
option(HEADLESS "build headless server" OFF)
option(TEST_BUILD "include testing features" OFF)
-# Requiring minimum of C++17 currently.
-set(CMAKE_CXX_STANDARD 17)
+# Requiring minimum of C++20 currently.
+set(CMAKE_CXX_STANDARD 20)
if (APPLE)
# Seems as of Mojave we need to explicitly pull in homebrew paths.
diff --git a/ballisticakit-windows/Generic/BallisticaKitGeneric.vcxproj b/ballisticakit-windows/Generic/BallisticaKitGeneric.vcxproj
index a0f8b3d7..d33711c0 100644
--- a/ballisticakit-windows/Generic/BallisticaKitGeneric.vcxproj
+++ b/ballisticakit-windows/Generic/BallisticaKitGeneric.vcxproj
@@ -99,7 +99,7 @@
SyncCThrow
true
../../src;../../src/external/windows/include/SDL2;../../src/external/windows/include/AL;../../src/external/windows/include/python;../../src/external/windows/include;../../src/external/open_dynamics_engine-ef;../../src/external/qrencode-3.4.4
- stdcpp17
+ stdcpp20
Fast
@@ -123,7 +123,7 @@
SyncCThrow
true
../../src;../../src/external/windows/include/SDL2;../../src/external/windows/include/AL;../../src/external/windows/include/python;../../src/external/windows/include;../../src/external/open_dynamics_engine-ef
- stdcpp17
+ stdcpp20
Fast
diff --git a/ballisticakit-windows/Headless/BallisticaKitHeadless.vcxproj b/ballisticakit-windows/Headless/BallisticaKitHeadless.vcxproj
index 4637dcdb..1de80047 100644
--- a/ballisticakit-windows/Headless/BallisticaKitHeadless.vcxproj
+++ b/ballisticakit-windows/Headless/BallisticaKitHeadless.vcxproj
@@ -101,7 +101,7 @@
false
SyncCThrow
../../src;../../src/external/windows/include/SDL2;../../src/external/windows/include/AL;../../src/external/windows/include/python;../../src/external/windows/include;../../src/external/open_dynamics_engine-ef
- stdcpp17
+ stdcpp20
Fast
@@ -123,7 +123,7 @@
true
false
../../src;../../src/external/windows/include/SDL2;../../src/external/windows/include/AL;../../src/external/windows/include/python;../../src/external/windows/include;../../src/external/open_dynamics_engine-ef
- stdcpp17
+ stdcpp20
Fast
diff --git a/src/assets/ba_data/python/baenv.py b/src/assets/ba_data/python/baenv.py
index d44198db..81aa9810 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 = 21411
+TARGET_BALLISTICA_BUILD = 21417
TARGET_BALLISTICA_VERSION = '1.7.28'
diff --git a/src/ballistica/shared/ballistica.cc b/src/ballistica/shared/ballistica.cc
index a81ccce4..4d714c2e 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 = 21411;
+const int kEngineBuildNumber = 21417;
const char* kEngineVersion = "1.7.28";
const int kEngineApiVersion = 8;
diff --git a/src/ballistica/shared/foundation/object.h b/src/ballistica/shared/foundation/object.h
index 67b3743b..d10222c8 100644
--- a/src/ballistica/shared/foundation/object.h
+++ b/src/ballistica/shared/foundation/object.h
@@ -229,39 +229,26 @@ class Object {
return (Get() != ptr);
}
- // Assign/compare with same type ref (apparently the template below doesn't
- // cover this case?).
- auto operator=(const WeakRef& ref) -> WeakRef& {
- *this = ref.Get();
- return *this;
- }
+ // Assign/compare with same type ref (apparently the template below
+ // doesn't cover this case?).
+ //
+ // Update: Actually now getting errors that
+ // having both is ambiguous, so maybe can kill these now?..
- auto operator==(const WeakRef& ref) -> bool {
- return (Get() == ref.Get());
- }
+ // auto operator=(const WeakRef& ref) -> WeakRef& {
+ // *this = ref.Get();
+ // return *this;
+ // }
- auto operator!=(const WeakRef& ref) -> bool {
- return (Get() != ref.Get());
- }
+ // auto operator==(const WeakRef& ref) -> bool {
+ // return (Get() == ref.Get());
+ // }
- // Assign/compare with any compatible strong-ref.
- template
- auto operator=(const Ref& ref) -> WeakRef& {
- *this = ref.Get();
- return *this;
- }
+ // auto operator!=(const WeakRef& ref) -> bool {
+ // return (Get() != ref.Get());
+ // }
- template
- auto operator==(const Ref& ref) -> bool {
- return (Get() == ref.Get());
- }
-
- template
- auto operator!=(const Ref& ref) -> bool {
- return (Get() != ref.Get());
- }
-
- // Assign/compare with any compatible weak-ref.
+ // Assign/compare with a compatible weak-ref.
template
auto operator=(const WeakRef& ref) -> WeakRef& {
*this = ref.Get();
@@ -278,6 +265,23 @@ class Object {
return (Get() != ref.Get());
}
+ // Assign/compare with a compatible strong-ref.
+ template
+ auto operator=(const Ref& ref) -> WeakRef& {
+ *this = ref.Get();
+ return *this;
+ }
+
+ template
+ auto operator==(const Ref& ref) -> bool {
+ return (Get() == ref.Get());
+ }
+
+ template
+ auto operator!=(const Ref& ref) -> bool {
+ return (Get() != ref.Get());
+ }
+
// Various constructors:
// Empty.
@@ -406,7 +410,7 @@ class Object {
return *this;
}
- // Assign/compare with any compatible strong-ref.
+ // Assign/compare with a compatible strong-ref.
template
auto operator=(const Ref& ref) -> Ref& {
*this = ref.Get();
@@ -423,22 +427,25 @@ class Object {
return (Get() != ref.Get());
}
- // Assign/compare from any compatible weak-ref.
+ // Assign from a compatible weak-ref. Comparing to compatible weak-refs
+ // is covered by the operators on the weak-ref side.
template
auto operator=(const WeakRef& ref) -> Ref& {
*this = ref.Get();
return *this;
}
- template
- auto operator==(const WeakRef& ref) -> bool {
- return (Get() == ref.Get());
- }
+ // These are already covered by the equivalent operators
+ // on the WeakRef side.
+ // template
+ // auto operator==(const WeakRef& ref) -> bool {
+ // return (Get() == ref.Get());
+ // }
- template
- auto operator!=(const WeakRef& ref) -> bool {
- return (Get() != ref.Get());
- }
+ // template
+ // auto operator!=(const WeakRef& ref) -> bool {
+ // return (Get() != ref.Get());
+ // }
// Various constructors: