This commit is contained in:
Eric 2023-08-31 09:12:03 -07:00
parent 2a3373aa6a
commit b51bc29773
No known key found for this signature in database
GPG Key ID: 89C93F0F8D6D5A98
27 changed files with 157 additions and 131 deletions

88
.efrocachemap generated
View File

@ -4064,50 +4064,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": "d17c2ee21e1fb7845763e9ccc9e7966d",
"build/prefab/full/linux_arm64_gui/release/ballisticakit": "742d02168b023ef812b53fed2e581f7d",
"build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "b41cfcdd17a4ce3a85707426c62144ee",
"build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "a799400fd4b28b724a5cd7022c016a1c",
"build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "0651c8caba1b5258acf06cf515829e94",
"build/prefab/full/linux_x86_64_gui/release/ballisticakit": "c67d36bac8c20c59cf58fe67ff5aab6f",
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "a932c27c89add5dd0b0b5054ccbc9c30",
"build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "bcccf5b9506727ae7339d172946e9cba",
"build/prefab/full/mac_arm64_gui/debug/ballisticakit": "ad79f1fb9a69488395dcb8e9909b18e2",
"build/prefab/full/mac_arm64_gui/release/ballisticakit": "1c4c72504904d6ac6003401cffef8550",
"build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "3be75ed39f701ea673fdf4c41cc85fee",
"build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "b6caf556a041fd297a42d022dd28bbbd",
"build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "32bce4f3dc1068d13c7a8c13f6f65d39",
"build/prefab/full/mac_x86_64_gui/release/ballisticakit": "633069c441e56f01cbe5a15d2a3202d4",
"build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "02350d3de51cd2056d3144ff34fe24d2",
"build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "562c39ba329fcd64b23d86a56cd5f7bb",
"build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "a173972be3a16bc2637dabbe124aaea6",
"build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "f0b9f9514c4da093c8720a89e54c069c",
"build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "f7df321426c7add9f4ea31e266ed5c66",
"build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "72435cbb4e1b80f31652950f32021464",
"build/prefab/lib/linux_arm64_gui/debug/libballisticaplus.a": "cbb5ca4147284608ee43aaefe1f9bcfb",
"build/prefab/lib/linux_arm64_gui/release/libballisticaplus.a": "788b336518c767880ce7392d7f595852",
"build/prefab/lib/linux_arm64_server/debug/libballisticaplus.a": "cbb5ca4147284608ee43aaefe1f9bcfb",
"build/prefab/lib/linux_arm64_server/release/libballisticaplus.a": "788b336518c767880ce7392d7f595852",
"build/prefab/lib/linux_x86_64_gui/debug/libballisticaplus.a": "cccb7895ed8f412f72ce04c676eae235",
"build/prefab/lib/linux_x86_64_gui/release/libballisticaplus.a": "f792c55164f95f8b33f00e7d809c90f7",
"build/prefab/lib/linux_x86_64_server/debug/libballisticaplus.a": "cccb7895ed8f412f72ce04c676eae235",
"build/prefab/lib/linux_x86_64_server/release/libballisticaplus.a": "f792c55164f95f8b33f00e7d809c90f7",
"build/prefab/lib/mac_arm64_gui/debug/libballisticaplus.a": "460f8c445f95f1789820ab1d4556c03a",
"build/prefab/lib/mac_arm64_gui/release/libballisticaplus.a": "911f93f977b96774cfa3c82f5e5a4cc8",
"build/prefab/lib/mac_arm64_server/debug/libballisticaplus.a": "460f8c445f95f1789820ab1d4556c03a",
"build/prefab/lib/mac_arm64_server/release/libballisticaplus.a": "911f93f977b96774cfa3c82f5e5a4cc8",
"build/prefab/lib/mac_x86_64_gui/debug/libballisticaplus.a": "8d7077f5e2b9ed0cf9dcf8cbb75ef696",
"build/prefab/lib/mac_x86_64_gui/release/libballisticaplus.a": "016af4cf5eea1232e05db579bda8ee4b",
"build/prefab/lib/mac_x86_64_server/debug/libballisticaplus.a": "5d848f38d9a8056de078a26f78538051",
"build/prefab/lib/mac_x86_64_server/release/libballisticaplus.a": "016af4cf5eea1232e05db579bda8ee4b",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "3dd5639a27b74c03e77e3ef706889466",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "c374e1187e51a6c7af83b3158e9ece34",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "92888461dc4f86381cfade96b43ca944",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "95c4b8c64bcfb62f782a4b3b74189b80",
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "bb99cd26d290a01a90f538fc9dcc4af6",
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "eb5316cfd1213ed4eb61f780ea9ad5ef",
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "1c436928b8fdae376046661097a85851",
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "b5e3f67b28943b3afe6e8d62811f2844",
"build/prefab/full/linux_arm64_gui/debug/ballisticakit": "4542f7820b33b8f1f6719b17efa26453",
"build/prefab/full/linux_arm64_gui/release/ballisticakit": "c94898207acb63e3e09cb08b50ebd287",
"build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "ad606ee2ee1367b906c9cbb18c53baf6",
"build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "776e2461a852753010278d5b90ff32df",
"build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "aefcfd8774114e7cebc418d0adad56f2",
"build/prefab/full/linux_x86_64_gui/release/ballisticakit": "d21df3fc06db87786d68ccc1417d043e",
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "7b218f79079e8e0d92b5f0a4afb0599d",
"build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "94738f2f6fcbea9dad60af4bd6a7cd5d",
"build/prefab/full/mac_arm64_gui/debug/ballisticakit": "033b39b34a10d5bce6e53572a816d0ef",
"build/prefab/full/mac_arm64_gui/release/ballisticakit": "f4eb1cc72a16eafcaba2d55c65f19a7b",
"build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "fec5b1818aa97bc0dff1ddf127742574",
"build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "76930acbbd2e8dd35f35639d85ce21ac",
"build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "d5ab5ad85dd8d113125d15f03c221db3",
"build/prefab/full/mac_x86_64_gui/release/ballisticakit": "29fbcf76221d71ea3ecb73d8ab353f7b",
"build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "3d8b4b5d6ba376f2d280209e0aa3bcf2",
"build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "fb9da4455aa7c0d8e5120a75ccaeabcb",
"build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "056f8137ba8b1179b66eea59944aefb2",
"build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "78f53224dd6052c93da31bda7ee1c84c",
"build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "82128374a7eabc651061d778e099b923",
"build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "2cd60cbebfbe25447791284b42c3caf9",
"build/prefab/lib/linux_arm64_gui/debug/libballisticaplus.a": "a589af5b31246539eac3264c829c41a0",
"build/prefab/lib/linux_arm64_gui/release/libballisticaplus.a": "3dfaf945474294cb9f3808a835fb667c",
"build/prefab/lib/linux_arm64_server/debug/libballisticaplus.a": "a589af5b31246539eac3264c829c41a0",
"build/prefab/lib/linux_arm64_server/release/libballisticaplus.a": "3dfaf945474294cb9f3808a835fb667c",
"build/prefab/lib/linux_x86_64_gui/debug/libballisticaplus.a": "47e08d2f265f4dda15b309fa67ba163b",
"build/prefab/lib/linux_x86_64_gui/release/libballisticaplus.a": "c9a5225be07b4456e073014e1db2cafe",
"build/prefab/lib/linux_x86_64_server/debug/libballisticaplus.a": "47e08d2f265f4dda15b309fa67ba163b",
"build/prefab/lib/linux_x86_64_server/release/libballisticaplus.a": "c9a5225be07b4456e073014e1db2cafe",
"build/prefab/lib/mac_arm64_gui/debug/libballisticaplus.a": "f79382e5342db6f38f4c07170589d62d",
"build/prefab/lib/mac_arm64_gui/release/libballisticaplus.a": "b2d5386301891813a790f1a19d442022",
"build/prefab/lib/mac_arm64_server/debug/libballisticaplus.a": "f79382e5342db6f38f4c07170589d62d",
"build/prefab/lib/mac_arm64_server/release/libballisticaplus.a": "b2d5386301891813a790f1a19d442022",
"build/prefab/lib/mac_x86_64_gui/debug/libballisticaplus.a": "899eda04958efce6903b7dd2abe6c76f",
"build/prefab/lib/mac_x86_64_gui/release/libballisticaplus.a": "e98d76fe2d0af7e775801998d8591340",
"build/prefab/lib/mac_x86_64_server/debug/libballisticaplus.a": "e9d551c0bfbb330470b1e0784028e4d3",
"build/prefab/lib/mac_x86_64_server/release/libballisticaplus.a": "e98d76fe2d0af7e775801998d8591340",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "77f25ad3348eb212969725c0ec7ebec8",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "df8038790ce73124950dc443c1e972ad",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "f184798b7973343cdc42d16e05aa335f",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "2e3ed4ea52261efd17d0927b21cf4075",
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "1a5c374cfdd07ccbb2f1e9a44b886131",
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "66da72816faa1d87d0b3fe677c6eb9c8",
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "fbef69c5fba9b7c94d37e233eb6c9642",
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "c37e1dc4f95a8db0b5059dae0b5f5241",
"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": "ad347097a38e0d7ede9eb6dec6a80ee9",

View File

@ -1073,6 +1073,7 @@
<w>flagnode</w>
<w>flagpos</w>
<w>flav</w>
<w>flavordir</w>
<w>fldtypes</w>
<w>flines</w>
<w>floinkdingle</w>
@ -3378,4 +3379,4 @@
<w>zval</w>
</words>
</dictionary>
</component>
</component>

View File

@ -1,4 +1,6 @@
### 1.7.27 (build 21281, api 8, 2023-08-30)
### 1.7.28 (build 21289, api 8, 2023-08-31)
### 1.7.27 (build 21282, api 8, 2023-08-30)
- Fixed a rare crash that could occur if the app shuts down while a background
thread is making a web request. The app will now try to wait for any such

View File

@ -654,6 +654,7 @@
<w>fjco</w>
<w>fjcoiwef</w>
<w>flagindex</w>
<w>flavordir</w>
<w>flipbit</w>
<w>floinkdingle</w>
<w>floooff</w>
@ -1981,4 +1982,4 @@
<w>zrot</w>
</words>
</dictionary>
</component>
</component>

View File

@ -4,10 +4,10 @@
# pylint: disable=too-many-lines
from __future__ import annotations
import os
import logging
from enum import Enum
import warnings
from enum import Enum
from typing import TYPE_CHECKING
from concurrent.futures import ThreadPoolExecutor
from functools import cached_property
@ -143,10 +143,11 @@ class App:
the single shared instance.
"""
self.env: babase.Env = _babase.Env()
if self.env.running_with_dummy_modules:
if os.environ.get('BA_RUNNING_WITH_DUMMY_MODULES') == '1':
return
self.env: babase.Env = _babase.Env()
self.state = self.State.NOT_RUNNING
# Controls which app-modes we use for handling given
@ -199,7 +200,7 @@ class App:
def postinit(self) -> None:
"""Called after we've been inited and assigned to babase.app."""
if self.env.running_with_dummy_modules:
if os.environ.get('BA_RUNNING_WITH_DUMMY_MODULES') == '1':
return
# NOTE: the reason we need a postinit here is that

View File

@ -52,8 +52,8 @@ if TYPE_CHECKING:
# Build number and version of the ballistica binary we expect to be
# using.
TARGET_BALLISTICA_BUILD = 21281
TARGET_BALLISTICA_VERSION = '1.7.27'
TARGET_BALLISTICA_BUILD = 21289
TARGET_BALLISTICA_VERSION = '1.7.28'
@dataclass

View File

@ -56,7 +56,6 @@ class UIV1Subsystem(babase.AppSubsystem):
self.cleanupchecks: list[UICleanupCheck] = []
self.upkeeptimer: babase.AppTimer | None = None
self.use_toolbars = _bauiv1.toolbar_test()
# self.use_toolbars = env.get('toolbar_test', True)
self.title_color = (0.72, 0.7, 0.75)
self.heading_color = (0.72, 0.7, 0.75)

View File

@ -70,7 +70,6 @@ class ControlsSettingsWindow(bui.Window):
show_space_1 = True
height += space_height
print('hello')
show_keyboard = False
if bs.getinputdevice('Keyboard', '#1', doraise=False) is not None:
show_keyboard = True

View File

@ -234,7 +234,7 @@ void BaseFeatureSet::OnAppShutdownComplete() {
if (app_adapter->ManagesEventLoop()) {
g_core->main_event_loop()->Quit();
} else {
g_core->platform->QuitApp();
platform->QuitApp();
}
}
@ -720,5 +720,6 @@ void BaseFeatureSet::ShutdownSuppressEnd() {
shutdown_suppress_count_--;
assert(shutdown_suppress_count_ >= 0);
}
auto BaseFeatureSet::GetReturnValue() const -> int { return return_value(); }
} // namespace ballistica::base

View File

@ -736,6 +736,11 @@ class BaseFeatureSet : public FeatureSetNativeComponent,
// Non-const bits (fixme: clean up access to these).
TouchInput* touch_input{};
auto return_value() const { return return_value_; }
void set_return_value(int val) { return_value_ = val; }
auto GetReturnValue() const -> int override;
private:
BaseFeatureSet();
void LogVersionInfo_();
@ -762,6 +767,7 @@ class BaseFeatureSet : public FeatureSetNativeComponent,
bool base_native_import_completed_{};
bool basn_log_behavior_{};
bool server_wrapper_managed_{};
int return_value_{};
};
} // namespace ballistica::base

View File

@ -63,6 +63,14 @@ void BasePlatformApple::DoOpenURL(const std::string& url) {
#endif
}
void BasePlatformApple::QuitApp() {
#if BA_OSTYPE_MACOS && BA_XCODE_BUILD && !BA_HEADLESS_BUILD
core::AppleUtils::Quit(); // will post a cocoa terminate
#else
BasePlatform::QuitApp();
#endif
}
} // namespace ballistica::base
#endif // BA_OSTYPE_MACOS || BA_OSTYPE_IOS_TVOS

View File

@ -16,6 +16,7 @@ class BasePlatformApple : public BasePlatform {
void RestorePurchases() override;
void PurchaseAck(const std::string& purchase,
const std::string& order_id) override;
void QuitApp() override;
void DoOpenURL(const std::string& url) override;

View File

@ -321,4 +321,6 @@ void BasePlatform::OnAppShutdown() { assert(g_base->InLogicThread()); }
void BasePlatform::OnScreenSizeChange() { assert(g_base->InLogicThread()); }
void BasePlatform::DoApplyAppConfig() { assert(g_base->InLogicThread()); }
void BasePlatform::QuitApp() { exit(g_base->return_value()); }
} // namespace ballistica::base

View File

@ -33,6 +33,9 @@ class BasePlatform {
virtual void OnScreenSizeChange();
virtual void DoApplyAppConfig();
/// Quit the app (can be immediate or via posting some high level event).
virtual void QuitApp();
#pragma mark IN APP PURCHASES --------------------------------------------------
void Purchase(const std::string& item);

View File

@ -170,10 +170,6 @@ void PythonClassEnv::SetupType(PyTypeObject* cls) {
envs["demo"] = BoolEntry_(g_buildconfig.demo_build(),
"Whether the app is targeting a demo experience.");
auto* envval = getenv("BA_RUNNING_WITH_DUMMY_MODULES");
envs["running_with_dummy_modules"] =
BoolEntry_(envval && !strcmp(envval, "1"), "(internal)");
bool first = true;
for (auto&& entry : envs) {
if (!first) {
@ -239,9 +235,33 @@ PythonClassEnv::PythonClassEnv() = default;
PythonClassEnv::~PythonClassEnv() = default;
auto PythonClassEnv::Dir(PythonClassEnv* self) -> PyObject* {
BA_PYTHON_TRY;
// Start with the standard Python dir listing.
PyObject* dir_list = Python::generic_dir(reinterpret_cast<PyObject*>(self));
assert(PyList_Check(dir_list));
assert(g_entries_);
// ..and add in our custom attr names.
for (auto&& env : *g_entries_) {
PyList_Append(dir_list, PythonRef(PyUnicode_FromString(env.first.c_str()),
PythonRef::kSteal)
.Get());
}
PyList_Sort(dir_list);
return dir_list;
BA_PYTHON_CATCH;
}
PyTypeObject PythonClassEnv::type_obj;
// Any methods for our class go here.
PyMethodDef PythonClassEnv::tp_methods[] = {{nullptr}};
PyMethodDef PythonClassEnv::tp_methods[] = {
{"__dir__", (PyCFunction)Dir, METH_NOARGS,
"allows inclusion of our custom attrs in standard python dir()"},
{nullptr}};
} // namespace ballistica::base

View File

@ -37,6 +37,7 @@ class PythonClassEnv : public PythonClass {
static auto tp_new(PyTypeObject* type, PyObject* args, PyObject* keywds)
-> PyObject*;
static void tp_dealloc(PythonClassEnv* self);
static auto Dir(PythonClassEnv* self) -> PyObject*;
};
} // namespace ballistica::base

View File

@ -148,6 +148,7 @@ auto CoreFeatureSet::core_config() const -> const CoreConfig& {
}
void CoreFeatureSet::ApplyBaEnvConfig() {
// Ask baenv for the config we should use.
auto envcfg =
python->objs().Get(core::CorePython::ObjID::kBaEnvGetConfigCall).Call();
BA_PRECONDITION_FATAL(envcfg.Exists());
@ -155,7 +156,7 @@ void CoreFeatureSet::ApplyBaEnvConfig() {
assert(!have_ba_env_vals_);
have_ba_env_vals_ = true;
// Grab everything baenv shipped us.
// Pull everything we want out of it.
ba_env_config_dir_ = envcfg.GetAttr("config_dir").ValueAsString();
ba_env_data_dir_ = envcfg.GetAttr("data_dir").ValueAsString();
ba_env_app_python_dir_ =
@ -173,7 +174,8 @@ void CoreFeatureSet::ApplyBaEnvConfig() {
ba_env_app_python_dir_.has_value()
&& *ba_env_app_python_dir_ != standard_app_python_dir;
// Ok, now look for the existence of ba_data in the dir we've got.
// As a sanity check, die if the data dir we were given doesn't contain a
// 'ba_data' dir.
auto fullpath = ba_env_data_dir_ + BA_DIRSLASH + "ba_data";
if (!platform->FilePathExists(fullpath)) {
FatalError("ba_data directory not found at '" + fullpath + "'.");
@ -335,14 +337,15 @@ void CoreFeatureSet::UpdateAppTime() {
std::scoped_lock lock(app_time_mutex_);
microsecs_t passed = t - last_app_time_measure_microsecs_;
// The time calls we're using are supposed to be monotonic, but I've seen
// 'passed' equal -1 even when it is using std::chrono::steady_clock. Let's
// do our own filtering here to make 100% sure we don't go backwards.
// The time calls we're using are supposed to be monotonic, but I've
// seen 'passed' equal -1 even when it is using
// std::chrono::steady_clock. Let's do our own filtering here to make
// 100% sure we don't go backwards.
if (passed < 0) {
passed = 0;
} else {
// Very large times-passed probably means we went to sleep or something;
// clamp to a reasonable value.
// Very large times-passed probably means we went to sleep or
// something; clamp to a reasonable value.
if (passed > 250000) {
passed = 250000;
}
@ -355,8 +358,8 @@ void CoreFeatureSet::UpdateAppTime() {
void CoreFeatureSet::UpdateMainThreadID() {
auto current_id = std::this_thread::get_id();
// This gets called a lot and it may happen before we are spun up,
// so just ignore it in that case..
// This gets called a lot and it may happen before we are spun up, so just
// ignore it in that case.
main_thread_id = current_id;
main_event_loop_->set_thread_id(current_id);
}

View File

@ -164,7 +164,6 @@ class CoreFeatureSet {
bool should_pause{};
bool reset_vr_orientation{};
bool user_ran_commands{};
int return_value{};
std::thread::id main_thread_id{};
bool vr_mode;

View File

@ -297,14 +297,6 @@ void CorePlatformApple::SetHardwareCursorVisible(bool visible) {
#endif
}
void CorePlatformApple::QuitApp() {
#if BA_OSTYPE_MACOS && BA_XCODE_BUILD && !BA_HEADLESS_BUILD
AppleUtils::Quit(); // will post a cocoa terminate
#else
CorePlatform::QuitApp();
#endif
}
void CorePlatformApple::OpenFileExternally(const std::string& path) {
#if BA_XCODE_BUILD
AppleUtils::EditTextFile(path.c_str());

View File

@ -50,7 +50,6 @@ class CorePlatformApple : public CorePlatform {
void GameCenterLogin() override;
auto IsOSPlayingMusic() -> bool override;
void SetHardwareCursorVisible(bool visible) override;
void QuitApp() override;
void OpenFileExternally(const std::string& path) override;
void OpenDirExternally(const std::string& path) override;
void MacMusicAppInit() override;

View File

@ -470,8 +470,6 @@ void CorePlatform::SleepMillisecs(millisecs_t ms) {
#pragma clang diagnostic push
#pragma ide diagnostic ignored "NullDereferences"
void CorePlatform::WillExitMain(bool errored) {}
auto CorePlatform::GetUIScale() -> UIScale {
// Handles mac/pc/linux cases.
return UIScale::kLarge;
@ -810,8 +808,6 @@ void CorePlatform::SetHardwareCursorVisible(bool visible) {
#endif
}
void CorePlatform::QuitApp() { exit(g_core->return_value); }
void CorePlatform::OpenFileExternally(const std::string& path) {
Log(LogLevel::kError, "OpenFileExternally() unimplemented");
}

View File

@ -49,8 +49,6 @@ class CorePlatform {
/// class versions can go here.
virtual void PostInit();
virtual void WillExitMain(bool errored);
virtual void OnScreenSizeChange();
virtual void StepDisplayTime();
@ -430,9 +428,6 @@ class CorePlatform {
/// Show/hide the hardware cursor.
virtual void SetHardwareCursorVisible(bool visible);
/// Quit the app (can be immediate or via posting some high level event).
virtual void QuitApp();
/// Open a file using the system default method (in another app, etc.)
virtual void OpenFileExternally(const std::string& path);

View File

@ -8,10 +8,9 @@
namespace ballistica::core {
/// 'Soft' interface to the base feature-set.
/// Feature-sets listing base as a soft requirement must limit their use of
/// base to these methods and should be prepared to handle the not-present
/// case.
/// 'Soft' interface to the base feature-set. Feature-sets listing base as a
/// soft requirement must limit their use of base to these methods and
/// should be prepared to handle the not-present case.
class BaseSoftInterface {
public:
virtual void ScreenMessage(const std::string& s, const Vector3f& color) = 0;
@ -44,6 +43,7 @@ class BaseSoftInterface {
virtual void DoPushObjCall(const PythonObjectSetBase* objset, int id,
const std::string& arg) = 0;
virtual auto IsAppStarted() const -> bool = 0;
virtual auto GetReturnValue() const -> int = 0;
};
} // namespace ballistica::core

View File

@ -221,7 +221,7 @@ auto PythonClassMaterial::tp_setattro(PythonClassMaterial* self, PyObject* attr,
auto PythonClassMaterial::Dir(PythonClassMaterial* self) -> PyObject* {
BA_PYTHON_TRY;
// Start with the standard python dir listing.
// Start with the standard Python dir listing.
PyObject* dir_list = Python::generic_dir(reinterpret_cast<PyObject*>(self));
assert(PyList_Check(dir_list));

View File

@ -25,26 +25,25 @@ class BaseFeatureSet;
namespace ballistica::scene_v1 {
// Protocol version we host games with and write replays to.
// This should be incremented whenever there are changes made to the
// session-commands layer (new/removed/changed nodes, attrs, data files,
// behavior, etc.)
// Note that the packet/gamepacket/message layer can vary more organically based
// on build-numbers of connected clients/servers since none of that data is
// stored; this just needs to be observed for all the scene stuff that
// goes into replays since a single stream can get played/replayed on different
// builds (as long as they support that protocol version).
// Protocol version we host games with and write replays to. This should be
// incremented whenever there are changes made to the session-commands layer
// (new/removed/changed nodes, attrs, data files, behavior, etc.)
// Note that the packet/gamepacket/message layer can vary more organically
// based on build-numbers of connected clients/servers since none of that
// data is stored; this just needs to be observed for all the scene stuff
// that goes into replays since a single stream can get played/replayed on
// different builds (as long as they support that protocol version).
const int kProtocolVersion = 33;
// Oldest protocol version we can act as a client to.
// This can generally be left as-is as long as only
// new nodes/attrs/commands are added and existing
// stuff is unchanged.
// Oldest protocol version we can act as a client to. This can generally be
// left as-is as long as only new nodes/attrs/commands are added and
// existing stuff is unchanged.
const int kProtocolVersionMin = 24;
// FIXME: We should separate out connection protocol from scene protocol. We
// want to be able to watch really old replays if possible but being able to
// connect to old clients is much less important (and slows progress).
// want to be able to watch really old replays if possible but being able
// to connect to old clients is much less important (and slows progress).
// Protocol additions:
// 25: added a few new achievement graphics and new node attrs for displaying

View File

@ -39,8 +39,8 @@ auto main(int argc, char** argv) -> int {
namespace ballistica {
// These are set automatically via script; don't modify them here.
const int kEngineBuildNumber = 21281;
const char* kEngineVersion = "1.7.27";
const int kEngineBuildNumber = 21289;
const char* kEngineVersion = "1.7.28";
const int kEngineApiVersion = 8;
#if BA_MONOLITHIC_BUILD
@ -156,9 +156,8 @@ auto MonolithicMain(const core::CoreConfig& core_config) -> int {
}
}
}
if (l_core) {
l_core->platform->WillExitMain(false);
return l_core->return_value;
if (l_base) {
return l_base->GetReturnValue();
}
return -1; // Didn't even get core; something clearly wrong.
}

View File

@ -18,8 +18,8 @@
#include "ballistica/shared/foundation/macros.h"
#include "ballistica/shared/foundation/types.h"
// There are one or two places where we include this from regular C
// or Objective-C code so want to gracefully handle that case.
// There are one or two places where we include this from regular C or
// Objective-C code so want to gracefully handle that case.
#ifdef __cplusplus
namespace ballistica {
@ -40,10 +40,9 @@ const int kMaxPacketSize = 700;
// Extra bytes added to message packets.
const int kMessagePacketHeaderSize = 6;
// The screen, no matter what size/aspect, will always
// fit this virtual rectangle, so placing UI elements within
// these coords is always safe.
// (we currently match the screen ratio of an iPhone 5).
// The screen, no matter what size/aspect, will always fit this virtual
// rectangle, so placing UI elements within these coords is always safe. (we
// currently match the screen ratio of an iPhone 5).
const int kBaseVirtualResX = 1207;
const int kBaseVirtualResY = 680;
@ -60,13 +59,14 @@ namespace core {
class CoreConfig;
}
// The following is a smattering of convenience functions declared in our top
// level namespace. Functionality can be exposed here if it is used often
// enough that avoiding the extra class includes seems like an overall
// The following is a smattering of convenience functions declared in our
// top level namespace. Functionality can be exposed here if it is used
// often enough that avoiding the extra class includes seems like an overall
// compile-time/convenience win.
#if BA_MONOLITHIC_BUILD
/// Entry point for standard monolithic builds. Handles all initing and running.
/// Entry point for standard monolithic builds. Handles all initing and
/// running.
auto MonolithicMain(const core::CoreConfig& config) -> int;
#endif // BA_MONOLITHIC_BUILD
@ -80,12 +80,11 @@ auto CurrentThreadName() -> std::string;
/// Convenient access to Logging::Log.
void Log(LogLevel level, const std::string& msg);
/// Log a fatal error and kill the app.
/// Can be called from any thread at any time.
/// Provided message will be shown to the user if possible.
/// This will attempt to ship all accumulated logs to the master-server
/// so the standard Log() call can be used before this to include extra
/// info not relevant to the end user.
/// Log a fatal error and kill the app. Can be called from any thread at any
/// time. Provided message will be shown to the user if possible. This will
/// attempt to ship all accumulated logs to the master-server so the
/// standard Log() call can be used before this to include extra info not
/// relevant to the end user.
void FatalError(const std::string& message = "");
} // namespace ballistica