mirror of
https://github.com/RYDE-WORK/ballistica.git
synced 2026-02-08 16:53:49 +08:00
v1.7.12
This commit is contained in:
parent
4db45e9401
commit
7900e23033
118
.efrocachemap
118
.efrocachemap
@ -420,41 +420,41 @@
|
|||||||
"assets/build/ba_data/audio/zoeOw.ogg": "https://files.ballistica.net/cache/ba1/60/ad/38269b7f1c7dc20cb9a506cd0681",
|
"assets/build/ba_data/audio/zoeOw.ogg": "https://files.ballistica.net/cache/ba1/60/ad/38269b7f1c7dc20cb9a506cd0681",
|
||||||
"assets/build/ba_data/audio/zoePickup01.ogg": "https://files.ballistica.net/cache/ba1/72/85/d6fc4d16b7081d91fba2850b5b10",
|
"assets/build/ba_data/audio/zoePickup01.ogg": "https://files.ballistica.net/cache/ba1/72/85/d6fc4d16b7081d91fba2850b5b10",
|
||||||
"assets/build/ba_data/audio/zoeScream01.ogg": "https://files.ballistica.net/cache/ba1/e9/ae/1d674d0c086eaa0bd1c3b1db0505",
|
"assets/build/ba_data/audio/zoeScream01.ogg": "https://files.ballistica.net/cache/ba1/e9/ae/1d674d0c086eaa0bd1c3b1db0505",
|
||||||
"assets/build/ba_data/data/langdata.json": "https://files.ballistica.net/cache/ba1/9a/eb/d3f20cfa6c8a11a49047b1723a00",
|
"assets/build/ba_data/data/langdata.json": "https://files.ballistica.net/cache/ba1/25/11/cfcf4238fb55433521e26cce0d10",
|
||||||
"assets/build/ba_data/data/languages/arabic.json": "https://files.ballistica.net/cache/ba1/e2/24/5e7ea9ca5c9de4d3b7a28e53564d",
|
"assets/build/ba_data/data/languages/arabic.json": "https://files.ballistica.net/cache/ba1/e2/24/5e7ea9ca5c9de4d3b7a28e53564d",
|
||||||
"assets/build/ba_data/data/languages/belarussian.json": "https://files.ballistica.net/cache/ba1/61/03/89070ca765e06da3a419a579f503",
|
"assets/build/ba_data/data/languages/belarussian.json": "https://files.ballistica.net/cache/ba1/61/03/89070ca765e06da3a419a579f503",
|
||||||
"assets/build/ba_data/data/languages/chinese.json": "https://files.ballistica.net/cache/ba1/f8/15/e1a2fa38697417bcf2cf19cd34ef",
|
"assets/build/ba_data/data/languages/chinese.json": "https://files.ballistica.net/cache/ba1/ea/22/bb0950095686a71030c67ac74b3b",
|
||||||
"assets/build/ba_data/data/languages/chinesetraditional.json": "https://files.ballistica.net/cache/ba1/44/aa/c12568afb4558dc7f9f2fa155467",
|
"assets/build/ba_data/data/languages/chinesetraditional.json": "https://files.ballistica.net/cache/ba1/3c/22/78a56fc40426ab19ad4e76924b78",
|
||||||
"assets/build/ba_data/data/languages/croatian.json": "https://files.ballistica.net/cache/ba1/c9/73/01a1343af814131b1ee96af0b687",
|
"assets/build/ba_data/data/languages/croatian.json": "https://files.ballistica.net/cache/ba1/c9/73/01a1343af814131b1ee96af0b687",
|
||||||
"assets/build/ba_data/data/languages/czech.json": "https://files.ballistica.net/cache/ba1/19/c5/7fab8fbd8c2b78bd5fc11cf6bfdd",
|
"assets/build/ba_data/data/languages/czech.json": "https://files.ballistica.net/cache/ba1/61/20/01291c2cb72b22f204730c0d7574",
|
||||||
"assets/build/ba_data/data/languages/danish.json": "https://files.ballistica.net/cache/ba1/3f/46/e4da3c1d2b0ebf916df55c608b28",
|
"assets/build/ba_data/data/languages/danish.json": "https://files.ballistica.net/cache/ba1/6a/fa/fcf4a804beaff927b0f12c179eaa",
|
||||||
"assets/build/ba_data/data/languages/dutch.json": "https://files.ballistica.net/cache/ba1/68/93/da8e9874f41a786edf52ba4ccaad",
|
"assets/build/ba_data/data/languages/dutch.json": "https://files.ballistica.net/cache/ba1/68/93/da8e9874f41a786edf52ba4ccaad",
|
||||||
"assets/build/ba_data/data/languages/english.json": "https://files.ballistica.net/cache/ba1/df/08/29edc91f648c34c3aa7960e04c13",
|
"assets/build/ba_data/data/languages/english.json": "https://files.ballistica.net/cache/ba1/df/08/29edc91f648c34c3aa7960e04c13",
|
||||||
"assets/build/ba_data/data/languages/esperanto.json": "https://files.ballistica.net/cache/ba1/4c/c7/0184b8178869d1a3827a1bfcd5bb",
|
"assets/build/ba_data/data/languages/esperanto.json": "https://files.ballistica.net/cache/ba1/4c/c7/0184b8178869d1a3827a1bfcd5bb",
|
||||||
"assets/build/ba_data/data/languages/filipino.json": "https://files.ballistica.net/cache/ba1/e9/07/b2dc862601bcd70701b083d43279",
|
"assets/build/ba_data/data/languages/filipino.json": "https://files.ballistica.net/cache/ba1/c7/2e/e0520f58206da01b829e02ff4576",
|
||||||
"assets/build/ba_data/data/languages/french.json": "https://files.ballistica.net/cache/ba1/2e/48/b0a8fafc5e5436e99d9a3d697d23",
|
"assets/build/ba_data/data/languages/french.json": "https://files.ballistica.net/cache/ba1/e8/84/6c9f123e9a0d82fc595c8f55ac7c",
|
||||||
"assets/build/ba_data/data/languages/german.json": "https://files.ballistica.net/cache/ba1/8a/09/3e0fa9e44913b53f4dab195d3fae",
|
"assets/build/ba_data/data/languages/german.json": "https://files.ballistica.net/cache/ba1/8a/09/3e0fa9e44913b53f4dab195d3fae",
|
||||||
"assets/build/ba_data/data/languages/gibberish.json": "https://files.ballistica.net/cache/ba1/08/15/13981ce51e1e9f974357a9e0a59c",
|
"assets/build/ba_data/data/languages/gibberish.json": "https://files.ballistica.net/cache/ba1/08/15/13981ce51e1e9f974357a9e0a59c",
|
||||||
"assets/build/ba_data/data/languages/greek.json": "https://files.ballistica.net/cache/ba1/aa/da/dfc8d710af960d7300c7090faeab",
|
"assets/build/ba_data/data/languages/greek.json": "https://files.ballistica.net/cache/ba1/aa/da/dfc8d710af960d7300c7090faeab",
|
||||||
"assets/build/ba_data/data/languages/hindi.json": "https://files.ballistica.net/cache/ba1/91/98/42701cd595c2f70b7484614a8f49",
|
"assets/build/ba_data/data/languages/hindi.json": "https://files.ballistica.net/cache/ba1/91/98/42701cd595c2f70b7484614a8f49",
|
||||||
"assets/build/ba_data/data/languages/hungarian.json": "https://files.ballistica.net/cache/ba1/d8/f2/aa16bc336bd7660cc86c3264bfc4",
|
"assets/build/ba_data/data/languages/hungarian.json": "https://files.ballistica.net/cache/ba1/d8/f2/aa16bc336bd7660cc86c3264bfc4",
|
||||||
"assets/build/ba_data/data/languages/indonesian.json": "https://files.ballistica.net/cache/ba1/82/76/1ca7ba627f34be34961de40fe91f",
|
"assets/build/ba_data/data/languages/indonesian.json": "https://files.ballistica.net/cache/ba1/0d/b4/e225e3838c4b5d9381dcc4594517",
|
||||||
"assets/build/ba_data/data/languages/italian.json": "https://files.ballistica.net/cache/ba1/1a/10/9563348e729d1e5c8ae8c9cbc1f2",
|
"assets/build/ba_data/data/languages/italian.json": "https://files.ballistica.net/cache/ba1/12/62/862228b229057877e89fb195d41d",
|
||||||
"assets/build/ba_data/data/languages/korean.json": "https://files.ballistica.net/cache/ba1/7c/38/d4a44c481757d355836f292ede48",
|
"assets/build/ba_data/data/languages/korean.json": "https://files.ballistica.net/cache/ba1/7c/38/d4a44c481757d355836f292ede48",
|
||||||
"assets/build/ba_data/data/languages/persian.json": "https://files.ballistica.net/cache/ba1/df/b1/b2c9ebaad5e873ebedd365726d3d",
|
"assets/build/ba_data/data/languages/persian.json": "https://files.ballistica.net/cache/ba1/df/b1/b2c9ebaad5e873ebedd365726d3d",
|
||||||
"assets/build/ba_data/data/languages/polish.json": "https://files.ballistica.net/cache/ba1/19/e9/59c891b1fb85f3ba9f19283c233d",
|
"assets/build/ba_data/data/languages/polish.json": "https://files.ballistica.net/cache/ba1/19/e9/59c891b1fb85f3ba9f19283c233d",
|
||||||
"assets/build/ba_data/data/languages/portuguese.json": "https://files.ballistica.net/cache/ba1/6b/9c/0c8fe0e4d5fc0c29b95ad798ee23",
|
"assets/build/ba_data/data/languages/portuguese.json": "https://files.ballistica.net/cache/ba1/61/5b/847c03407d1c3a85866833323676",
|
||||||
"assets/build/ba_data/data/languages/romanian.json": "https://files.ballistica.net/cache/ba1/d7/06/9d70642d0a4d1e3b1c2149d7a17c",
|
"assets/build/ba_data/data/languages/romanian.json": "https://files.ballistica.net/cache/ba1/d7/06/9d70642d0a4d1e3b1c2149d7a17c",
|
||||||
"assets/build/ba_data/data/languages/russian.json": "https://files.ballistica.net/cache/ba1/8d/c1/90cc02326100ccee7f03d0cb42b7",
|
"assets/build/ba_data/data/languages/russian.json": "https://files.ballistica.net/cache/ba1/34/ed/b97350983272e4b23bf140d7a5f4",
|
||||||
"assets/build/ba_data/data/languages/serbian.json": "https://files.ballistica.net/cache/ba1/4e/91/6f2a9a3ce733908e91377a6ddb9a",
|
"assets/build/ba_data/data/languages/serbian.json": "https://files.ballistica.net/cache/ba1/4e/91/6f2a9a3ce733908e91377a6ddb9a",
|
||||||
"assets/build/ba_data/data/languages/slovak.json": "https://files.ballistica.net/cache/ba1/f9/4b/d9f01814224066856695452ef57c",
|
"assets/build/ba_data/data/languages/slovak.json": "https://files.ballistica.net/cache/ba1/f9/4b/d9f01814224066856695452ef57c",
|
||||||
"assets/build/ba_data/data/languages/spanish.json": "https://files.ballistica.net/cache/ba1/ce/be/2f06c3436871fd464ff3a62597d9",
|
"assets/build/ba_data/data/languages/spanish.json": "https://files.ballistica.net/cache/ba1/ce/be/2f06c3436871fd464ff3a62597d9",
|
||||||
"assets/build/ba_data/data/languages/swedish.json": "https://files.ballistica.net/cache/ba1/91/0a/35c4baf539d5951fc03a794c0e0b",
|
"assets/build/ba_data/data/languages/swedish.json": "https://files.ballistica.net/cache/ba1/91/0a/35c4baf539d5951fc03a794c0e0b",
|
||||||
"assets/build/ba_data/data/languages/tamil.json": "https://files.ballistica.net/cache/ba1/94/1a/533bc718e676191bafc25e2dc98f",
|
"assets/build/ba_data/data/languages/tamil.json": "https://files.ballistica.net/cache/ba1/64/22/7bc899ecbec52cf978a1faf1c127",
|
||||||
"assets/build/ba_data/data/languages/thai.json": "https://files.ballistica.net/cache/ba1/f7/df/7ba5f99c5c2c4c86fc0503fcf0b7",
|
"assets/build/ba_data/data/languages/thai.json": "https://files.ballistica.net/cache/ba1/f7/df/7ba5f99c5c2c4c86fc0503fcf0b7",
|
||||||
"assets/build/ba_data/data/languages/turkish.json": "https://files.ballistica.net/cache/ba1/9a/90/8e2ed626def09f88c3b9ab5215a3",
|
"assets/build/ba_data/data/languages/turkish.json": "https://files.ballistica.net/cache/ba1/ee/08/1f77c7c320d8d8504a11ee495db3",
|
||||||
"assets/build/ba_data/data/languages/ukrainian.json": "https://files.ballistica.net/cache/ba1/ab/35/644e4239cfa62a597a905412b90c",
|
"assets/build/ba_data/data/languages/ukrainian.json": "https://files.ballistica.net/cache/ba1/f3/92/fd7ee5fa8a92fcc8fd2219a88a2f",
|
||||||
"assets/build/ba_data/data/languages/venetian.json": "https://files.ballistica.net/cache/ba1/22/8e/3fccd3a8c9761c9e60ee4f5ecd85",
|
"assets/build/ba_data/data/languages/venetian.json": "https://files.ballistica.net/cache/ba1/2e/86/10d3e39d35014d039cc9ea886ca7",
|
||||||
"assets/build/ba_data/data/languages/vietnamese.json": "https://files.ballistica.net/cache/ba1/1f/ae/abe3f105b3c4b51f6b7942773305",
|
"assets/build/ba_data/data/languages/vietnamese.json": "https://files.ballistica.net/cache/ba1/1f/ae/abe3f105b3c4b51f6b7942773305",
|
||||||
"assets/build/ba_data/data/maps/big_g.json": "https://files.ballistica.net/cache/ba1/47/0a/a617cc85d927b576c4e6fc1091ed",
|
"assets/build/ba_data/data/maps/big_g.json": "https://files.ballistica.net/cache/ba1/47/0a/a617cc85d927b576c4e6fc1091ed",
|
||||||
"assets/build/ba_data/data/maps/bridgit.json": "https://files.ballistica.net/cache/ba1/03/4b/57ee9b42854b26f23f81bd8c58ef",
|
"assets/build/ba_data/data/maps/bridgit.json": "https://files.ballistica.net/cache/ba1/03/4b/57ee9b42854b26f23f81bd8c58ef",
|
||||||
@ -4003,50 +4003,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/__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/1c/77/ac670a5118abdf8a7687af0e159b",
|
"assets/src/ba_data/python/ba/_generated/enums.py": "https://files.ballistica.net/cache/ba1/1c/77/ac670a5118abdf8a7687af0e159b",
|
||||||
"ballisticacore-windows/Generic/BallisticaCore.ico": "https://files.ballistica.net/cache/ba1/89/c0/e32c7d2a35dc9aef57cc73b0911a",
|
"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/5e/48/354e3b63adf1b81a40c1d2f1e0fb",
|
"build/prefab/full/linux_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/25/c1/91a48aca063af359c132049b8197",
|
||||||
"build/prefab/full/linux_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/21/6d/f6433bcd3a4682ad5f44a724cedd",
|
"build/prefab/full/linux_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/43/11/80e9836994ab9583053b25e528d8",
|
||||||
"build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/3a/1a/ea630876f62f4b3b7b799d6323b1",
|
"build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/f9/3b/4709b8451aecdbc048eef15d01eb",
|
||||||
"build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/08/8c/87e7f56a0f66064a53f70e0bd3f6",
|
"build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/03/ae/ee60be4a8b4800b90d1e29691518",
|
||||||
"build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/e1/2c/f5fb11983aca2855e9ee0ba2e5dd",
|
"build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/97/4f/cfee84e252f8b0b7571035f5883b",
|
||||||
"build/prefab/full/linux_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/9e/d5/e793e83bf0fb26817091c22aef16",
|
"build/prefab/full/linux_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/68/f6/5b2d8461aba116b7071ebb5dac2b",
|
||||||
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/1f/ac/b215701ff340222dab77f303d5fd",
|
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/a6/7a/0d72ca4eda2320d6b78feaf6de84",
|
||||||
"build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/f0/5c/78bea7e51781d6f2888867ca5be5",
|
"build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/19/5b/183980b86e0af44a4dad40c874c1",
|
||||||
"build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/29/75/718ad217e3948a7418a6366e91c3",
|
"build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/51/44/3f426d8fb643b0b1d2fe3d5197c0",
|
||||||
"build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/46/5a/2c1f20eb101ae08785038ad397d4",
|
"build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/b7/5c/16040bb5fc81e53872880a942f93",
|
||||||
"build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/58/b2/ef20d61be8192fc906c8cc665022",
|
"build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/91/c4/ae905a45513e4b274a618320d4b9",
|
||||||
"build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/f8/35/8f46daa43dc357b438cdafaa44c0",
|
"build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/29/4d/2c46d9c3c20631ce2eb68ad40211",
|
||||||
"build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/72/73/84586a76cda423aa020e2bf4d1b9",
|
"build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/13/76/9b2ae697273b918ba1bab69a7157",
|
||||||
"build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/3e/53/87a14be9f865901c76cb468bd23c",
|
"build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/16/c4/4794acfebd1caee39225de24ad69",
|
||||||
"build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/57/57/a93d124c30dc513731e995a2fc35",
|
"build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/0d/b2/0e379d5edb40f49d3a0b0abb0c05",
|
||||||
"build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/73/b2/815428ea403f7c172adaa7c1880d",
|
"build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/b3/92/e6914cd28f76d2f69d58502a4d8b",
|
||||||
"build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/df/ae/1c8f9e6e5ac182528b59764ba2ec",
|
"build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/3a/53/e128b1b67fcc81ebe7b4a46faf8f",
|
||||||
"build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/7d/4c/de308ea636089d4081fec336204e",
|
"build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/dd/1f/288de55d2ded8451643d94ba5d24",
|
||||||
"build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/e1/bc/57f69a5e827136993fe632406d37",
|
"build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/2e/1e/61a605506c87d391fe5b433d1403",
|
||||||
"build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/e4/68/39916efa4879fa3d93d2704402af",
|
"build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/f2/e0/94772098ebb18f631dbe78ab6130",
|
||||||
"build/prefab/lib/linux_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/58/6b/fac212417bcb5851ef75783ccc9b",
|
"build/prefab/lib/linux_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/71/7e/cc04f1d847d7d7002a8452eeee19",
|
||||||
"build/prefab/lib/linux_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/5c/18/04a0ef7d2da19b204f6beaf12671",
|
"build/prefab/lib/linux_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/24/00/1bd70964db65d179f2c6779d8982",
|
||||||
"build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/04/8c/a80aa418ddb5db66e32eac4bcfe8",
|
"build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/16/88/93dd42830a0175d5830747a713b8",
|
||||||
"build/prefab/lib/linux_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/b6/1d/c6edb81afdaff56c91b9e58f5d86",
|
"build/prefab/lib/linux_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/52/61/b324c91bd0b077a9206d294d52fb",
|
||||||
"build/prefab/lib/linux_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/72/01/565daf2d42a3d7d8f53ceeca6b30",
|
"build/prefab/lib/linux_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/84/8e/fbebd6c94cdcf46688b9e38ed8d8",
|
||||||
"build/prefab/lib/linux_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/f0/c6/d7f01e55288c9f735cd16982d346",
|
"build/prefab/lib/linux_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/e9/94/3e87cc52ee7023beb33b8615d86d",
|
||||||
"build/prefab/lib/linux_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/0f/08/1af07293e2c2f711e208e220589f",
|
"build/prefab/lib/linux_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/e9/2e/466ad54052a7100921e3e748743e",
|
||||||
"build/prefab/lib/linux_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/4d/da/9f84cdbf6893019e9f312159a135",
|
"build/prefab/lib/linux_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/c7/8f/d3e170f94e48ce122c8cab724791",
|
||||||
"build/prefab/lib/mac_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/0d/8b/1c8bef2677c8019fc47d6295b950",
|
"build/prefab/lib/mac_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/f0/f5/6a7983215a5582bed19f561afc4c",
|
||||||
"build/prefab/lib/mac_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d6/94/b5808b657d70a533904b83372033",
|
"build/prefab/lib/mac_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/ff/37/32e4499e0c163ea025257fe884e9",
|
||||||
"build/prefab/lib/mac_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/50/de/e8a479118f1f0a85cf076947385c",
|
"build/prefab/lib/mac_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/db/ce/0da23791696b0c16a157a0401e82",
|
||||||
"build/prefab/lib/mac_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/4c/a5/223faacd74a7df21ce588bd877e0",
|
"build/prefab/lib/mac_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/a4/1e/b453b7454f4bfd81cbba6d4f0a68",
|
||||||
"build/prefab/lib/mac_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/c1/7b/36a20200b32e40d5c7789774cae3",
|
"build/prefab/lib/mac_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d0/14/5ffa8a2415f14d1ea9ffe9cf4125",
|
||||||
"build/prefab/lib/mac_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/b1/f1/658e04e51212830d1d0bc4dfcf98",
|
"build/prefab/lib/mac_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/30/1a/7c959297e7ef46f7e9280b67a861",
|
||||||
"build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/5b/ab/4441a951acf01a5e0ecb3456b08c",
|
"build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/69/e6/e5c6a65e42307a86cf4e3fcac729",
|
||||||
"build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/37/0b/58ca3c4f357e5af96d5c0670f473",
|
"build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/5c/6d/ee68f9f9c28363dda0c6b6290c6e",
|
||||||
"build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/77/36/384cd7c45db39ae18bfcd089d728",
|
"build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/f5/c1/86511c74fdc0dbffd9bae04b557e",
|
||||||
"build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/71/a7/28df114b036f4a9a4de1ad1e57e5",
|
"build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/1c/4d/4aa5bfbe1c05a3f1d324d9404315",
|
||||||
"build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/42/65/fc84a4d62423352de7c232bc25c0",
|
"build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/2a/78/7380dc896cbead611c7a191b81a6",
|
||||||
"build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/51/1e/cc38e33b8e84805463880c484966",
|
"build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/d8/bb/b49f9176ae9c814e1850c018254a",
|
||||||
"build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/6f/a5/deb805afc5f741dfb3891798bbd8",
|
"build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/3d/7f/8b4147fdb2a3d6353b24fca7335f",
|
||||||
"build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/3a/61/22ef83f4154ba1b438f07108f1c9",
|
"build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/52/9d/4f8294fda439dca8b9b32c5e3936",
|
||||||
"build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/ee/98/2cf472347862d7fde2562b512a2a",
|
"build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/78/ce/1b5d8ce25f71fa509b626e55d8fb",
|
||||||
"build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/fa/34/04770e9cf2bf915ab6b4679f6419",
|
"build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/75/af/455bcadaa37686b1593233b855d3",
|
||||||
"src/ballistica/generated/python_embedded/binding.inc": "https://files.ballistica.net/cache/ba1/c0/32/b7907e3859a5c5013a3d97b6b523",
|
"src/ballistica/generated/python_embedded/binding.inc": "https://files.ballistica.net/cache/ba1/c0/32/b7907e3859a5c5013a3d97b6b523",
|
||||||
"src/ballistica/generated/python_embedded/bootstrap.inc": "https://files.ballistica.net/cache/ba1/2d/4f/f4fe67827f36cd59cd5193333a02",
|
"src/ballistica/generated/python_embedded/bootstrap.inc": "https://files.ballistica.net/cache/ba1/2d/4f/f4fe67827f36cd59cd5193333a02",
|
||||||
"src/ballistica/generated/python_embedded/bootstrap_monolithic.inc": "https://files.ballistica.net/cache/ba1/ef/c1/aa5f1aa10af89f5c0b1e616355fd"
|
"src/ballistica/generated/python_embedded/bootstrap_monolithic.inc": "https://files.ballistica.net/cache/ba1/ef/c1/aa5f1aa10af89f5c0b1e616355fd"
|
||||||
|
|||||||
@ -1,4 +1,7 @@
|
|||||||
### 1.7.12 (build 20911, api 7, 2022-10-17)
|
### 1.7.12 (build 20913, api 7, 2022-10-17)
|
||||||
|
- Disabled some live-objects warnings as it seems their use of certain gc module functionality might be causing some rare errors/crashes. On further inspection, it turns out that is technically expected. Basically those calls are useful for debugging but can break things. Added a note at the top of efro.debug elaborating on the situation. We can reimplement similar warnings later in a safe manner.
|
||||||
|
- Removed `ba._general.print_active_refs()` because the newer stuff in efro.debug does the same thing better.
|
||||||
|
- Bug fixes related to v2 account connections.
|
||||||
|
|
||||||
### 1.7.11 (build 20909, api 7, 2022-10-15)
|
### 1.7.11 (build 20909, api 7, 2022-10-15)
|
||||||
- Switched our Python autoformatting from yapf to black. The yapf project seems to be mostly dead whereas black seems to be thriving. The final straw was yapf not supporting the `match` statement in Python 3.10.
|
- Switched our Python autoformatting from yapf to black. The yapf project seems to be mostly dead whereas black seems to be thriving. The final straw was yapf not supporting the `match` statement in Python 3.10.
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
31242320059036633417109806113241486230
|
114683483191152240226942293819570296816
|
||||||
@ -735,31 +735,20 @@ class Activity(DependencyComponent, Generic[PlayerType, TeamType]):
|
|||||||
and/or print debugging info if the Activity still exists.
|
and/or print debugging info if the Activity still exists.
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
import gc
|
|
||||||
import types
|
|
||||||
|
|
||||||
activity = activity_ref()
|
activity = activity_ref()
|
||||||
print(
|
print(
|
||||||
'ERROR: Activity is not dying when expected:',
|
'ERROR: Activity is not dying when expected:',
|
||||||
activity,
|
activity,
|
||||||
'(warning ' + str(counter[0] + 1) + ')',
|
'(warning ' + str(counter[0] + 1) + ')',
|
||||||
)
|
)
|
||||||
print('This means something is still strong-referencing it.')
|
print(
|
||||||
|
'This means something is still strong-referencing it.\n'
|
||||||
|
'Check out methods such as efro.debug.printrefs() to'
|
||||||
|
' help debug this sort of thing.'
|
||||||
|
)
|
||||||
|
# Note: no longer calling gc.get_referrers() here because it's
|
||||||
|
# usage can bork stuff. (see notes at top of efro.debug)
|
||||||
counter[0] += 1
|
counter[0] += 1
|
||||||
|
|
||||||
# FIXME: Running the code below shows us references but winds up
|
|
||||||
# keeping the object alive; need to figure out why.
|
|
||||||
# For now we just print refs if the count gets to 3, and then we
|
|
||||||
# kill the app at 4 so it doesn't matter anyway.
|
|
||||||
if counter[0] == 3:
|
|
||||||
print('Activity references for', activity, ':')
|
|
||||||
refs = list(gc.get_referrers(activity))
|
|
||||||
i = 1
|
|
||||||
for ref in refs:
|
|
||||||
if isinstance(ref, types.FrameType):
|
|
||||||
continue
|
|
||||||
print(' reference', i, ':', ref)
|
|
||||||
i += 1
|
|
||||||
if counter[0] == 4:
|
if counter[0] == 4:
|
||||||
print('Killing app due to stuck activity... :-(')
|
print('Killing app due to stuck activity... :-(')
|
||||||
_ba.quit()
|
_ba.quit()
|
||||||
|
|||||||
@ -170,7 +170,13 @@ def garbage_collect_session_end() -> None:
|
|||||||
print('PYTHON GC FOUND', len(gc.garbage), 'UNCOLLECTIBLE OBJECTS:')
|
print('PYTHON GC FOUND', len(gc.garbage), 'UNCOLLECTIBLE OBJECTS:')
|
||||||
for i, obj in enumerate(gc.garbage):
|
for i, obj in enumerate(gc.garbage):
|
||||||
print(str(i) + ':', obj)
|
print(str(i) + ':', obj)
|
||||||
print_live_object_warnings('after session shutdown')
|
|
||||||
|
# NOTE: no longer running these checks. Perhaps we can allow
|
||||||
|
# running them with an explicit flag passed, but we should never
|
||||||
|
# run them by default because gc.get_objects() can mess up the app.
|
||||||
|
# See notes at top of efro.debug.
|
||||||
|
if bool(False):
|
||||||
|
print_live_object_warnings('after session shutdown')
|
||||||
|
|
||||||
|
|
||||||
def garbage_collect() -> None:
|
def garbage_collect() -> None:
|
||||||
@ -190,7 +196,11 @@ def print_live_object_warnings(
|
|||||||
ignore_session: ba.Session | None = None,
|
ignore_session: ba.Session | None = None,
|
||||||
ignore_activity: ba.Activity | None = None,
|
ignore_activity: ba.Activity | None = None,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Print warnings for remaining objects in the current context."""
|
"""Print warnings for remaining objects in the current context.
|
||||||
|
|
||||||
|
IMPORTANT - don't call this in production; usage of gc.get_objects()
|
||||||
|
can bork Python. See notes at top of efro.debug module.
|
||||||
|
"""
|
||||||
# pylint: disable=cyclic-import
|
# pylint: disable=cyclic-import
|
||||||
from ba._session import Session
|
from ba._session import Session
|
||||||
from ba._actor import Actor
|
from ba._actor import Actor
|
||||||
|
|||||||
@ -47,7 +47,7 @@ def bootstrap() -> None:
|
|||||||
|
|
||||||
# Give a soft warning if we're being used with a different binary
|
# Give a soft warning if we're being used with a different binary
|
||||||
# version than we expect.
|
# version than we expect.
|
||||||
expected_build = 20911
|
expected_build = 20913
|
||||||
running_build: int = env['build_number']
|
running_build: int = env['build_number']
|
||||||
if running_build != expected_build:
|
if running_build != expected_build:
|
||||||
print(
|
print(
|
||||||
|
|||||||
@ -3,7 +3,6 @@
|
|||||||
"""Utility snippets applying to generic Python code."""
|
"""Utility snippets applying to generic Python code."""
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import gc
|
|
||||||
import types
|
import types
|
||||||
import weakref
|
import weakref
|
||||||
import random
|
import random
|
||||||
@ -16,7 +15,6 @@ from ba._error import print_error, print_exception
|
|||||||
from ba._generated.enums import TimeType
|
from ba._generated.enums import TimeType
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from types import FrameType
|
|
||||||
from typing import Any
|
from typing import Any
|
||||||
from efro.call import Call as Call # 'as Call' so we re-export.
|
from efro.call import Call as Call # 'as Call' so we re-export.
|
||||||
|
|
||||||
@ -125,19 +123,6 @@ def utf8_all(data: Any) -> Any:
|
|||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
def print_refs(obj: Any) -> None:
|
|
||||||
"""Print a list of known live references to an object."""
|
|
||||||
|
|
||||||
# Hmmm; I just noticed that calling this on an object
|
|
||||||
# seems to keep it alive. Should figure out why.
|
|
||||||
print('REFERENCES FOR', obj, ':')
|
|
||||||
refs = list(gc.get_referrers(obj))
|
|
||||||
i = 1
|
|
||||||
for ref in refs:
|
|
||||||
print(' ref', i, ':', ref)
|
|
||||||
i += 1
|
|
||||||
|
|
||||||
|
|
||||||
def get_type_name(cls: type) -> str:
|
def get_type_name(cls: type) -> str:
|
||||||
"""Return a full type name including module for a class."""
|
"""Return a full type name including module for a class."""
|
||||||
return cls.__module__ + '.' + cls.__name__
|
return cls.__module__ + '.' + cls.__name__
|
||||||
@ -332,56 +317,6 @@ def verify_object_death(obj: object) -> None:
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def print_active_refs(obj: Any) -> None:
|
|
||||||
"""Print info about things referencing a given object.
|
|
||||||
|
|
||||||
Category: **General Utility Functions**
|
|
||||||
|
|
||||||
Useful for tracking down cyclical references and causes for zombie objects.
|
|
||||||
"""
|
|
||||||
# pylint: disable=too-many-nested-blocks
|
|
||||||
from types import FrameType, TracebackType
|
|
||||||
|
|
||||||
refs = list(gc.get_referrers(obj))
|
|
||||||
print(f'{Clr.YLW}Active referrers to {obj}:{Clr.RST}')
|
|
||||||
for i, ref in enumerate(refs):
|
|
||||||
print(f'{Clr.YLW}#{i+1}:{Clr.BLU} {ref}{Clr.RST}')
|
|
||||||
|
|
||||||
# For certain types of objects such as stack frames, show what is
|
|
||||||
# keeping *them* alive too.
|
|
||||||
if isinstance(ref, FrameType):
|
|
||||||
print(f'{Clr.YLW} Active referrers to #{i+1}:{Clr.RST}')
|
|
||||||
refs2 = list(gc.get_referrers(ref))
|
|
||||||
for j, ref2 in enumerate(refs2):
|
|
||||||
print(f'{Clr.YLW} #a{j+1}:{Clr.BLU} {ref2}{Clr.RST}')
|
|
||||||
|
|
||||||
# Can go further down the rabbit-hole if needed...
|
|
||||||
if bool(False):
|
|
||||||
if isinstance(ref2, TracebackType):
|
|
||||||
print(
|
|
||||||
f'{Clr.YLW} '
|
|
||||||
f'Active referrers to #a{j+1}:{Clr.RST}'
|
|
||||||
)
|
|
||||||
refs3 = list(gc.get_referrers(ref2))
|
|
||||||
for k, ref3 in enumerate(refs3):
|
|
||||||
print(
|
|
||||||
f'{Clr.YLW} '
|
|
||||||
f'#b{k+1}:{Clr.BLU} {ref3}{Clr.RST}'
|
|
||||||
)
|
|
||||||
|
|
||||||
if isinstance(ref3, BaseException):
|
|
||||||
print(
|
|
||||||
f'{Clr.YLW} Active referrers to'
|
|
||||||
f' #b{k+1}:{Clr.RST}'
|
|
||||||
)
|
|
||||||
refs4 = list(gc.get_referrers(ref3))
|
|
||||||
for x, ref4 in enumerate(refs4):
|
|
||||||
print(
|
|
||||||
f'{Clr.YLW} #c{x+1}:{Clr.BLU}'
|
|
||||||
f' {ref4}{Clr.RST}'
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def _verify_object_death(wref: weakref.ref) -> None:
|
def _verify_object_death(wref: weakref.ref) -> None:
|
||||||
obj = wref()
|
obj = wref()
|
||||||
if obj is None:
|
if obj is None:
|
||||||
@ -395,9 +330,9 @@ def _verify_object_death(wref: weakref.ref) -> None:
|
|||||||
|
|
||||||
print(
|
print(
|
||||||
f'{Clr.RED}Error: {name} not dying when expected to:'
|
f'{Clr.RED}Error: {name} not dying when expected to:'
|
||||||
f' {Clr.BLD}{obj}{Clr.RST}'
|
f' {Clr.BLD}{obj}{Clr.RST}\n'
|
||||||
|
'See efro.debug for ways to debug this.'
|
||||||
)
|
)
|
||||||
print_active_refs(obj)
|
|
||||||
|
|
||||||
|
|
||||||
def storagename(suffix: str | None = None) -> str:
|
def storagename(suffix: str | None = None) -> str:
|
||||||
|
|||||||
@ -11,7 +11,6 @@ from typing import TYPE_CHECKING, cast, Type
|
|||||||
|
|
||||||
import _ba
|
import _ba
|
||||||
from ba._generated.enums import TimeType
|
from ba._generated.enums import TimeType
|
||||||
from ba._general import print_active_refs
|
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from typing import Any
|
from typing import Any
|
||||||
@ -230,10 +229,9 @@ def ui_upkeep() -> None:
|
|||||||
'WARNING:',
|
'WARNING:',
|
||||||
obj,
|
obj,
|
||||||
'is still alive 5 second after its widget died;'
|
'is still alive 5 second after its widget died;'
|
||||||
' you might have a memory leak.',
|
' you might have a memory leak. See efro.debug module'
|
||||||
|
' for tools to help debug this.',
|
||||||
)
|
)
|
||||||
print_active_refs(obj)
|
|
||||||
|
|
||||||
else:
|
else:
|
||||||
remainingchecks.append(check)
|
remainingchecks.append(check)
|
||||||
ui.cleanupchecks = remainingchecks
|
ui.cleanupchecks = remainingchecks
|
||||||
|
|||||||
@ -32,7 +32,7 @@
|
|||||||
namespace ballistica {
|
namespace ballistica {
|
||||||
|
|
||||||
// These are set automatically via script; don't modify them here.
|
// These are set automatically via script; don't modify them here.
|
||||||
const int kAppBuildNumber = 20911;
|
const int kAppBuildNumber = 20913;
|
||||||
const char* kAppVersion = "1.7.12";
|
const char* kAppVersion = "1.7.12";
|
||||||
|
|
||||||
// Our standalone globals.
|
// Our standalone globals.
|
||||||
|
|||||||
@ -155,13 +155,18 @@ auto PyGetCollisionInfo(PyObject* self, PyObject* args) -> PyObject* {
|
|||||||
return DoGetCollideValue(dynamics, c, PyUnicode_AsUTF8(obj));
|
return DoGetCollideValue(dynamics, c, PyUnicode_AsUTF8(obj));
|
||||||
} else if (PyTuple_Check(obj)) {
|
} else if (PyTuple_Check(obj)) {
|
||||||
Py_ssize_t size = PyTuple_GET_SIZE(obj);
|
Py_ssize_t size = PyTuple_GET_SIZE(obj);
|
||||||
|
|
||||||
|
// NOTE: Need to make sure we never release the GIL or call out to
|
||||||
|
// code that could access gc stuff while building this. Ideally should
|
||||||
|
// create contents first and then create/fill the tuple as last step.
|
||||||
|
// See https://bugs.python.org/issue15108.
|
||||||
PyObject* return_tuple = PyTuple_New(size);
|
PyObject* return_tuple = PyTuple_New(size);
|
||||||
for (Py_ssize_t i = 0; i < size; i++) {
|
for (Py_ssize_t i = 0; i < size; i++) {
|
||||||
PyObject* o = PyTuple_GET_ITEM(obj, i);
|
PyObject* o = PyTuple_GET_ITEM(obj, i);
|
||||||
if (PyUnicode_Check(o)) {
|
if (PyUnicode_Check(o)) {
|
||||||
PyObject* val_obj = DoGetCollideValue(dynamics, c, PyUnicode_AsUTF8(o));
|
PyObject* val_obj = DoGetCollideValue(dynamics, c, PyUnicode_AsUTF8(o));
|
||||||
if (val_obj) {
|
if (val_obj) {
|
||||||
PyTuple_SetItem(return_tuple, i, val_obj);
|
PyTuple_SET_ITEM(return_tuple, i, val_obj);
|
||||||
} else {
|
} else {
|
||||||
Py_DECREF(return_tuple);
|
Py_DECREF(return_tuple);
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|||||||
@ -1949,7 +1949,7 @@ auto Python::GetNodeAttr(Node* node, const char* attr_name) -> PyObject* {
|
|||||||
std::vector<float> vals = attr.GetAsFloats();
|
std::vector<float> vals = attr.GetAsFloats();
|
||||||
Py_ssize_t size = vals.size();
|
Py_ssize_t size = vals.size();
|
||||||
PyObject* vals_obj = PyTuple_New(size);
|
PyObject* vals_obj = PyTuple_New(size);
|
||||||
BA_PRECONDITION(vals_obj);
|
assert(vals_obj);
|
||||||
for (Py_ssize_t i = 0; i < size; i++) {
|
for (Py_ssize_t i = 0; i < size; i++) {
|
||||||
PyTuple_SET_ITEM(vals_obj, i, PyFloat_FromDouble(vals[i]));
|
PyTuple_SET_ITEM(vals_obj, i, PyFloat_FromDouble(vals[i]));
|
||||||
}
|
}
|
||||||
@ -1960,7 +1960,7 @@ auto Python::GetNodeAttr(Node* node, const char* attr_name) -> PyObject* {
|
|||||||
std::vector<int64_t> vals = attr.GetAsInts();
|
std::vector<int64_t> vals = attr.GetAsInts();
|
||||||
Py_ssize_t size = vals.size();
|
Py_ssize_t size = vals.size();
|
||||||
PyObject* vals_obj = PyTuple_New(size);
|
PyObject* vals_obj = PyTuple_New(size);
|
||||||
BA_PRECONDITION(vals_obj);
|
assert(vals_obj);
|
||||||
for (Py_ssize_t i = 0; i < size; i++) {
|
for (Py_ssize_t i = 0; i < size; i++) {
|
||||||
PyTuple_SET_ITEM(vals_obj, i,
|
PyTuple_SET_ITEM(vals_obj, i,
|
||||||
PyLong_FromLong(static_cast_check_fit<long>( // NOLINT
|
PyLong_FromLong(static_cast_check_fit<long>( // NOLINT
|
||||||
@ -1973,7 +1973,7 @@ auto Python::GetNodeAttr(Node* node, const char* attr_name) -> PyObject* {
|
|||||||
std::vector<Node*> vals = attr.GetAsNodes();
|
std::vector<Node*> vals = attr.GetAsNodes();
|
||||||
Py_ssize_t size = vals.size();
|
Py_ssize_t size = vals.size();
|
||||||
PyObject* vals_obj = PyTuple_New(size);
|
PyObject* vals_obj = PyTuple_New(size);
|
||||||
BA_PRECONDITION(vals_obj);
|
assert(vals_obj);
|
||||||
for (Py_ssize_t i = 0; i < size; i++) {
|
for (Py_ssize_t i = 0; i < size; i++) {
|
||||||
Node* n = vals[i];
|
Node* n = vals[i];
|
||||||
PyTuple_SET_ITEM(vals_obj, i,
|
PyTuple_SET_ITEM(vals_obj, i,
|
||||||
@ -2018,7 +2018,7 @@ auto Python::GetNodeAttr(Node* node, const char* attr_name) -> PyObject* {
|
|||||||
std::vector<Material*> vals = attr.GetAsMaterials();
|
std::vector<Material*> vals = attr.GetAsMaterials();
|
||||||
Py_ssize_t size = vals.size();
|
Py_ssize_t size = vals.size();
|
||||||
PyObject* vals_obj = PyTuple_New(size);
|
PyObject* vals_obj = PyTuple_New(size);
|
||||||
BA_PRECONDITION(vals_obj);
|
assert(vals_obj);
|
||||||
for (Py_ssize_t i = 0; i < size; i++) {
|
for (Py_ssize_t i = 0; i < size; i++) {
|
||||||
Material* m = vals[i];
|
Material* m = vals[i];
|
||||||
|
|
||||||
@ -2033,7 +2033,7 @@ auto Python::GetNodeAttr(Node* node, const char* attr_name) -> PyObject* {
|
|||||||
std::vector<Texture*> vals = attr.GetAsTextures();
|
std::vector<Texture*> vals = attr.GetAsTextures();
|
||||||
Py_ssize_t size = vals.size();
|
Py_ssize_t size = vals.size();
|
||||||
PyObject* vals_obj = PyTuple_New(size);
|
PyObject* vals_obj = PyTuple_New(size);
|
||||||
BA_PRECONDITION(vals_obj);
|
assert(vals_obj);
|
||||||
for (Py_ssize_t i = 0; i < size; i++) {
|
for (Py_ssize_t i = 0; i < size; i++) {
|
||||||
Texture* t = vals[i];
|
Texture* t = vals[i];
|
||||||
|
|
||||||
@ -2048,7 +2048,7 @@ auto Python::GetNodeAttr(Node* node, const char* attr_name) -> PyObject* {
|
|||||||
std::vector<Sound*> vals = attr.GetAsSounds();
|
std::vector<Sound*> vals = attr.GetAsSounds();
|
||||||
Py_ssize_t size = vals.size();
|
Py_ssize_t size = vals.size();
|
||||||
PyObject* vals_obj = PyTuple_New(size);
|
PyObject* vals_obj = PyTuple_New(size);
|
||||||
BA_PRECONDITION(vals_obj);
|
assert(vals_obj);
|
||||||
for (Py_ssize_t i = 0; i < size; i++) {
|
for (Py_ssize_t i = 0; i < size; i++) {
|
||||||
Sound* s = vals[i];
|
Sound* s = vals[i];
|
||||||
|
|
||||||
@ -2063,7 +2063,7 @@ auto Python::GetNodeAttr(Node* node, const char* attr_name) -> PyObject* {
|
|||||||
std::vector<Model*> vals = attr.GetAsModels();
|
std::vector<Model*> vals = attr.GetAsModels();
|
||||||
Py_ssize_t size = vals.size();
|
Py_ssize_t size = vals.size();
|
||||||
PyObject* vals_obj = PyTuple_New(size);
|
PyObject* vals_obj = PyTuple_New(size);
|
||||||
BA_PRECONDITION(vals_obj);
|
assert(vals_obj);
|
||||||
for (Py_ssize_t i = 0; i < size; i++) {
|
for (Py_ssize_t i = 0; i < size; i++) {
|
||||||
Model* m = vals[i];
|
Model* m = vals[i];
|
||||||
|
|
||||||
@ -2078,7 +2078,7 @@ auto Python::GetNodeAttr(Node* node, const char* attr_name) -> PyObject* {
|
|||||||
std::vector<CollideModel*> vals = attr.GetAsCollideModels();
|
std::vector<CollideModel*> vals = attr.GetAsCollideModels();
|
||||||
Py_ssize_t size = vals.size();
|
Py_ssize_t size = vals.size();
|
||||||
PyObject* vals_obj = PyTuple_New(size);
|
PyObject* vals_obj = PyTuple_New(size);
|
||||||
BA_PRECONDITION(vals_obj);
|
assert(vals_obj);
|
||||||
for (Py_ssize_t i = 0; i < size; i++) {
|
for (Py_ssize_t i = 0; i < size; i++) {
|
||||||
CollideModel* c = vals[i];
|
CollideModel* c = vals[i];
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,15 @@
|
|||||||
# Released under the MIT License. See LICENSE for details.
|
# Released under the MIT License. See LICENSE for details.
|
||||||
#
|
#
|
||||||
"""Utilities for debugging memory leaks or other issues."""
|
"""Utilities for debugging memory leaks or other issues.
|
||||||
|
|
||||||
|
IMPORTANT - these functions use the gc module which looks 'under the hood'
|
||||||
|
at Python and sometimes returns not-fully-initialized objects, which may
|
||||||
|
cause crashes or errors due to suddenly having references to them that they
|
||||||
|
didn't expect, etc. See https://github.com/python/cpython/issues/59313.
|
||||||
|
For this reason, these methods should NEVER be called in production code.
|
||||||
|
Enable them only for debugging situations and be aware that their use may
|
||||||
|
itself cause problems. The same is true for the gc module itself.
|
||||||
|
"""
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import gc
|
import gc
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user