diff --git a/.efrocachemap b/.efrocachemap
index d839c82f..37b9fdff 100644
--- a/.efrocachemap
+++ b/.efrocachemap
@@ -420,7 +420,7 @@
"assets/build/ba_data/audio/zoeOw.ogg": "https://files.ballistica.net/cache/ba1/51/eb/0a567253cc08c94c5d315a64d9af",
"assets/build/ba_data/audio/zoePickup01.ogg": "https://files.ballistica.net/cache/ba1/bc/8f/a9c51a09c418136e386b7fdf21c7",
"assets/build/ba_data/audio/zoeScream01.ogg": "https://files.ballistica.net/cache/ba1/02/e5/84916e123f47ccf11ddda380d699",
- "assets/build/ba_data/data/langdata.json": "https://files.ballistica.net/cache/ba1/92/86/8888faee87cda525007485ddf0e8",
+ "assets/build/ba_data/data/langdata.json": "https://files.ballistica.net/cache/ba1/de/d7/c8c170867f5ba0682c6600d388ca",
"assets/build/ba_data/data/languages/arabic.json": "https://files.ballistica.net/cache/ba1/0f/e1/94378b32c786d5365a7810a15d73",
"assets/build/ba_data/data/languages/belarussian.json": "https://files.ballistica.net/cache/ba1/55/8c/8d0a0585e434b94865ae4befc090",
"assets/build/ba_data/data/languages/chinese.json": "https://files.ballistica.net/cache/ba1/f6/21/951b7ff02b0ad14b1f0ac55763c4",
@@ -438,7 +438,7 @@
"assets/build/ba_data/data/languages/greek.json": "https://files.ballistica.net/cache/ba1/8c/8e/67de1d9997a66299c8881d44ab22",
"assets/build/ba_data/data/languages/hindi.json": "https://files.ballistica.net/cache/ba1/c2/f5/e7549f5179c22c6da97fafffc058",
"assets/build/ba_data/data/languages/hungarian.json": "https://files.ballistica.net/cache/ba1/2d/e5/3737c6c3979cf381321c5472bea5",
- "assets/build/ba_data/data/languages/indonesian.json": "https://files.ballistica.net/cache/ba1/b1/81/d99fb5b8c368430944b357aa15fe",
+ "assets/build/ba_data/data/languages/indonesian.json": "https://files.ballistica.net/cache/ba1/75/70/e33e6ee95830052e8f36cd2135f7",
"assets/build/ba_data/data/languages/italian.json": "https://files.ballistica.net/cache/ba1/c7/16/e31ce16d1b4150c271401669f24f",
"assets/build/ba_data/data/languages/korean.json": "https://files.ballistica.net/cache/ba1/d7/8b/acdfb39196be7856f8bad77eb6a0",
"assets/build/ba_data/data/languages/persian.json": "https://files.ballistica.net/cache/ba1/02/ab/e310f81582b6dc2ae93348d45166",
@@ -452,7 +452,7 @@
"assets/build/ba_data/data/languages/swedish.json": "https://files.ballistica.net/cache/ba1/50/9f/be006ba19be6a69a57837eb6dca0",
"assets/build/ba_data/data/languages/tamil.json": "https://files.ballistica.net/cache/ba1/cb/11/e11957be752c3dc552898b60ab20",
"assets/build/ba_data/data/languages/thai.json": "https://files.ballistica.net/cache/ba1/74/3d/c3d40a1e5ee1edf82555da05eda9",
- "assets/build/ba_data/data/languages/turkish.json": "https://files.ballistica.net/cache/ba1/e8/0b/6825043ce101a831732eb9c97e4f",
+ "assets/build/ba_data/data/languages/turkish.json": "https://files.ballistica.net/cache/ba1/0a/4f/90fcd63bd12a7648b2a1e9b01586",
"assets/build/ba_data/data/languages/ukrainian.json": "https://files.ballistica.net/cache/ba1/87/20/259904441097b886b841d7c4d09a",
"assets/build/ba_data/data/languages/venetian.json": "https://files.ballistica.net/cache/ba1/71/59/356404b8db683d8c946a40ca02e5",
"assets/build/ba_data/data/languages/vietnamese.json": "https://files.ballistica.net/cache/ba1/0b/24/3cc2b5a6ebe4bca1e01b40f8ed09",
@@ -3971,50 +3971,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/e7/5e/59333b9db5a9486c94b616d7d547",
+ "build/prefab/full/linux_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/ed/48/5b2f69e4f296dab9a564ef4ba0b2",
"build/prefab/full/linux_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/74/1d/fc9e33e565475daaac80da5252f0",
- "build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/58/9b/76b597f4a14af112d343a02c727a",
- "build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/49/72/9d6dddb041e6d5948af59f42c6fc",
- "build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/c6/d8/6c0f703639df3ce0caff7b2b6218",
+ "build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/cc/dc/9e3907edeff5bdcdf130f8b46043",
+ "build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/86/cf/640a60d55fa9af110489e9f7d654",
+ "build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/77/12/80eb1c3d63fc6bf5327566645541",
"build/prefab/full/linux_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/9c/7b/ac1a200be0f37078af0991faca3b",
- "build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/58/c8/b8b3ff0a84252fae685f4e0f0124",
- "build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/a9/82/f26d0ff0283e7a6f32d4adb3b4ab",
- "build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/dc/72/32b9ae11568f811657edcb5129de",
- "build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/db/94/c3cb06d3bcd9564005863e40335a",
- "build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/22/bf/a66488be7a126cd94f7502b5be5e",
- "build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/92/50/97e262eaa0339f42f871aaab91da",
- "build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/ca/cc/8c1200e34d617267627d91db8486",
- "build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/77/c6/7ca8897282baad0a079fdc3b12a0",
- "build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/82/a3/6c571299d0a7719bb6024561547b",
- "build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/d2/ba/5614593a7ab4e2988e65bb92216f",
- "build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/e1/3f/78f91ddf22d58b430b8cd8bb7287",
- "build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/84/80/b3aa1869048ec7fc9fdad0ae877f",
- "build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/b0/61/528f9bb9f3776cab9504d7ac415a",
- "build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/11/16/174d4992497dcf9c936745036855",
+ "build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/3f/7d/b103ee4aa60c1713d8959fb37bdb",
+ "build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/73/8e/afa74f2d49b74723aa64b478e103",
+ "build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/1f/e1/cb24f26e1a1e48fc134e87857a12",
+ "build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/bd/a1/2e854d38392de862f27690289276",
+ "build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/84/92/4d157d6cca2ede298dc52fd8e6e0",
+ "build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/e5/f9/7d8c05b6e3d71a486953afe02d2e",
+ "build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/a0/02/dbeec08c32a6532395a63f7ce7a3",
+ "build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/36/d6/1ec4ee0bbb0697c886c19afc1464",
+ "build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/5a/11/aa1d5f115d7f5a3c036d5a170e5e",
+ "build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/33/19/4dfc1c0930f2e22cad9cbed245bb",
+ "build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/55/06/790f0c625ff2bbc37ec45a192fb2",
+ "build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/dd/a3/aaf84cba25bcc7920d46fdf6051a",
+ "build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/2c/99/71c64f151f39d4758285863604f2",
+ "build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/ae/1e/84924ade4179dd92122302be3813",
"build/prefab/lib/linux_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/c0/e6/606201d69229c046ed9fb5c3338b",
"build/prefab/lib/linux_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/63/a9/9da6ca254d462675cdce8abdbf0b",
"build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/61/45/eee74c4c33a9a76376b452a75689",
"build/prefab/lib/linux_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/7a/74/60613067338c57246225eb95828d",
- "build/prefab/lib/linux_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/f9/75/28d109017fc6233bf6c5e18c3ad3",
- "build/prefab/lib/linux_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/bc/38/15e5bde3bd60cd8d760cacb7c825",
- "build/prefab/lib/linux_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/ff/4d/95cf853485249ae7110b10093e65",
- "build/prefab/lib/linux_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/43/6a/85802eec068c4aad35253ade806c",
- "build/prefab/lib/mac_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/b1/07/3409386feb1e5cd448a4e89007db",
- "build/prefab/lib/mac_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/87/6c/560bd65f3fbdb007e562593079df",
- "build/prefab/lib/mac_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/3e/03/8d57f7814793dab7907834cf29ff",
- "build/prefab/lib/mac_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d9/c8/6e1236bd6f7e6067fd43a2a3b28d",
- "build/prefab/lib/mac_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/c5/d7/7b3d6226d950c09d90ca8dbf3732",
- "build/prefab/lib/mac_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/78/3a/d36f49ada60ed6d8cb4fabceca2d",
- "build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d0/49/5818e127d362afa6ab928323ff43",
- "build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/6c/d9/dce5d751277c55ad994446dcf4e2",
- "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/0e/56/c00af8d4bc0fdb76402fca28b5d3",
- "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/59/e4/297cefcd5c754fbeb154d7354dba",
- "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/4e/51/b1420c4c937efdc09581e511c7f9",
- "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/ce/13/8112685d64b9dd0e24edd87dafdc",
- "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/e0/c6/be6eec53dc23d864ffb0919429fb",
- "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/47/18/9dac3ea464b3e93fb132d1a66f45",
- "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/4f/77/4130b38ddac3afb2f11bbeb3b9b5",
- "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/6a/4c/c035ab61ffd17d70c2cb4091eb91",
+ "build/prefab/lib/linux_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/57/03/10ed96783f925f635679fd54f52b",
+ "build/prefab/lib/linux_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/ef/d3/3ce6784fb56347646d4e8c7479ec",
+ "build/prefab/lib/linux_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/39/25/8f3ffb98cb73cf0bdd974b98d947",
+ "build/prefab/lib/linux_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/e5/be/fba3c5fbf804aed9e0fea8d9f7c1",
+ "build/prefab/lib/mac_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/de/1e/5016a6a654464001226d6d84c3dc",
+ "build/prefab/lib/mac_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/25/05/df2cc676d8bb4e715826984fcd5f",
+ "build/prefab/lib/mac_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/16/98/97ddbdaf3e1369e292d6cdf67dc2",
+ "build/prefab/lib/mac_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/fa/a9/9ef499b38e4d899f7fd362f4b59e",
+ "build/prefab/lib/mac_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/f9/35/d728d8ab9fe691366225c5a7e199",
+ "build/prefab/lib/mac_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/bf/ef/c48e4357202b00879e6848e81130",
+ "build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/a1/90/c69d9978cc8808612fde4bae8232",
+ "build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/1c/4d/a1a2da08fd6e76aa051c301a5ab8",
+ "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/99/21/b71e35e4a679f8677ea00973a9e2",
+ "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/8f/1f/473567523fd49f1ffbff870422a9",
+ "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/15/52/5e13d441ffd25d1daa220dbde46e",
+ "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/0c/c8/a617edbe5d634364964ee956239f",
+ "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/c8/83/db874353ce5a53932abd8c4066e8",
+ "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/d8/47/b007731fa81a438ba3eff999bdca",
+ "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/1d/8c/795b3914ad039b5dad704199a7e4",
+ "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/89/a8/aa768714b1fd24649f08f7ef5905",
"src/ballistica/generated/python_embedded/binding.inc": "https://files.ballistica.net/cache/ba1/c5/18/29d9fe8e483ce222d3263336f7e6",
"src/ballistica/generated/python_embedded/bootstrap.inc": "https://files.ballistica.net/cache/ba1/9d/7e/0a5125aa421e722c59d22b8beb19"
}
\ No newline at end of file
diff --git a/.idea/dictionaries/ericf.xml b/.idea/dictionaries/ericf.xml
index 28760bb1..8c6095a7 100644
--- a/.idea/dictionaries/ericf.xml
+++ b/.idea/dictionaries/ericf.xml
@@ -614,6 +614,7 @@
downmix
dpad
dpath
+ dpos
dprofilename
drawscore
drawscreen
@@ -2538,6 +2539,7 @@
useragentstring
userbase
userfunctions
+ usid
utcnow
utimensat
uuidmodule
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5f1cba3e..9b2e0f97 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,7 +1,8 @@
-### 1.6.9 (20469, 2022-02-19)
+### 1.6.9 (20472, 2022-02-20)
- Upgraded Android Python to 3.9.10
- Fixed an issue with SSL in Android builds that was preventing communication with the master-server in 1.6.8
- Added a new network-diagnostics tool at 'Settings->Advanced->Network Testing'. Can be used to diagnose issues talking to master-servers/etc. (especially useful now that SSL can factor in)
+- Added clipboard support to Mac test build (thought pasting currently requires ctrl-v instead of cmd-v).
### 1.6.8 (20458, 2022-02-16)
- Added Filipino language (Thanks David!)
diff --git a/ballisticacore-cmake/.idea/dictionaries/ericf.xml b/ballisticacore-cmake/.idea/dictionaries/ericf.xml
index 4e9a01f4..cf4cbd5a 100644
--- a/ballisticacore-cmake/.idea/dictionaries/ericf.xml
+++ b/ballisticacore-cmake/.idea/dictionaries/ericf.xml
@@ -304,6 +304,7 @@
downsample
dpad
dpads
+ dpos
drpt
dsize
dsound
@@ -412,6 +413,7 @@
fovs
fovx
fovy
+ fpath
framebuffers
framedef
frameldefs
@@ -1203,6 +1205,7 @@
unsynchronized
uppercased
userspace
+ usid
uther
uuidmodule
uuids
diff --git a/ballisticacore-cmake/.idea/inspectionProfiles/Project_Default.xml b/ballisticacore-cmake/.idea/inspectionProfiles/Project_Default.xml
index f52b6fcd..4d495b1e 100644
--- a/ballisticacore-cmake/.idea/inspectionProfiles/Project_Default.xml
+++ b/ballisticacore-cmake/.idea/inspectionProfiles/Project_Default.xml
@@ -13,6 +13,37 @@
+
+
+
diff --git a/src/ballistica/ballistica.cc b/src/ballistica/ballistica.cc
index 15a5cda7..258cb842 100644
--- a/src/ballistica/ballistica.cc
+++ b/src/ballistica/ballistica.cc
@@ -21,7 +21,7 @@
namespace ballistica {
// These are set automatically via script; don't modify them here.
-const int kAppBuildNumber = 20469;
+const int kAppBuildNumber = 20472;
const char* kAppVersion = "1.6.9";
// Our standalone globals.
diff --git a/src/ballistica/game/host_activity.cc b/src/ballistica/game/host_activity.cc
index 5cabe4bb..961a09c1 100644
--- a/src/ballistica/game/host_activity.cc
+++ b/src/ballistica/game/host_activity.cc
@@ -385,7 +385,7 @@ auto HostActivity::Update(millisecs_t time_advance) -> millisecs_t {
// If we haven't been told to start yet, don't do anything more.
if (!_started) {
- return 1000;
+ return 100;
}
// Advance base time by the specified amount, stopping at all timers along the
@@ -426,7 +426,9 @@ void HostActivity::GraphicsQualityChanged(GraphicsQuality q) {
}
void HostActivity::Draw(FrameDef* frame_def) {
- if (!_started) return;
+ if (!_started) {
+ return;
+ }
scene()->Draw(frame_def);
}
diff --git a/src/ballistica/input/device/joystick.cc b/src/ballistica/input/device/joystick.cc
index d82e8f82..1f211a57 100644
--- a/src/ballistica/input/device/joystick.cc
+++ b/src/ballistica/input/device/joystick.cc
@@ -99,7 +99,6 @@ Joystick::Joystick(int sdl_joystick_id, const std::string& custom_device_name,
sdl_joystick_ = nullptr;
is_mfi_controller_ = (custom_device_name_ == kMFiControllerName);
- is_mac_wiimote_ = (custom_device_name_ == "Wiimote");
// Hard code a few remote controls.
// The newer way to do this is just set 'UI-Only' on the device config
@@ -297,27 +296,6 @@ Joystick::~Joystick() {
child_joy_stick_ = nullptr;
}
- // If we're a wiimote, announce our departure.
- if (g_buildconfig.ostype_macos() && is_mac_wiimote_) {
- char msg[255];
-
- int num = device_number();
-
- // If we disconnected before any events came through, treat it as an error.
- snprintf(msg, sizeof(msg), "Wii Remote #%d", num);
-
- // Ask the user to try again if the disconnect was immediate.
- std::string s;
- if (GetRealTime() - creation_time_ < 5000) {
- s = g_game->GetResourceString("controllerDisconnectedTryAgainText");
- } else {
- s = g_game->GetResourceString("controllerDisconnectedText");
- }
- Utils::StringReplaceOne(&s, "${CONTROLLER}", msg);
- ScreenMessage(s);
- g_audio->PlaySound(g_media->GetSound(SystemSoundID::kCorkPop));
- }
-
// Have SDL actually close the joystick in the main thread.
// Send a message back to the main thread to close this SDL Joystick.
// HMMM - can we just have the main thread close the joystick immediately
@@ -342,25 +320,7 @@ auto Joystick::GetDefaultPlayerName() -> std::string {
return InputDevice::GetDefaultPlayerName();
}
-void Joystick::ConnectionComplete() {
- assert(InGameThread());
-
- // Special case for mac wiimotes.
- if (g_buildconfig.ostype_macos() && is_mac_wiimote_) {
- char msg[128];
-
- int num = device_number();
-
- snprintf(msg, sizeof(msg), "Wii Remote #%d", num);
- g_audio->PlaySound(g_media->GetSound(SystemSoundID::kGunCock));
-
- // Replace ${CONTROLLER} with it in our message.
- std::string s = g_game->GetResourceString("controllerConnectedText");
- Utils::StringReplaceOne(&s, "${CONTROLLER}", msg);
- ScreenMessage(s);
- return;
- }
-}
+void Joystick::ConnectionComplete() { assert(InGameThread()); }
auto Joystick::ShouldBeHiddenFromUser() -> bool {
std::string d_name = GetDeviceName();
diff --git a/src/ballistica/input/device/joystick.h b/src/ballistica/input/device/joystick.h
index 597ec4a4..0b5a587a 100644
--- a/src/ballistica/input/device/joystick.h
+++ b/src/ballistica/input/device/joystick.h
@@ -115,7 +115,6 @@ class Joystick : public InputDevice {
bool is_remote_app_{};
bool is_mfi_controller_{};
bool is_mac_ps3_controller_{};
- bool is_mac_wiimote_{};
millisecs_t ps3_last_joy_press_time_{-10000};
diff --git a/src/ballistica/input/input.cc b/src/ballistica/input/input.cc
index 12f8007f..016efaf7 100644
--- a/src/ballistica/input/input.cc
+++ b/src/ballistica/input/input.cc
@@ -1219,6 +1219,9 @@ void Input::HandleKeyPress(const SDL_Keysym* keysym) {
// Ctrl-V or Cmd-V sends paste commands to any interested text fields.
// Command-Q or Control-Q quits.
+ if (!repeat_press && keysym->sym == SDLK_v) {
+ printf("PASTE?");
+ }
if (!repeat_press && keysym->sym == SDLK_v
&& ((keysym->mod & KMOD_CTRL) || (keysym->mod & KMOD_GUI))) { // NOLINT
g_ui->SendWidgetMessage(WidgetMessage(WidgetMessage::Type::kPaste));
diff --git a/src/ballistica/platform/apple/platform_apple.h b/src/ballistica/platform/apple/platform_apple.h
index bf7c3114..e5f02c0d 100644
--- a/src/ballistica/platform/apple/platform_apple.h
+++ b/src/ballistica/platform/apple/platform_apple.h
@@ -25,56 +25,65 @@ class PlatformApple : public Platform {
auto DoHasTouchScreen() -> bool override;
auto GetUIScale() -> UIScale override;
auto IsRunningOnDesktop() -> bool override;
- void HandleLog(const std::string& msg) override;
- void SetupDataDirectory() override;
- void GetTextBoundsAndWidth(const std::string& text, Rect* r,
- float* width) override;
- void FreeTextTexture(void* tex) override;
+ auto HandleLog(const std::string& msg) -> void override;
+ auto SetupDataDirectory() -> void override;
+ auto GetTextBoundsAndWidth(const std::string& text, Rect* r, float* width)
+ -> void override;
+ auto FreeTextTexture(void* tex) -> void override;
auto CreateTextTexture(int width, int height,
const std::vector& strings,
const std::vector& positions,
const std::vector& widths, float scale)
-> void* override;
auto GetTextTextureData(void* tex) -> uint8_t* override;
- void GetFriendScores(const std::string& game, const std::string& game_version,
- void* py_callback) override;
- void SubmitScore(const std::string& game, const std::string& version,
- int64_t score) override;
- void ReportAchievement(const std::string& achievement) override;
+ auto GetFriendScores(const std::string& game, const std::string& game_version,
+ void* py_callback) -> void override;
+ auto SubmitScore(const std::string& game, const std::string& version,
+ int64_t score) -> void override;
+ auto ReportAchievement(const std::string& achievement) -> void override;
auto HaveLeaderboard(const std::string& game, const std::string& config)
-> bool override;
- void ShowOnlineScoreUI(const std::string& show, const std::string& game,
- const std::string& game_version) override;
- void Purchase(const std::string& item) override;
- void RestorePurchases() override;
+ auto ShowOnlineScoreUI(const std::string& show, const std::string& game,
+ const std::string& game_version) -> void override;
+ auto Purchase(const std::string& item) -> void override;
+ auto RestorePurchases() -> void override;
auto NewAutoReleasePool() -> void* override;
- void DrainAutoReleasePool(void* pool) override;
- void DoOpenURL(const std::string& url) override;
- void ResetAchievements() override;
- void GameCenterLogin() override;
- void PurchaseAck(const std::string& purchase,
- const std::string& order_id) override;
+ auto DrainAutoReleasePool(void* pool) -> void override;
+ auto DoOpenURL(const std::string& url) -> void override;
+ auto ResetAchievements() -> void override;
+ auto GameCenterLogin() -> void override;
+ auto PurchaseAck(const std::string& purchase, const std::string& order_id)
+ -> void override;
auto IsOSPlayingMusic() -> bool override;
- void SetHardwareCursorVisible(bool visible) override;
- void QuitApp() override;
- void GetScoresToBeat(const std::string& level, const std::string& config,
- void* py_callback) override;
- void OpenFileExternally(const std::string& path) override;
- void OpenDirExternally(const std::string& path) override;
- void MacMusicAppInit() override;
+ auto SetHardwareCursorVisible(bool visible) -> void override;
+ auto QuitApp() -> void override;
+ auto GetScoresToBeat(const std::string& level, const std::string& config,
+ void* py_callback) -> void override;
+ auto OpenFileExternally(const std::string& path) -> void override;
+ auto OpenDirExternally(const std::string& path) -> void override;
+ auto MacMusicAppInit() -> void override;
auto MacMusicAppGetVolume() -> int override;
- void MacMusicAppSetVolume(int volume) override;
- void MacMusicAppGetLibrarySource() override;
- void MacMusicAppStop() override;
+ auto MacMusicAppSetVolume(int volume) -> void override;
+ auto MacMusicAppGetLibrarySource() -> void override;
+ auto MacMusicAppStop() -> void override;
auto MacMusicAppPlayPlaylist(const std::string& playlist) -> bool override;
auto MacMusicAppGetPlaylists() -> std::list override;
- void StartListeningForWiiRemotes() override;
- void StopListeningForWiiRemotes() override;
+ auto StartListeningForWiiRemotes() -> void override;
+ auto StopListeningForWiiRemotes() -> void override;
auto IsEventPushMode() -> bool override;
auto ContainsPythonDist() -> bool override;
auto GetPlatformName() -> std::string override;
auto GetSubplatformName() -> std::string override;
+ auto DoClipboardIsSupported() -> bool override;
+ auto DoClipboardHasText() -> bool override;
+ auto DoClipboardSetText(const std::string& text) -> void override;
+ auto DoClipboardGetText() -> std::string override;
+
+ /// Return current text from the clipboard. Raises an Exception if
+ /// clipboard is unsupported or if there's no text on the clipboard.
+ auto ClipboardGetText() -> std::string;
+
private:
// std::mutex log_mutex_;
// std::string log_line_;
diff --git a/src/ballistica/platform/platform.cc b/src/ballistica/platform/platform.cc
index 5c6c228d..d6092d51 100644
--- a/src/ballistica/platform/platform.cc
+++ b/src/ballistica/platform/platform.cc
@@ -1479,7 +1479,9 @@ auto Platform::DoClipboardGetText() -> std::string {
if (out == nullptr) {
throw Exception("Error fetching clipboard contents.", PyExcType::kRuntime);
}
- return out;
+ std::string out_s{out};
+ SDL_free(out);
+ return out_s;
#else
// Shouldn't get here since we default to no clipboard support.
FatalError("Shouldn't get here.");